What & why
examples/camera-python-effects's processors still take their configuration as keyword parameters on __init__. Since v0.21.0 (#2226), @processor refuses that signature at decoration, so importing the processor module raises and the example no longer starts.
This is the consumer backlog the agent-readable-processor-catalog change owes at ship (docs/plan/changes/archive/2026-09-13-agent-readable-processor-catalog.md). Per docs/plan/ARCHITECTURE.md §Consumers, a converted consumer's breakage is filed at that consumer and never blocks the engine change.
Design
Each processor below takes one config parameter annotated with a config class, and reads its values off that object. The config class is a dataclass whose fields are today's keyword parameters with their defaults, or a TypedDict. rt.add(..., config={...}) in the app stays as it is: the helper builds the config class from the dict. examples/camera-virtual-camera/processors/shader_effect.py (ShaderEffectConfig) is the in-tree model.
examples/camera-python-effects/src/camera_python_effects/processors/crt_film_grain.py — CrtFilmGrain(barrel_curve, scanline_intensity, chromatic_aberration, grain_intensity, grain_speed, vignette_intensity, brightness)
examples/camera-python-effects/src/camera_python_effects/processors/cyberpunk_avatar.py — CyberpunkAvatar(scene_width, scene_height, detection_confidence, pose_model_path)
examples/camera-python-effects/src/camera_python_effects/processors/lerobot_recorder.py — LeRobotRecorder(dataset_root, repo_id, fps, episode_seconds, task, record_stylized) (dataset_root is required, so its field has no default)
examples/camera-python-effects/src/camera_python_effects/processors/neon_overlay_source.py — NeonOverlaySource(width, height)
Done means
- Every processor above declares
def __init__(self, config: <ConfigClass>), and no @processor class in the example takes a keyword parameter.
- The example starts against the published wheel and reaches a running graph.
Validation shape
A fresh uv sync in the example, then run it as its README says. The processor modules import without a decoration refusal and the graph reaches Running.
Needs the physical rig?
GPU, camera
Non-derivable notes
Examples pin the published wheel, so validation needs a release carrying #2226 and #2228 (v0.22.0 or later). A local maturin develop is undone by uv sync.
What & why
examples/camera-python-effects's processors still take their configuration as keyword parameters on__init__. Since v0.21.0 (#2226),@processorrefuses that signature at decoration, so importing the processor module raises and the example no longer starts.This is the consumer backlog the agent-readable-processor-catalog change owes at ship (
docs/plan/changes/archive/2026-09-13-agent-readable-processor-catalog.md). Perdocs/plan/ARCHITECTURE.md§Consumers, a converted consumer's breakage is filed at that consumer and never blocks the engine change.Design
Each processor below takes one
configparameter annotated with a config class, and reads its values off that object. The config class is a dataclass whose fields are today's keyword parameters with their defaults, or a TypedDict.rt.add(..., config={...})in the app stays as it is: the helper builds the config class from the dict.examples/camera-virtual-camera/processors/shader_effect.py(ShaderEffectConfig) is the in-tree model.examples/camera-python-effects/src/camera_python_effects/processors/crt_film_grain.py—CrtFilmGrain(barrel_curve, scanline_intensity, chromatic_aberration, grain_intensity, grain_speed, vignette_intensity, brightness)examples/camera-python-effects/src/camera_python_effects/processors/cyberpunk_avatar.py—CyberpunkAvatar(scene_width, scene_height, detection_confidence, pose_model_path)examples/camera-python-effects/src/camera_python_effects/processors/lerobot_recorder.py—LeRobotRecorder(dataset_root, repo_id, fps, episode_seconds, task, record_stylized)(dataset_rootis required, so its field has no default)examples/camera-python-effects/src/camera_python_effects/processors/neon_overlay_source.py—NeonOverlaySource(width, height)Done means
def __init__(self, config: <ConfigClass>), and no@processorclass in the example takes a keyword parameter.Validation shape
A fresh
uv syncin the example, then run it as its README says. The processor modules import without a decoration refusal and the graph reaches Running.Needs the physical rig?
GPU, camera
Non-derivable notes
Examples pin the published wheel, so validation needs a release carrying #2226 and #2228 (v0.22.0 or later). A local
maturin developis undone byuv sync.