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
2 changes: 1 addition & 1 deletion examples/nextjs-realtime/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ This example uses `lucy-restyle-2` for style transformation. You can also use:

- `lucy-restyle` - MirageLSD video restyling model (older)
- `lucy` - Lucy for video editing (add objects, change elements)
- `lucy-2` - Lucy 2 for video editing with reference image support (better quality)
- `lucy-2.1` - Lucy 2.1 for video editing with reference image support
2 changes: 1 addition & 1 deletion examples/react-vite/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,4 @@ This example uses `lucy-restyle-2` for style transformation. You can also use:

- `lucy-restyle` - MirageLSD video restyling model (older)
- `lucy` - Lucy for video editing (add objects, change elements)
- `lucy-2` - Lucy 2 for video editing with reference image support (better quality)
- `lucy-2.1` - Lucy 2.1 for video editing with reference image support
4 changes: 2 additions & 2 deletions examples/sdk-core/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Image models use the synchronous Process API - they return immediately with a Bl
Video models use the asynchronous Queue API - jobs are submitted and polled for completion.

- `video/video-to-video.ts` - Transform existing video with a prompt (`lucy-clip`)
- `video/video-editing.ts` - Edit video with prompt, reference image, or both (`lucy-2`)
- `video/video-editing.ts` - Edit video with prompt, reference image, or both (`lucy-2.1`)
- `video/long-form-video-restyle.ts` - Transform existing video with `lucy-restyle-2`
- `video/manual-polling.ts` - Manual job status polling

Expand All @@ -50,7 +50,7 @@ See `examples/nextjs-realtime` or `examples/react-vite` for runnable demos.
- `realtime/mirage-basic.ts` - Basic Mirage connection (style transformation)
- `realtime/mirage-v2-basic.ts` - Mirage v2 connection (improved style transformation)
- `realtime/lucy-v2v-720p.ts` - Lucy v2v realtime (video editing - add objects, change elements)
- `realtime/lucy-2.ts` - Lucy 2 realtime (better quality video editing with reference image support)
- `realtime/lucy-2.1.ts` - Lucy 2.1 realtime video editing with reference image support
- `realtime/live-avatar.ts` - Live avatar (audio-driven avatar with playAudio or mic input)
- `realtime/connection-events.ts` - Handling connection state and errors
- `realtime/prompt-update.ts` - Updating prompt dynamically
Expand Down
64 changes: 0 additions & 64 deletions examples/sdk-core/realtime/lucy-2.ts

This file was deleted.

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

console.log("Editing video with lucy-2...");
console.log("Editing video with lucy-2.1...");

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

