Changelog
0.6.0 - 2026-02-23
Added
Expose extra internal source pads in composed transforms
Handle duplicate pad names in Compose
Changed
Make ParallelizeBase part of the public API
Make Bottle HTTP control use a random port by default
Put tag in registry file full path
0.5.0 - 2026-01-15
Added
Add Compose class for composing multiple elements into reusable units
Support for ComposedSourceElement, ComposedTransformElement,
ComposedSinkElement via .as_source(), .as_transform(), .as_sink()
Add class-level fixed/extra pad configuration for elements via
static_sink_pads, static_source_pads, allow_dynamic_sink_pads,
allow_dynamic_source_pads
Add validation decorators for element reuse
Add CollectSink flag to keep frames where data is None
Changed
Use short pad names as keys in CollectSink and IterSource
Expose pad_name (short name) from pads, specify full name within base
PadLike class
Switch to native types for type hints where applicable
Make buffer logging level DEBUG instead of INFO
Fixed
Fix CollectSink for TSFrame buffers attribute
Fix pickling issues on Mac OS for parallelize elements
0.4.0 - 2025-11-03
Added
Add pipeline.connect() for implicit pipeline linking with automatic pad
matching
Add select() and group() for element grouping and pad selection
select_by_source() / select_by_sink() for iterating over pads
Add partial match strategy for connect() with overlapping pad names
Add StatsSource for system/process statistics via psutil
Add WorkerContext for consistent subprocess/parallelize API
Add error propagation from worker processes in parallelize elements
Add element entry point registration
Changed
Bump minimum Python version to 3.10
Simplify parallelize and subprocess API
Define abstract base classes for elements and PadLike
Allow generic frame-like objects for elements
Migrate logging functionality to separate logger module
Fixed
Fix memory profiling when logger is set to NOTSET
Provide pad context for runtime exceptions
0.3.0 - 2025-05-14
Added
Add threading mode for parallelize elements (_use_threading_override)
Add DataSpec for frame data specification and validation
Add sub_process_shutdown() for graceful worker shutdown
Changed
Flatten pad class hierarchy
Fixed
Reset received signals in SignalEOS on context manager exit
Make sure input queue is actually empty when cleaning up subprocess
Improve exception handling in subprocess
0.2.0 - 2025-04-17
Added
Add HTTPControl for REST endpoint monitoring and control
GET/POST routes with wildcard key support
exchange_state() for bidirectional state updates
Configurable tag prefix for routes
Registry file location control
Add CallableTransform.from_callable() and from_combinations() class
methods
Add subprocess/parallelize elements for multiprocessing
ParallelizeTransformElement, ParallelizeSinkElement,
ParallelizeSourceElement
Shared memory support via Parallelize.to_shm()
Add SignalEOS for graceful SIGINT/SIGTERM handling
Add memory profiling via SGNLOGLEVEL=pipeline:MEMPROF
Add pipeline visualization via pipeline.visualize()
Add Jupyter notebook support (auto-detects running event loop)
Add InternalPad to all elements
Add element logging support
Add NullSink verbose option
Add pipeline.check() for validating pad connections
Changed
Rename TransformElement.transform() to .new()
Use abbreviated "snk" instead of "sink" in internal pad names
Fixed
Fix CallableTransform.from_combinations pad uniqueness
Fix NullSink EOS handling based on frame.EOS
0.1.0 - 2024-12-13
Initial release
Core framework: SourceElement, TransformElement, SinkElement
Frame with data, EOS, is_gap, spec, metadata attributes
SourcePad, SinkPad with linking and graph execution
Pipeline with async event loop and TopologicalSorter-based DAG execution
NullSource, IterSource, DequeSource built-in sources
NullSink, CollectSink, DequeSink built-in sinks
CallableTransform for wrapping callables as transforms