Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion examples/nextjs-realtime/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,3 @@ pnpm dev
This example uses `lucy-restyle-2` for style transformation. You can also use:

- `lucy-2.1` - Lucy 2.1 for video editing with reference image support
- `lucy-vton-2` - Lucy VTON 2
1 change: 0 additions & 1 deletion examples/react-vite/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,3 @@ pnpm dev
This example uses `lucy-restyle-2` for style transformation. You can also use:

- `lucy-2.1` - Lucy 2.1 for video editing with reference image support
- `lucy-vton-2` - Lucy VTON 2
1 change: 0 additions & 1 deletion examples/sdk-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,6 @@ See `examples/nextjs-realtime` or `examples/react-vite` for runnable demos.

- `realtime/lucy-restyle-basic.ts` - Realtime style transformation with `lucy-restyle-2`
- `realtime/lucy-2.1.ts` - Lucy 2.1 realtime video editing with reference image support
- `realtime/lucy-vton-2.ts` - Lucy VTON 2
- `realtime/connection-events.ts` - Handling connection state and errors
- `realtime/prompt-update.ts` - Updating prompt dynamically
- `realtime/custom-model.ts` - Using a custom model definition (e.g., preview/experimental models)
Expand Down
48 changes: 0 additions & 48 deletions examples/sdk-core/realtime/lucy-vton-2.ts

This file was deleted.

4 changes: 2 additions & 2 deletions examples/sdk-core/video/virtual-try-on.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ run(async () => {
apiKey,
});

console.log("Processing virtual try-on with lucy-vton-3...");
console.log("Processing virtual try-on with lucy-vton-latest...");

const inputVideo = fs.readFileSync("input.mp4");