// Option 1: Use a text prompt
const result = await client.queue.submitAndPoll({
model: models.video("lucy-2"),
model: models.video("lucy-2.1"),
prompt: "Transform to watercolor painting style with soft brushstrokes",
data: new Blob([inputVideo]),
onStatusChange: (job) => {
Expand All @@ -29,7 +29,7 @@ run(async () => {
// Option 2: Use a reference image to guide the edit (with empty prompt)
// const referenceImage = fs.readFileSync("reference.png");
// const result = await client.queue.submitAndPoll({
// model: models.video("lucy-2"),
// model: models.video("lucy-2.1"),
// prompt: "",
// reference_image: new Blob([referenceImage]),
// data: new Blob([inputVideo]),
Expand All @@ -41,7 +41,7 @@ run(async () => {
// Option 3: Use both a prompt and a reference image together
// const referenceImage = fs.readFileSync("reference.png");
// const result = await client.queue.submitAndPoll({
// model: models.video("lucy-2"),
// model: models.video("lucy-2.1"),
// prompt: "Apply the style from the reference image",
// reference_image: new Blob([referenceImage]),
// data: new Blob([inputVideo]),
Expand Down
6 changes: 3 additions & 3 deletions examples/tanstack-streamer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ pnpm dev

## Features

- Real-time webcam video transformation using `lucy-2`
- Real-time webcam video transformation using `lucy-2.1`
- Producer + subscriber streaming pattern
- Shareable viewer link via subscribe token
- Dynamic style prompt updates
Expand All @@ -38,7 +38,7 @@ pnpm dev

| Route | Description |
|-------|-------------|
| `/` | **Producer** — streams your camera through `lucy-2`, shows styled output, and generates a shareable viewer link |
| `/` | **Producer** — streams your camera through `lucy-2.1`, shows styled output, and generates a shareable viewer link |
| `/watch?token=...` | **Subscriber** — watches the producer's styled stream (receive-only, no camera needed) |

## How it works
Expand All @@ -51,7 +51,7 @@ pnpm dev

## Models

This example uses `lucy-2` for video editing with reference image support. You can also use:
This example uses `lucy-2.1` for video editing with reference image support. You can also use:

- `lucy-restyle` - MirageLSD video restyling model (older)
- `lucy-restyle-2` - MirageLSD v2 for style transformation
Expand Down
4 changes: 2 additions & 2 deletions examples/tanstack-streamer/src/routes/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ function ProducerPage() {

const start = useCallback(async () => {
try {
const model = models.realtime("lucy-2");
const model = models.realtime("lucy-2.1");

setStatus("requesting-camera");
const stream = await navigator.mediaDevices.getUserMedia({
Expand Down Expand Up @@ -94,7 +94,7 @@ function ProducerPage() {
<div style={{ padding: "2rem", fontFamily: "system-ui, sans-serif" }}>
<h1>Producer</h1>
<p style={{ color: "#666" }}>
Streams your camera through <code>lucy-2</code> and generates a subscribe link for viewers.
Streams your camera through <code>lucy-2.1</code> and generates a subscribe link for viewers.
</p>

{status === "idle" && (
Expand Down
2 changes: 1 addition & 1 deletion examples/ws-signaling-proxy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ pnpm dev # starts proxy on ws://localhost:8080
Clients connect to:

```
ws://localhost:8080/v1/stream?model=lucy_2_rt
ws://localhost:8080/v1/stream?model=lucy-2.1
```

## Environment variables
Expand Down
6 changes: 3 additions & 3 deletions examples/ws-signaling-proxy/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@ const server = createServer((_req, res) => {
const wss = new WebSocketServer({ server });

wss.on("connection", (clientWs: WebSocket, req) => {
// Accept Decart-style URLs: /v1/stream?api_key=...&model=lucy_2_rt
// Accept Decart-style URLs: /v1/stream?api_key=...&model=lucy-2.1
// The proxy ignores api_key from the client and uses its own.
const url = new URL(req.url ?? "/", `http://${req.headers.host}`);
const model = url.searchParams.get("model") ?? "lucy_2_rt";
const model = url.searchParams.get("model") ?? "lucy-2.1";

console.log(`[proxy] client connected from ${req.url} (model=${model})`);

Expand All @@ -37,7 +37,7 @@ wss.on("connection", (clientWs: WebSocket, req) => {

server.listen(PORT, () => {
console.log(`[proxy] listening on ws://localhost:${PORT}`);
console.log(`[proxy] connect with: ws://localhost:${PORT}/?model=lucy_2_rt`);
console.log(`[proxy] connect with: ws://localhost:${PORT}/?model=lucy-2.1`);
});

const shutdown = () => {
Expand Down
2 changes: 1 addition & 1 deletion examples/ws-signaling-proxy/test/e2e.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ test("e2e: signaling flow through proxy", { timeout: 30_000 }, async (t) => {
});

// Connect client
const ws = new WebSocket(`ws://localhost:${port}/v1/stream?model=lucy_2_rt`);
const ws = new WebSocket(`ws://localhost:${port}/v1/stream?model=lucy-2.1`);
await new Promise<void>((r, e) => {
ws.on("open", r);
ws.on("error", e);
Expand Down
4 changes: 2 additions & 2 deletions packages/sdk/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,13 @@
- `mirage` - Real-time video restyling model
- `mirage_v2` - Real-time video restyling model (v2)
- `lucy_v2v_720p_rt` - Real-time video editing model
- `lucy_2_rt` - Real-time video editing model (supports reference image)
- `lucy-2.1` - Real-time video editing model (supports reference image)

### Video Models (Queue API)
- `lucy-pro-v2v` - video-to-video (Pro quality)
- `lucy-motion` - motion-based image-to-video (trajectory-guided animation)
- `lucy-restyle-v2v` - video restyling (video-to-video)
- `lucy-2-v2v` - video-to-video editing (long-form, 720p)
- `lucy-2.1` - video-to-video editing (long-form, 720p)

### Image Models (Process API)
- `lucy-pro-i2i` - image-to-image (Pro quality)
4 changes: 2 additions & 2 deletions packages/sdk/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ <h3>Configuration</h3>
<option value="mirage">Mirage</option>
<option value="mirage_v2" selected>Mirage v2</option>
<option value="lucy_v2v_720p_rt">Lucy v2v 720p RT</option>
<option value="lucy_2_rt">Lucy 2 RT</option>
<option value="lucy-2.1">Lucy 2.1 RT</option>
</select>
</div>
<div class="control-group">
Expand Down Expand Up @@ -527,7 +527,7 @@ <h3>Console Logs</h3>

// Load initial reference image only when there's an actual prompt
let initialImage;
if (promptValue && (model.name === 'lucy_2_rt' || model.name === 'mirage_v2')) {
if (promptValue && (model.name === 'lucy-2.1' || model.name === 'mirage_v2')) {
const initialImageResponse = await fetch('./tests/fixtures/image.png');
initialImage = await initialImageResponse.blob();
}
Expand Down
4 changes: 2 additions & 2 deletions packages/sdk/src/process/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ export interface VideoEditInputs {
}

/**
* Model-specific input documentation for lucy-2-v2v.
* Model-specific input documentation for Lucy 2.1 video editing models.
* Requires prompt (can be empty string). Optional reference_image can also be provided.
*/
export interface VideoEdit2Inputs {
Expand Down Expand Up @@ -163,7 +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-v2v" | "lucy-2" | "lucy-2.1" | "lucy-2.1-vton"
: T["name"] extends "lucy-2.1" | "lucy-2.1-vton"
? VideoEdit2Inputs
: T["name"] extends "lucy-pro-v2v" | "lucy-clip"
? VideoEditInputs
Expand Down
Loading
Loading