Skip to content

feat: add lucy-vton-3.6 (realtime + batch) at 720p - #217

Merged
tomershlasky merged 4 commits into
mainfrom
new-york-v1
Oct 7, 2026
Merged

tomershlasky merged 4 commits into
mainfrom
new-york-v1

Conversation

@tomershlasky

@tomershlasky tomershlasky commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Description

Registers lucy-vton-3.6 on the realtime and video surfaces. The model is already served in production — this change only makes it reachable through the typed SDK surface.

Three things worth stating explicitly:

  1. lucy-vton-latest still resolves to lucy-vton-3.5. 3.6 is opt-in by explicit name. Both lucy-vton-latest registry entries and their comments are untouched.
  2. 3.6 is not offered on the fast tier. The registry entry omits supportedSpeeds, and the fast-mode prose in README.md, src/realtime/client.ts and the playground speed dropdown is unchanged.
  3. lucy-vton-3.5 is unchanged. Purely additive, so the public RealTimeModels / VideoModels / CanonicalModel unions only widen.

1280x720 on both surfaces, fps {ideal: 30, max: 30} realtime and 20 video, matching what the API serves.

lucy-vton-3.5 was landed twice: #188 advertised 1088x624, was reverted by #189, and re-landed at 720p as #196. The geometry here was confirmed against the deployed model rather than copied from a sibling.

Usage

import { createDecartClient, models } from "@decartai/sdk";

const client = createDecartClient({ apiKey: process.env.DECART_API_KEY });

// Realtime
const model = models.realtime("lucy-vton-3.6");
const realtimeClient = await client.realtime.connect(stream, {
  model,
  onRemoteStream: (editedStream) => { videoEl.srcObject = editedStream; },
});
await realtimeClient.set({ prompt: "A navy blue hoodie", image: garmentFile });

// Batch
const result = await client.queue.submitAndPoll({
  model: models.video("lucy-vton-3.6"),
  prompt: "Wearing the garment from the reference image",
  reference_image: garmentFile,
  data: videoFile,
});

Changes