const result = await client.queue.submitAndPoll({
model: models.video("lucy-vton-3"),
model: models.video("lucy-vton-latest"),
prompt: "Wearing a red leather jacket",
data: new Blob([inputVideo]),
onStatusChange: (job) => {
Expand Down
1 change: 0 additions & 1 deletion examples/tanstack-streamer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,3 @@ pnpm dev
This example uses `lucy-2.1` for video editing with reference image support. You can also use:

- `lucy-restyle-2` - Lucy Restyle for style transformation
- `lucy-vton-2` - Lucy VTON 2
6 changes: 0 additions & 6 deletions packages/sdk/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,23 +70,17 @@
### Realtime Models (WebRTC)
- `lucy-2.1` - Real-time video editing (supports reference image)
- `lucy-2.5` - Real-time video editing (supports reference image)
- `lucy-vton-2` - Real-time virtual try-on 2
- `lucy-vton-3` - Real-time virtual try-on 3
- `lucy-vton-3.5` - Real-time virtual try-on 3.5
- `lucy-restyle-2` - Real-time video restyling
- `lucy-latest`, `lucy-vton-latest`, `lucy-restyle-latest` - Server-resolved aliases for the latest stable version (`lucy-vton-latest` → `lucy-vton-3.5`)
- Deprecated: `lucy-2.1-vton-2` → `lucy-vton-2`

### Video Models (Queue API)
- `lucy-clip` - video-to-video editing
- `lucy-2.1` - long-form video editing (720p)
- `lucy-2.5` - long-form video editing (720p)
- `lucy-vton-2` - virtual try-on 2 video editing
- `lucy-vton-3` - virtual try-on 3 video editing
- `lucy-vton-3.5` - virtual try-on 3.5 video editing
- `lucy-restyle-2` - video restyling
- `lucy-latest`, `lucy-vton-latest`, `lucy-restyle-latest`, `lucy-clip-latest` - Server-resolved aliases (`lucy-vton-latest` → `lucy-vton-3.5`)
- Deprecated: `lucy-2.1-vton-2` → `lucy-vton-2`

### Image Models (Process API)
- `lucy-image-2` - image-to-image editing
Expand Down
5 changes: 0 additions & 5 deletions packages/sdk/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -343,14 +343,9 @@ <h3>Configuration</h3>
<optgroup label="Canonical">
<option value="lucy-2.1" selected>Lucy 2.1</option>
<option value="lucy-2.5">Lucy 2.5</option>
<option value="lucy-vton-2">Lucy VTON 2</option>
<option value="lucy-vton-3">Lucy VTON 3</option>
<option value="lucy-vton-3.5">Lucy VTON 3.5</option>
<option value="lucy-restyle-2">Lucy Restyle 2</option>
</optgroup>
<optgroup label="Deprecated aliases">
<option value="lucy-2.1-vton-2">Lucy 2.1 VTON 2 (alias for Lucy VTON 2)</option>
</optgroup>
<optgroup label="Override">
<option value="__custom__">Custom model (any name the API accepts)</option>
</optgroup>
Expand Down
9 changes: 1 addition & 8 deletions packages/sdk/src/process/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -163,14 +163,7 @@ export type ModelSpecificInputs<T extends ModelDefinition> = T["name"] extends "
? ImageEditingInputs
: T["name"] extends "lucy-restyle-v2v" | "lucy-restyle-2"
? VideoRestyleInputs
: T["name"] extends
| "lucy-2.1"
| "lucy-2.5"
| "lucy-vton-2"
| "lucy-vton-3"
| "lucy-vton-3.5"
| "lucy-2.1-vton-2"
| "lucy-vton-latest"
: T["name"] extends "lucy-2.1" | "lucy-2.5" | "lucy-vton-3.5" | "lucy-vton-latest"
? VideoEdit2Inputs
: T["name"] extends "lucy-pro-v2v" | "lucy-clip"
? VideoEditInputs
Expand Down
88 changes: 2 additions & 86 deletions packages/sdk/src/shared/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,14 @@ import { globalInstanceSchema } from "../utils/runtime";
const CANONICAL_MODEL_NAMES = [
"lucy-2.1",
"lucy-2.5",
"lucy-vton-2",
"lucy-vton-3",
"lucy-vton-3.5",
"lucy-restyle-2",
"lucy-clip",
"lucy-image-2",
] as const;

const CANONICAL_REALTIME_MODEL_NAMES = [
"lucy-2.1",
"lucy-2.5",
"lucy-vton-2",
"lucy-vton-3",
"lucy-vton-3.5",
"lucy-restyle-2",
] as const;
const CANONICAL_VIDEO_MODEL_NAMES = [
"lucy-clip",
"lucy-2.1",
"lucy-2.5",
"lucy-vton-2",
"lucy-vton-3",
"lucy-vton-3.5",
"lucy-restyle-2",
] as const;
const CANONICAL_REALTIME_MODEL_NAMES = ["lucy-2.1", "lucy-2.5", "lucy-vton-3.5", "lucy-restyle-2"] as const;
const CANONICAL_VIDEO_MODEL_NAMES = ["lucy-clip", "lucy-2.1", "lucy-2.5", "lucy-vton-3.5", "lucy-restyle-2"] as const;
const CANONICAL_IMAGE_MODEL_NAMES = ["lucy-image-2"] as const;

export const canonicalRealtimeModels = z.enum(CANONICAL_REALTIME_MODEL_NAMES);
Expand All @@ -43,7 +26,6 @@ export type CanonicalModel = z.infer<typeof canonicalModelSchema>;
* Old names still work but will log a deprecation warning.
*/
export const modelAliases = {
"lucy-2.1-vton-2": "lucy-vton-2",
"lucy-pro-v2v": "lucy-clip",
"lucy-restyle-v2v": "lucy-restyle-2",
"lucy-pro-i2i": "lucy-image-2",
Expand All @@ -70,24 +52,18 @@ export const realtimeModels = z.union([
// Canonical names
z.literal("lucy-2.1"),
z.literal("lucy-2.5"),
z.literal("lucy-vton-2"),
z.literal("lucy-vton-3"),
z.literal("lucy-vton-3.5"),
z.literal("lucy-restyle-2"),
// Latest aliases (server-side resolution)
z.literal("lucy-latest"),
z.literal("lucy-vton-latest"),
z.literal("lucy-restyle-latest"),
// Deprecated names (use canonical names above instead)
z.literal("lucy-2.1-vton-2"),
]);
export const videoModels = z.union([
// Canonical names
z.literal("lucy-clip"),
z.literal("lucy-2.1"),
z.literal("lucy-2.5"),
z.literal("lucy-vton-2"),
z.literal("lucy-vton-3"),
z.literal("lucy-vton-3.5"),
z.literal("lucy-restyle-2"),
// Latest aliases (server-side resolution)
Expand All @@ -96,7 +72,6 @@ export const videoModels = z.union([
z.literal("lucy-restyle-latest"),
z.literal("lucy-clip-latest"),
// Deprecated names (use canonical names above instead)
z.literal("lucy-2.1-vton-2"),
z.literal("lucy-pro-v2v"),
z.literal("lucy-restyle-v2v"),
]);
Expand Down Expand Up @@ -264,8 +239,6 @@ export const modelInputSchemas = {
"lucy-restyle-2": restyleSchema,
"lucy-2.1": videoEdit2Schema,
"lucy-2.5": videoEdit2Schema,
"lucy-vton-2": videoEdit2Schema,
"lucy-vton-3": videoEdit2Schema,
"lucy-vton-3.5": videoEdit2Schema,
// Latest aliases (server-side resolution)
"lucy-latest": videoEdit2Schema,
Expand All @@ -274,7 +247,6 @@ export const modelInputSchemas = {
"lucy-clip-latest": videoEditSchema,
"lucy-image-latest": imageEditSchema,
// Deprecated names (kept for backward compatibility)
"lucy-2.1-vton-2": videoEdit2Schema,
"lucy-pro-v2v": videoEditSchema,
"lucy-pro-i2i": imageEditSchema,
"lucy-restyle-v2v": restyleSchema,
Expand Down Expand Up @@ -359,22 +331,6 @@ const _models = {
height: 720,
inputSchema: z.object({}),
},
"lucy-vton-2": {
urlPath: "/v1/stream",
name: "lucy-vton-2" as const,
fps: { ideal: 30, max: 30 },
width: 1088,
height: 624,
inputSchema: z.object({}),
},
"lucy-vton-3": {
urlPath: "/v1/stream",
name: "lucy-vton-3" as const,
fps: { ideal: 30, max: 30 },
width: 1088,
height: 624,
inputSchema: z.object({}),
},
"lucy-vton-3.5": {
urlPath: "/v1/stream",
name: "lucy-vton-3.5" as const,
Expand Down Expand Up @@ -417,15 +373,6 @@ const _models = {
height: 704,
inputSchema: z.object({}),
},
// Deprecated names (use canonical names above instead)
"lucy-2.1-vton-2": {
urlPath: "/v1/stream",
name: "lucy-2.1-vton-2" as const,
fps: { ideal: 30, max: 30 },
width: 1088,
height: 624,
inputSchema: z.object({}),
},
},
image: {
// Canonical name
Expand Down Expand Up @@ -488,24 +435,6 @@ const _models = {
height: 720,
inputSchema: modelInputSchemas["lucy-2.5"],
},
"lucy-vton-2": {
urlPath: "/v1/generate/lucy-vton-2",
queueUrlPath: "/v1/jobs/lucy-vton-2",
name: "lucy-vton-2" as const,
fps: 20,
width: 1088,
height: 624,
inputSchema: modelInputSchemas["lucy-vton-2"],
},
"lucy-vton-3": {
urlPath: "/v1/generate/lucy-vton-3",
queueUrlPath: "/v1/jobs/lucy-vton-3",
name: "lucy-vton-3" as const,
fps: 20,
width: 1088,
height: 624,
inputSchema: modelInputSchemas["lucy-vton-3"],
},
"lucy-vton-3.5": {
urlPath: "/v1/generate/lucy-vton-3.5",
queueUrlPath: "/v1/jobs/lucy-vton-3.5",
Expand Down Expand Up @@ -563,15 +492,6 @@ const _models = {
inputSchema: modelInputSchemas["lucy-clip-latest"],
},
// Deprecated names (use canonical names above instead)
"lucy-2.1-vton-2": {
urlPath: "/v1/generate/lucy-2.1-vton-2",
queueUrlPath: "/v1/jobs/lucy-2.1-vton-2",
name: "lucy-2.1-vton-2" as const,
fps: 20,
width: 1088,
height: 624,
inputSchema: modelInputSchemas["lucy-2.1-vton-2"],
},
"lucy-pro-v2v": {
urlPath: "/v1/generate/lucy-pro-v2v",
queueUrlPath: "/v1/jobs/lucy-pro-v2v",
Expand Down Expand Up @@ -628,8 +548,6 @@ export const models = {
* Available options:
* - `"lucy-2.1"` - Lucy 2.1 realtime video editing
* - `"lucy-2.5"` - Lucy 2.5 realtime video editing
* - `"lucy-vton-2"` - Lucy virtual try-on 2
* - `"lucy-vton-3"` - Lucy virtual try-on 3
* - `"lucy-vton-3.5"` - Lucy virtual try-on 3.5 (latest)
* - `"lucy-restyle-2"` - Realtime video restyling
*/
Expand All @@ -648,8 +566,6 @@ export const models = {
* - `"lucy-clip"` - Video-to-video editing
* - `"lucy-2.1"` - Long-form video editing (Lucy 2.1)
* - `"lucy-2.5"` - Long-form video editing (Lucy 2.5)
* - `"lucy-vton-2"` - Virtual try-on 2 video editing
* - `"lucy-vton-3"` - Virtual try-on 3 video editing
* - `"lucy-vton-3.5"` - Virtual try-on 3.5 video editing (latest)
* - `"lucy-restyle-2"` - Video restyling
*/
Expand Down
2 changes: 0 additions & 2 deletions packages/sdk/tests/e2e-realtime.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,6 @@ const REALTIME_MODELS: RealTimeModels[] = [
"lucy-restyle-2",
"lucy-2.1",
"lucy-2.5",
"lucy-vton-2",
"lucy-vton-3",
"lucy-vton-3.5",
];

Expand Down
25 changes: 1 addition & 24 deletions packages/sdk/tests/e2e.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const OUTPUT_DIR = join(__dirname, "e2e-output");
const VIDEO_FIXTURE = join(__dirname, "fixtures", "video.mp4");
const IMAGE_FIXTURE = join(__dirname, "fixtures", "image.png");
// Try-on models take the GARMENT as reference_image; a non-garment reference (the dogs above) makes
// lucy-vton-3 undress the subject and the output fails moderation (PLA-808, PLA-817).
// the try-on models undress the subject and the output fails moderation (PLA-808, PLA-817).
const GARMENT_FIXTURE = join(__dirname, "fixtures", "garment.png");

const TIMEOUT = 5 * 60 * 1000; // 5 minutes
Expand Down Expand Up @@ -194,29 +194,6 @@ describe.concurrent("E2E Tests", { timeout: TIMEOUT, retry: 2 }, () => {
await expectResult(result, "lucy-2.5-reference_image", ".mp4");
});

it("lucy-vton-3: virtual try-on (prompt)", async () => {
const result = await client.queue.submitAndPoll({
model: models.video("lucy-vton-3"),
prompt: "Wearing a red leather jacket",
data: videoBlob,
seed: 42,
});

await expectResult(result, "lucy-vton-3-prompt", ".mp4");
});

it("lucy-vton-3: virtual try-on (reference_image)", async () => {
const result = await client.queue.submitAndPoll({
model: models.video("lucy-vton-3"),
prompt: "",
reference_image: garmentBlob,
data: videoBlob,
seed: 42,
});

await expectResult(result, "lucy-vton-3-reference_image", ".mp4");
});

it("lucy-vton-3.5: virtual try-on (prompt)", async () => {
const result = await client.queue.submitAndPoll({
model: models.video("lucy-vton-3.5"),
Expand Down
Loading
Loading