Skip to content

feat: add lucy-2.6 (realtime + batch) at 720p - #76

Merged
AdirAmsalem merged 1 commit into
mainfrom
conductor/lucy-26-python
Oct 25, 2026
Merged

AdirAmsalem merged 1 commit into
mainfrom
conductor/lucy-26-python

Conversation

@AdirAmsalem

@AdirAmsalem AdirAmsalem commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

Description

Registers lucy-2.6, the successor to lucy-2.5, on the realtime and video surfaces. It mirrors the JS SDK registry, the source of truth that this package's tests are written against. Lucy 2.6 is a field-for-field clone of lucy-2.5.

  1. lucy-2.6 is opt-in by explicit name. lucy-latest still resolves to lucy-2.5 server-side. Its comments, geometry and speeds are untouched here, and flipping the alias is a follow-up PR.
  2. 2.6 offers the fast tier on realtime. The API serves it on ?speed=fast and bills it like 2.5. The realtime entry advertises supported_speeds=("fast",), and lucy-2.6 is added to every list of fast-mode models (the unsupported-speed warning, the RealtimeConnectOptions.speed docstring, the README, the examples and the playground help).
  3. lucy-2.5 is unchanged, so the change is purely additive.

Geometry was confirmed against the deployed model config: 1280x720 on both surfaces, realtime 30 fps, batch 20 fps. The batch input schema is VideoEdit2Input, the same as lucy-2.5, because the API's create_job_lucy_2_6 takes the same form fields as create_job_lucy_2_5.

Usage

from decart import DecartClient, models
from decart.realtime import RealtimeClient, RealtimeConnectOptions

client = DecartClient(api_key="...")

# Realtime (fast tier optional)
realtime = await RealtimeClient.connect(
    base_url=client.realtime_base_url,
    api_key=client.api_key,
    local_track=local_track,
    options=RealtimeConnectOptions(
        model=models.realtime("lucy-2.6"),
        on_remote_stream=on_remote_stream,
        speed="fast",  # omit for standard mode
    ),
)

# Batch
result = await client.queue.submit_and_poll(
    {
        "model": models.video("lucy-2.6"),
        "prompt": "Turn the scene into a watercolor painting",
        "data": video_path,
    }
)

Changes

File Change
decart/models.py RealTimeModels + VideoModels Literals; _MODELS["realtime"] entry (/v1/stream, 30 fps, 1280×720, supported_speeds=("fast",)) and _MODELS["video"] entry (/v1/jobs/lucy-2.6, 20 fps, 1280×720, VideoEdit2Input); added to the fast-mode warning text and the Models.video() docstring
decart/realtime/types.py Added to the fast-capable list in the RealtimeConnectOptions.speed docstring
README.md, examples/README.md, examples/realtime_synthetic.py Added to the fast-mode model lists
playground/playground.py Added to REALTIME_MODELS (after lucy-2.5) and the --speed help text
tests/test_models.py Canonical realtime/video coverage for 2.6 (including supported_speeds == ("fast",)); added to FAST_REALTIME_MODELS, which pins the fast-mode models to the JS SDK registry
tests/test_realtime_unit.py Added to the test that checks speed="fast" sends no warning for supported models

In the Models.video() docstring, the "(latest generation)" label moves from lucy-2.5 to lucy-2.6. This is the only change to any existing lucy-2.5 text.

Verification

Run on a Linux VM with Python 3.12 via uv, using the same steps as .github/workflows/ci.yml:

Command Result
uv run pytest tests/ -v 132 passed, 0 failed
uv run pytest tests/test_models.py tests/test_realtime_unit.py 44 passed
uv run black --check decart/ tests/ examples/ playground/ 43 files unchanged
uv run ruff check decart/ tests/ examples/ playground/ All checks passed
uv run mypy decart/ 37 errors in 7 files, identical on a clean main (CI step is continue-on-error)
python -m py_compile on the 4 CI-checked examples + playground/playground.py OK
uv build sdist + wheel built

Not run: no live session or job against api.decart.ai. The realtime playground needs a camera and an API key, and the examples need DECART_API_KEY, so on this headless VM they were only syntax-checked, as CI does. The registry values match the deployed model config, and POST /v1/models/resolve {"model":"lucy-2.6"} returns lucy-2.6.

Compatibility

Source-compatible and additive. No existing model id, alias, geometry or capability changes.

Follow-ups

  • Flip lucy-latest to lucy-2.6 once the server-side alias moves.

Note

Low Risk
Additive registry and documentation updates; no changes to existing model IDs, aliases, or runtime connection logic beyond new entries.

Overview
Adds lucy-2.6 to the SDK model registry for realtime (/v1/stream, 30 fps, 1280×720, supported_speeds=("fast",)) and batch video (/v1/jobs/lucy-2.6, 20 fps, same geometry, VideoEdit2Input). Callers opt in via models.realtime("lucy-2.6") and models.video("lucy-2.6"); lucy-latest is unchanged and still documents as resolving to lucy-2.5 server-side.

lucy-2.6 is included everywhere fast realtime is listed (unsupported-speed warning, RealtimeConnectOptions.speed docstring, README, examples, playground --model / --speed help). The only tweak to existing model copy is moving the “latest generation” label from lucy-2.5 to lucy-2.6 in Models.video() docs. Tests assert registry fields and that fast-mode behavior matches the JS SDK set.

Reviewed by Cursor Bugbot for commit 6a17c50. Bugbot is set up for automated code reviews on this repo. Configure here.

@AdirAmsalem
AdirAmsalem merged commit 5d9518f into main Oct 25, 2026
9 checks passed
@AdirAmsalem
AdirAmsalem deleted the conductor/lucy-26-python branch October 25, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants