-
Notifications
You must be signed in to change notification settings - Fork 53
Comparing changes
Open a pull request
base repository: daydreamlive/scope
base: v0.1.7
head repository: daydreamlive/scope
compare: v0.1.8
- 19 commits
- 69 files changed
- 12 contributors
Commits on Mar 10, 2026
-
ci: speed up PR deploys by decoupling from standard image build (#649)
* ci: speed up PR deploys by decoupling from standard image build Extract shared docker build logic into a reusable workflow (docker-build-image.yml) to eliminate duplication. - build-cloud and build-standard now call the same reusable workflow - deploy-pr only waits for build-cloud (~3min vs ~12min) - Standard image still builds in parallel for releases Before: deploy-pr waited ~12 min (both images) After: deploy-pr waits ~3 min (cloud only) Signed-off-by: livepeer-robot <[email protected]> * fix: set permissions at workflow level for reusable workflow Reusable workflows inherit GITHUB_TOKEN permissions from the caller workflow, not from their own job-level permissions block. Move permissions to workflow level so the reusable workflow can request packages:write for pushing Docker images. Signed-off-by: livepeer-robot <[email protected]> * preserve comments Signed-off-by: Max Holland <[email protected]> --------- Signed-off-by: livepeer-robot <[email protected]> Signed-off-by: Max Holland <[email protected]> Co-authored-by: livepeer-robot <[email protected]> Co-authored-by: Max Holland <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 5d1800b - Browse repository at this point
Copy the full SHA 5d1800bView commit details -
prefix logs with connection ID
Signed-off-by: Max Holland <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for c831e8d - Browse repository at this point
Copy the full SHA c831e8dView commit details -
Merge branch 'main' into mh/connection-id-logs
Signed-off-by: Max Holland <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 732f947 - Browse repository at this point
Copy the full SHA 732f947View commit details -
Merge pull request #648 from daydreamlive/mh/connection-id-logs
Prefix logs with remote inference connection ID
Configuration menu - View commit details
-
Copy full SHA for 4cba0a9 - Browse repository at this point
Copy the full SHA 4cba0a9View commit details -
feat: improve cloud button discoverability and header icon visibility
Change disconnected state text from "Disconnected" to "Enable Remote Inference" so new users understand the feature is available. Bump opacity on all three header icons (cloud, plugins, settings) for better visibility. Update e2e test selector to match new title. Signed-off-by: emranemran <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 9f7cb3b - Browse repository at this point
Copy the full SHA 9f7cb3bView commit details
Commits on Mar 11, 2026
-
Merge pull request #654 from daydreamlive/emran/cloud-ux-improvement
feat: improve cloud button discoverability and header icon visibility
Configuration menu - View commit details
-
Copy full SHA for 6969d38 - Browse repository at this point
Copy the full SHA 6969d38View commit details -
Use daydream API to check if plugin is allowed (#646)
* Use daydream API to check if plugin is allowed Signed-off-by: Max Holland <[email protected]> * address review comment, return 503 on daydream API error Signed-off-by: Max Holland <[email protected]> --------- Signed-off-by: Max Holland <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 6fbf39e - Browse repository at this point
Copy the full SHA 6fbf39eView commit details -
fix: invalidate plugin cache when (un)installing (#666)
This means we can avoid waiting for a restart when we clear up plugins on remote inference disconnect Signed-off-by: Max Holland <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 5f6ee61 - Browse repository at this point
Copy the full SHA 5f6ee61View commit details
Commits on Mar 12, 2026
-
Configuration menu - View commit details
-
Copy full SHA for 58a6faa - Browse repository at this point
Copy the full SHA 58a6faaView commit details -
Fix displaying new loading text (#659)
Signed-off-by: Max Holland <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 853a23a - Browse repository at this point
Copy the full SHA 853a23aView commit details -
Make Settings dialog box size match Plugins (#661)
Signed-off-by: Thom Shutt <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for fc905d8 - Browse repository at this point
Copy the full SHA fc905d8View commit details -
Add MCP server for AI-assisted pipeline control (#660)
* Add MCP server for AI-assisted pipeline control Expose Scope's API as MCP (Model Context Protocol) tools so AI assistants can programmatically manage pipelines, control parameters, capture frames, and interact with a running Scope instance over stdio. Backend: - Add mcp_server.py: thin MCP-over-stdio client that proxies to the Scope HTTP API, with tools for pipeline lifecycle, parameter control, frame capture, session metrics, recording, LoRA/plugin management, and more - Add REST endpoints for headless sessions (start/stop stream, get/set parameters, capture frame, session metrics, unload pipeline, recording) - Add HeadlessSession to WebRTCManager for sessions without a browser - Add broadcast_notification() for pushing parameter changes to frontends - Add VideoProcessingTrack.get_last_frame() public accessor - Defer logging setup to run_server() so the MCP subprocess does not create a competing log file that shadows the server's logs - Add --mcp CLI flag and optional `mcp` dependency group Frontend: - Add onParametersUpdated callback to useUnifiedWebRTC for external parameter updates (REST API, MCP, OSC) - Extract applyBackendParamsToSettings in StreamPage so both local sends and external pushes share the same settings-sync path Signed-off-by: RyanOnTheInside <[email protected]> * review fixes Signed-off-by: RyanOnTheInside <[email protected]> * base64 fix Signed-off-by: RyanOnTheInside <[email protected]> * Remove recording and unload_pipeline MCP tools These endpoints are not needed for MCP workflows - removes start_recording, stop_recording, and unload_pipeline tools along with their references in instructions and docstrings. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Rename session_router to mcp_router and simplify session endpoints Replaces session_id path parameters with implicit active-session lookup for stop, recording start/stop endpoints, aligning the REST API with MCP server usage patterns. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Simplify headless session to single-session model and remove unused endpoints Remove recording and pipeline unload endpoints from MCP router, and refactor WebRTCManager from a multi-session dict to a single headless session slot since only one headless session is supported at a time. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafal Leszko <[email protected]> * Extract HeadlessSession from webrtc.py into its own module HeadlessSession has no WebRTC dependencies — it runs FrameProcessor directly. Moving it to headless_session.py clarifies the separation between WebRTC and MCP-only session management. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafal Leszko <[email protected]> * Rename headless_session.py to headless.py Consistent with sibling module naming (webrtc.py, recording.py). Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafal Leszko <[email protected]> * add v2v mode Signed-off-by: RyanOnTheInside <[email protected]> --------- Signed-off-by: RyanOnTheInside <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> Signed-off-by: Rafal Leszko <[email protected]> Co-authored-by: Rafał Leszko <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for ec4fedd - Browse repository at this point
Copy the full SHA ec4feddView commit details
Commits on Mar 13, 2026
-
* deps and desc Signed-off-by: RyanOnTheInside <[email protected]> * port flexibility, ocp now you tell claude which port to connect on, eg: "connect to scope on port 8009". params are dynamic. Signed-off-by: RyanOnTheInside <[email protected]> * Move mcp from optional extra to core dependency Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> --------- Signed-off-by: RyanOnTheInside <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> Co-authored-by: Rafał Leszko <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 8d0f105 - Browse repository at this point
Copy the full SHA 8d0f105View commit details -
* Add graph mode backend: graph executor, schema, state, and pipeline changes Introduce server-side graph execution infrastructure including graph schema definitions, graph executor for processing node graphs, and graph state management. Update pipeline manager, frame processor, and pipeline processor to support graph-based execution. Add graph inputs/outputs to pipeline schemas. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Refactor and harden graph mode backend Squashed follow-up fixes and improvements: - Fix graph executor pipeline lookup to use node ID instead of pipeline ID - Fix review issues in pipeline processor and frame processor - Validate graph edge ports and clean up _load_events on unload - Acquire input_queue_lock when resizing graph queues - Remove pipeline throttler and add graph validation - Move VACE input video routing from runtime to graph construction - Remove redundant video-only normalization from pipeline_processor - Reject duplicate stream edges targeting the same input port - Fix unknown node_id falling back to broadcast in update_parameters - Simplify graph_executor.py build_graph wiring - Remove unused graph_state.py module - Remove old pipeline chaining remnants - Move build_linear_graph from frame_processor.py to graph_schema.py - Fix queue resize - Refactor pipeline reconciliation logic for readability and add unit tests - Fix ruff B905 lint error: add strict=True to zip() call Signed-off-by: Rafał Leszko <[email protected]> * Fix extra params filtering to use output queues instead of hardcoded key Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> --------- Signed-off-by: Rafał Leszko <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for a1c65e3 - Browse repository at this point
Copy the full SHA a1c65e3View commit details -
Remove 'extra_params' log (#678)
Signed-off-by: Rafał Leszko <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 8526d8f - Browse repository at this point
Copy the full SHA 8526d8fView commit details
Commits on Mar 17, 2026
-
DMX Art-Net input support (#657)
* DMX input Signed-off-by: Thom Shutt <[email protected]> * Code review fixes Signed-off-by: Thom Shutt <[email protected]> * Revert logging changes Signed-off-by: Thom Shutt <[email protected]> * fix(settings): dedupe DMX param options by key in select dropdown Prevent same param from multiple pipelines appearing multiple times (e.g. 'zoomzoomzoom' in trigger) by tracking seen keys when grouping. Signed-off-by: Rafał Leszko <[email protected]> Made-with: Cursor * fix(settings): mark form dirty on logging toggle and guard port apply on listening state handleToggleLogging now sets dirty so the logging change is persistable. handleApplyPort checks updated.listening before clearing dirty/toasting success; shows an error toast if the server didn't start listening. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * fix(dmx): validate port range, normalize mappings, and fix channel indexing Adds preferred_port bounds check, normalizes mappings through mappings_to_dict before saving, and corrects off-by-one in unmapped channel logging to use 1-based indexing. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * feat(dmx): make DMX input opt-in (disabled by default) DMX server was always started and the frontend always opened an SSE connection, even when users don't use Art-Net. Now DMX is disabled by default and can be enabled via a toggle in Settings > DMX. The server only binds the UDP port and the frontend only opens the SSE stream when DMX is explicitly enabled. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * feat(dmx): add debug logging for incoming Art-Net packets Log the first UDP packet unconditionally to confirm connectivity, and log every packet (with source address) when verbose logging is enabled. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * fix(dmx): enforce consistent 1-based channel indexing and port validation Use Pydantic Field(ge=1024, le=65535) on all DMX port fields instead of ad-hoc manual checks. Align frontend channel inputs to 1-512 to match the server 1-based convention. Remove misleading dirty flag from the logging toggle since it already persists server-side. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Switch to debug logs --------- Signed-off-by: Thom Shutt <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> Co-authored-by: Rafał Leszko <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 7ac6935 - Browse repository at this point
Copy the full SHA 7ac6935View commit details -
fix: remove FPS-based throttling from input source receiver loop (#701)
The input source loop throttled frame reception based on pipeline FPS, creating a feedback loop: sleep(1/FPS) + receive_latency caused the effective input rate to always undershoot the target, driving FPS downward. For sources with non-trivial receive overhead (NDI, Syphon) this spiraled to ~5.6fps (v0.1.6) or ~2.8fps (v0.1.7). The v0.1.7 regression was caused by the batch-level FPS tracking (66e8d31) being more stable — the old per-frame jitter partially counteracted the spiral via temporary FPS overshoots. Now the loop receives as fast as the source provides, matching the WebRTC camera input path. Backpressure is handled by put_nowait() dropping frames when the queue is full. Signed-off-by: Rafał Leszko <[email protected]> Co-authored-by: Claude Opus 4.6 (1M context) <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 33478e2 - Browse repository at this point
Copy the full SHA 33478e2View commit details -
Tempo Sync Modulation - No Pipelines (#703)
* Tempo sync api with bpm, beat_phase, bar_position, beat_count, and is_playing. Signed-off-by: BuffMcBigHuge <[email protected]> * Small refactor. Signed-off-by: BuffMcBigHuge <[email protected]> * Tempo sync api with bpm, beat_phase, bar_position, beat_count, and is_playing. Signed-off-by: BuffMcBigHuge <[email protected]> * Small refactor. Signed-off-by: BuffMcBigHuge <[email protected]> * feat: beatsync with timed params Signed-off-by: RyanOnTheInside <[email protected]> Signed-off-by: BuffMcBigHuge <[email protected]> * Modulation engine and pipeline. Signed-off-by: BuffMcBigHuge <[email protected]> * Development and experimentation of pipeline modulation with prompts, steps and others. Signed-off-by: BuffMcBigHuge <[email protected]> * Linting. Signed-off-by: BuffMcBigHuge <[email protected]> * Missing tempo sync panel. Signed-off-by: BuffMcBigHuge <[email protected]> * Signing, merges, repair from bad rebase. Signed-off-by: BuffMcBigHuge <[email protected]> * Small fix. Signed-off-by: BuffMcBigHuge <[email protected]> * Fix small rebase issue. Signed-off-by: BuffMcBigHuge <[email protected]> * Update to tempo sync document. Signed-off-by: BuffMcBigHuge <[email protected]> * Code cleanup and refactor. Signed-off-by: BuffMcBigHuge <[email protected]> * Linting/formatting. Signed-off-by: BuffMcBigHuge <[email protected]> * Better handling. Signed-off-by: BuffMcBigHuge <[email protected]> * Add libasound2 to Dockerfiles * Update doc and CLAUDE.md * Fix tempo sync docs: use uv sync --extra and remove libasound2 from Dockerfiles MIDI requires local hardware access so libasound2 is not useful in containers. Also corrects uv sync --group to --extra across docs. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafal Leszko <[email protected]> * Revert unnecessary DownloadDialog prop changes from tempo sync PR Remove isCloudMode and onOpenLoRAsSettings props that were added to DownloadDialog solely to suppress TypeScript errors in StreamPage, but were never actually used by the component. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Fix quantize detection missing non-primitive discrete params transition (object) and denoising_step_list (array) were not caught by the typeof === "boolean" / "string" checks, so they bypassed beat quantization. Use a DISCRETE_PARAM_KEYS allowlist for key-based detection of known discrete parameters. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Revert unintended package-lock.json changes Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Extract tempo sync endpoints into dedicated router Moves the 5 tempo endpoints from app.py into tempo_router.py, following the same APIRouter pattern as mcp_router.py. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Remove redundant mcp optional dependency group mcp>=1.0.0 is already in core dependencies, so the optional-dependencies entry was unnecessary. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Improve TempoSource/TempoSync robustness and consistency Make TempoSource an ABC with abstract methods, add _enabled_lock for thread-safe access, prune dead notification senders, unify install hints to use `uv sync --extra`, and clean up redundant .get() fallbacks. Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Update uv.lock Signed-off-by: Rafał Leszko <[email protected]> * Refactor tempo sync logic in PipelineProcessor Extract beat boundary calculation to a standalone get_beat_boundary() in tempo_sync.py and consolidate inline beat state handling into a dedicated _apply_tempo_sync() method. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Fix review issues: lock consistency, encapsulation, logging, and lint warnings - Use `self.enabled` property (with lock) in `get_status()` instead of bare `self._enabled` - Add `PipelineProcessor.set_beat_cache_reset_rate()` to encapsulate private attribute access - Downgrade noisy per-frame "Extra params" log from info to debug - Convert f-string logger calls to %-style lazy formatting across tempo sync modules - Fix ESLint exhaustive-deps warnings in StreamPage prompt cycle effect Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * Removal of demo pipelines. Signed-off-by: BuffMcBigHuge <[email protected]> * Fix to clamping of of modulation result, cache state invalidation. Signed-off-by: BuffMcBigHuge <[email protected]> * fix: restore OSC SSE subscription and dmx_server global declaration The OSC SSE EventSource subscription was accidentally deleted when the tempo sync useEffect was added, breaking OSC parameter control. The dmx_server variable was also dropped from the global declaration in lifespan(), causing get_dmx_server() to always return None. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * fix: seed overflow, step list descending invariant, and tempo sync lock race - Use 2**31-1 as upper bound for random seed to stay within signed 32-bit range - Add forward pass in modulate_step_list to fix strictly descending invariant when values are clamped to hi; fall back to clamped original if range is too narrow for distinct values - Unify _source_lock and _enabled_lock into a single _state_lock in TempoSync so enable/disable/get_beat_state see consistent _source + _enabled state Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * fix: guard mido import and fix scheduler quantize_mode race condition Wrap `import mido` in try/except like the Link adapter does, preventing ImportError when the module is imported without mido installed. Also move _quantize_mode and _lookahead_ms reads/writes under the scheduler lock to eliminate a TOCTOU race where the mode could change between the initial check and delay computation. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * fix: make left sidebar sections scroll together as one unit Move overflow scrolling from InputAndControlsPanel to the parent container so Tempo Sync and Outputs scroll with Input & Controls instead of pushing it off-screen. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * feat: include Ableton Link in Electron app builds Add --extra link to uv sync in all three platform setup paths so aalink is installed automatically in the desktop app. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> * fix: include --extra link in uv run so aalink survives implicit sync uv run performs its own sync before executing, which can remove aalink installed during setup. Pass --extra link to uv run as well. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> --------- Signed-off-by: BuffMcBigHuge <[email protected]> Signed-off-by: RyanOnTheInside <[email protected]> Signed-off-by: Rafał Leszko <[email protected]> Signed-off-by: Rafal Leszko <[email protected]> Co-authored-by: RyanOnTheInside <[email protected]> Co-authored-by: Rafal Leszko <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 01a173c - Browse repository at this point
Copy the full SHA 01a173cView commit details -
chore: bump version to 0.1.8 (#705)
Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: leszko <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 2aac541 - Browse repository at this point
Copy the full SHA 2aac541View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff v0.1.7...v0.1.8