Picsart API Platform
← All models

Luma Ray 3.2 Edit

Luma · Video · Video → Video

Edit a prior video from a prompt using Luma Ray 3.2 — preservation-vs-reimagination presets (early access).

Model ID: luma-ray-3.2-editWorkflow: luma-ray32-video-edit
Video InputEditHDR5/10 sec
Try on Playground ↗

Overview

Alongside the unified model APIs, we expose compatibility APIs that take each vendor's original parameters exactly as the vendor defines them — nothing renamed, nothing reshaped on the way through.

That makes them the shortest path onto Picsart if you already work with the vendor directly: the request bodies you've already written keep working as they are. You keep their parameter names and defaults, and you get the vendor's full parameter set rather than the subset that is shared across every model.

The cost is that a request is written for one vendor — switching models later means rewriting it, and results come back in the vendor's own shape. When you'd rather write once and change models freely, use the unified API.

Make a request

Call the workflow with ai.apis.run() in TypeScript, or hit /workflows/{workflow}/execute directly — params is passed through untouched either way.

These endpoints are addressed by workflow name rather than model id: the one in this model's header, since one model runs as one workflow. Authentication is unchanged — your Picsart API key as a bearer token (see Authentication).

ts
import { createClient, ApiRunMode } from '@picsart/ai-sdk';

const ai = createClient({
  apiKey: process.env.PICSART_API_KEY,
  apiUrl: 'https://api.green-salad-4efd.toolsminati.workers.dev',
});

// Calls the 'luma-ray32-video-edit' workflow directly — params are sent as-is.
const { result, usage } = await ai.apis.run('luma-ray32-video-edit', {
  prompt: "A serene mountain lake at golden hour, ultra detailed",
  source: {},
  video: {
    edit: {}
  }
}, {
  mode: ApiRunMode.SYNC,
});

console.log(result); // workflow-specific output
console.log(usage?.credits); // credits charged

Async (submit & poll)

This model can run longer than the sync limit (~20s). In TypeScript, ai.apis.run(…, { mode: ApiRunMode.ASYNC }) polls for you; over HTTP, submit and poll yourself.

ts
import { createClient, ApiRunMode } from '@picsart/ai-sdk';

const ai = createClient({
  apiKey: process.env.PICSART_API_KEY,
  apiUrl: 'https://api.green-salad-4efd.toolsminati.workers.dev',
});

// mode: ASYNC submits the job and polls under the hood — you just await.
const { result } = await ai.apis.run('luma-ray32-video-edit', {
  prompt: "A serene mountain lake at golden hour, ultra detailed",
  source: {},
  video: {
    edit: {}
  }
}, {
  mode: ApiRunMode.ASYNC,
});

console.log(result);

Parameters

5 parameters, sent inside params. These are the vendor's own names, so they line up one-for-one with the vendor's documentation. Required ones must be supplied; the rest fall back to their defaults.

ParameterTypeRequiredDefaultDetails
prompt
Edit instructions (1-6000 characters)
stringyes
source
Source video: generation_id, or url/data with video/* media_type (≤30s).
objectyes
generation_id
Chain reference to a prior completed video generation owned by the same client
stringno
url
Partner-hosted video URL. Requires media_type (video/*). Source must be ≤ 30s.
stringno
data
Inline base64 video. Requires media_type (video/*). Source must be ≤ 30s.
stringno
media_type
Video MIME type when url/data is used (e.g. "video/mp4")
stringno
user_id
Stable opaque end-user identifier (no PII), ≤256 chars.
stringno
video
Video output + edit options
objectyes
resolution
Output resolution.
stringno
540p720p1080p
duration
Output duration.
stringno
5s10s
hdr
Generate an HDR-encoded MP4 (access-gated, requires 720p/1080p).
booleanno
exr_export
Export an EXR file alongside the MP4 (requires hdr=true).
booleanno
start_frame
Single guide frame at index 0. Mutually exclusive with edit.keyframes.
objectno
url
Publicly accessible URL of the frame image
stringno
data
Base64-encoded frame image data. Requires media_type.
stringno
media_type
Media type when data is provided (e.g. "image/png")
stringno
generation_id
Chain reference to a prior generation (extend / keyframe)
stringno
edit
Video-to-video conditioning (strength | auto_controls | controls | keyframes).
objectyes
strength
Preservation-vs-reimagination preset
stringno
adhere_1adhere_2adhere_3flex_1flex_2flex_3reimagine_1reimagine_2reimagine_3
auto_controls
Let the model derive the conditioning schedule from the source (recommended). Cannot combine with controls.
booleanno
controls
Per-signal conditioning. Cannot combine with auto_controls=true.
objectno
keyframes
Pin specific frames to specific images (up to 64). Pair with keyframe_indexes (same length). Mutually exclusive with video.start_frame.
VideoImageRef[]no
keyframe_indexes
Non-negative, unique source-frame positions; parallel to keyframes (same length; provide both or neither).
number[]no
options
GenAI options (safety checks, Picsart Drive)
objectno
safety_checks
Safety check settings
objectno
enabled
Whether to run content moderation. Defaults to true.
booleanno
drive
Save result to Picsart Drive
objectno
name
File name in Picsart Drive
stringyes
attributes
Custom attributes to attach to the file
objectno
folder
Target folder in Picsart Drive
objectno
inputs_transformation
Input transformation settings
objectno
downscale_oversized_images
Whether to downscale oversized input images. Defaults to false.
booleanno

Response

Over HTTP the output arrives inside a status envelope, at response.result. ai.apis.run() unwraps that envelope for you and resolves to { result, usage } instead. Either way the resultitself is the vendor's own shape.

json
{
  "result": {
    "url": "https://cdn.green-salad-4efd.toolsminati.workers.dev/…/result.mp4",
    "mimeType": "video/mp4",
    "driveFile": {}
  },
  "usage": {
    "credits": 1
  }
}