File Change
src/shared/model.ts 3 canonical name lists, 2 zod unions, modelInputSchemas, realtime + video registry entries, 2 JSDoc option lists
src/process/types.ts lucy-vton-3.6 into the VideoEdit2Inputs branch of ModelSpecificInputs
AGENTS.md Supported Models lists, plus a new Adding a Model runbook
index.html Lucy VTON 3.6 in the Canonical optgroup; custom-model placeholder moved off lucy-vton-3.6 (it now names a real model, so it no longer demonstrates an unregistered one)
tests/* canonical option arrays, listModels() 21 → 23, per-surface registry tests, e2e coverage

The new unit tests assert supportedSpeeds is undefined on 3.6. The existing fastRealtimeModels array and its "does not set supportedSpeeds on any other model or surface" assertion are deliberately left at 4 entries — that pair is what catches a mistaken fast-tier entry.

Why the runbook

This is the third VTON rollout across the same SDK repos with no written procedure, and one of them had to be reverted everywhere. AGENTS.md now records the nine registration sites in model.ts, what each registry value must be confirmed against, the -latest alias rule, and why supportedSpeeds must match what the service actually offers (it is a billing claim, not a hint — an unsupported tier is rejected at connect time).

Verification

Command Result
pnpm --filter @decartai/sdk typecheck pass
pnpm --filter @decartai/sdk test 350 passed (14 files)
pnpm --filter @decartai/sdk build 73 files, 252.88 kB
pnpm --filter @decartai/sdk test:package pass
pnpm --filter @decartai/sdk format:check 83 files, clean

Live tests (tests/e2e.test.ts -t "lucy-vton-3.6", tests/e2e-realtime.test.ts) need DECART_API_KEY and run in CI on the org key.

Compatibility

Source-compatible and additive. No existing model id, alias, geometry or capability changes. listModels() returns 23 instead of 21.

Follow-ups

Mirrored PRs in decart-python, decart-ios, decart-android and decart-cpp, then the platform registry and docs — the latter is gated on this package being published.


Note

Low Risk
Additive model registry and type union widening only; no changes to existing models, aliases, or fast-tier behavior for 3.5/latest.

Overview
Registers lucy-vton-3.6 on the typed SDK for realtime (/v1/stream) and queue video (/v1/generate + /v1/jobs), at 1280×720, so callers can use models.realtime("lucy-vton-3.6") and models.video("lucy-vton-3.6") without custom model overrides. lucy-vton-latest is unchanged (still 3.5); 3.6 is opt-in by explicit name.

The realtime registry omits supportedSpeeds for 3.6 (unlike 3.5), reflecting that the fast tier is not offered. Process typings map 3.6 to VideoEdit2Inputs like other VTON/edit models.

AGENTS.md gains an Adding a Model runbook (registry sites, API verification, -latest aliases, release checklist). The playground index.html adds a canonical Lucy VTON 3.6 option. Unit and e2e tests cover registry metadata, listModels() count (21 → 23), and live queue/realtime paths.

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

tomershlasky added a commit to DecartAI/decart-python that referenced this pull request Oct 7, 2026
Mirrors DecartAI/sdk#217. The model has been served in production since
api#3660; api#4423 moved its realtime route onto the production lucy-realtime
pool. This only makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supported_speeds: lucy-vton-3.6's ModelConfig declares no speed_tiers, so
  FAST_REALTIME_MODELS is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.
@pkg-pr-new

pkg-pr-new Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Open in StackBlitz

npm i https://pkg.pr.new/@decartai/sdk@217

commit: 983334b

Registers lucy-vton-3.6 on the realtime and video surfaces. The model is
already served in production; this change only makes it reachable through the
typed SDK surface.

- 1280x720 on both surfaces, fps {ideal:30,max:30} realtime / 20 video.
- No supportedSpeeds: lucy-vton-3.6 is not offered on the fast tier.
- lucy-vton-latest still resolves to lucy-vton-3.5, so its registry entries and
  alias comments are untouched. 3.6 is opt-in by explicit name.
- lucy-vton-3.5 is unchanged; this is purely additive.

Also adds an "Adding a Model" runbook to AGENTS.md, since 3.5 had to be landed
twice after the first attempt advertised a resolution that did not match how
the model was served.
tomershlasky added a commit to DecartAI/decart-python that referenced this pull request Oct 7, 2026
Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supported_speeds: lucy-vton-3.6 is not offered on the fast tier, so
  FAST_REALTIME_MODELS is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.
tomershlasky added a commit to DecartAI/decart-ios that referenced this pull request Oct 7, 2026
Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supportedSpeeds: lucy-vton-3.6 is not offered on the fast tier, so the
  fastModels set in ModelConfigTests is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.

Both `allCases` overrides are hand-maintained, so they are updated explicitly;
the two factory switches have no `default:` arm, so the compiler enforces them.
tomershlasky added a commit to DecartAI/decart-android that referenced this pull request Oct 7, 2026
Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supportedSpeeds: lucy-vton-3.6 is not offered on the fast tier, so the
  fast-capability pin in RealtimeModelsTest is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.
tomershlasky added a commit to DecartAI/decart-cpp that referenced this pull request Oct 7, 2026
Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 at 30 fps.
- No fastSpeed: lucy-vton-3.6 is not offered on the fast tier, so the withFast
  set in test_models.cpp is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.

kRealtime's std::array size literal goes 7 -> 8.
Comment thread packages/sdk/src/shared/model.ts Outdated
* - `"lucy-2.1"` - Lucy 2.1 realtime video editing
* - `"lucy-2.5"` - Lucy 2.5 realtime video editing
* - `"lucy-vton-3.5"` - Lucy virtual try-on 3.5 (latest)
* - `"lucy-vton-3.5"` - Lucy virtual try-on 3.5 (what `"lucy-vton-latest"` resolves to)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i'd drop those so it wont run out of sync

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done — dropped the parentheticals from both JSDoc lists, so they just name the models now.

Same reasoning as your docs note: the alias target is a moving server-side thing, and restating it next to each model is a line that silently goes stale when the alias moves. Also dropped the // No supportedSpeeds: ... comment on the 3.6 registry entry — the field being absent is the statement.

Applied the same comment removal to the python, Swift, Kotlin and C++ PRs so the five registries stay identical.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lol thi agent go wild and start close the loop + comment by itself @AdirAmsalem
ANyway - done :)

Per review: the JSDoc option lists carried alias-resolution and opt-in notes
that have to be re-edited every time the alias moves, and the registry entry
explained the absence of a field that is simply absent. Both are state that
can go stale without anything catching it.
tomershlasky added a commit that referenced this pull request Oct 7, 2026
…ce (#218)

## Description

This repo is public, and four comments carried internal vocabulary: an
internal service codename in three of them, and a pair of internal
tracker ids in the fourth. None of it is needed to understand the code.

| File | Change |
| --- | --- |
| `src/realtime/config-realtime.ts` | session-limit refusal comment now
says "the server" |
| `tests/realtime.unit.test.ts` | same wording in the test name and its
comment |
| `tests/e2e-realtime.test.ts` | `image_ref` prologue comment now says
"the server" |
| `tests/e2e.test.ts` | tracker ids dropped from the garment-fixture
note; the explanation is kept |

Found while reviewing #217 for the same problem. These are pre-existing
and unrelated to that change, so they are split out here to merge
independently.

Sibling scrubs for the same class of issue: DecartAI/decart-ios#48 and
DecartAI/decart-android#33.

## Verification

- `pnpm --filter @decartai/sdk test` — 374 passed
- `pnpm --filter @decartai/sdk format:check` — clean
- Grep for the removed terms across the repo returns no hits

Comments and one test name only; no behavior change. The renamed test is
local to its file.
tomershlasky added a commit to DecartAI/decart-python that referenced this pull request Oct 7, 2026
* feat: add lucy-vton-3.6 (realtime + batch) at 720p

Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supported_speeds: lucy-vton-3.6 is not offered on the fast tier, so
  FAST_REALTIME_MODELS is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.

* chore: drop the comment explaining an absent field

Per review: supported_speeds is simply not set for lucy-vton-3.6, so a comment
saying so is state that can go stale without anything catching it.
tomershlasky added a commit to DecartAI/decart-android that referenced this pull request Oct 7, 2026
* feat: add lucy-vton-3.6 (realtime + batch) at 720p

Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supportedSpeeds: lucy-vton-3.6 is not offered on the fast tier, so the
  fast-capability pin in RealtimeModelsTest is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.

* chore: drop the comment explaining an absent field

Per review on the JS SDK: supportedSpeeds is simply not set for lucy-vton-3.6,
so a comment saying so is state that can go stale without anything catching it.
tomershlasky added a commit to DecartAI/decart-cpp that referenced this pull request Oct 7, 2026
* feat: add lucy-vton-3.6 realtime model at 720p

Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 at 30 fps.
- No fastSpeed: lucy-vton-3.6 is not offered on the fast tier, so the withFast
  set in test_models.cpp is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.

kRealtime's std::array size literal goes 7 -> 8.

* chore: drop the comment explaining an absent field

Per review on the JS SDK: fastSpeed is simply not set for lucy-vton-3.6, so a
comment saying so is state that can go stale without anything catching it.
tomershlasky added a commit to DecartAI/decart-ios that referenced this pull request Oct 7, 2026
* feat: add lucy-vton-3.6 (realtime + batch) at 720p

Mirrors DecartAI/sdk#217. The model is already served in production; this only
makes it reachable through the typed SDK surface.

- 1280x720 on both surfaces, fps 30 realtime / 20 video.
- No supportedSpeeds: lucy-vton-3.6 is not offered on the fast tier, so the
  fastModels set in ModelConfigTests is deliberately unchanged.
- lucy-vton-latest still resolves to lucy-vton-3.5; 3.6 is opt-in by name.

Both `allCases` overrides are hand-maintained, so they are updated explicitly;
the two factory switches have no `default:` arm, so the compiler enforces them.

* chore: drop the comment explaining an absent field

Per review on the JS SDK: supportedSpeeds is simply not set for lucy-vton-3.6,
so a comment saying so is state that can go stale without anything catching it.
@tomershlasky
tomershlasky merged commit 3465fec into main Oct 7, 2026
5 checks passed
@tomershlasky
tomershlasky deleted the new-york-v1 branch October 7, 2026 12:19
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