RaylightAPI

Remakes

Start a remake

Start a remake of your own video: Raylight makes a blank project (one empty shot at the source's nearest aspect ratio and frame rate) in your personal workspace's Remakes folder and answers with the remake. The project is held from the moment it exists: only the builder tab and your CLI's uploads may change it until the remake ends. rightsAttested must be true: you confirm you own the video or have the right to use it, and the answer is stored with the remake. Free; one remake runs at a time, five a day, sources up to 3 minutes and within your plan's video limits. npx raylight video-to-project <video> does all of this for you.

POST/v1/remakes

API key with the remake scope.

Request body

application/json

FieldTypeDescription
fileNamerequiredstring
bytesrequiredinteger
durationMsrequiredinteger
widthrequiredinteger
heightrequiredinteger
fpsrequirednumber
sha256requiredstring
mimeenumOne of: video/mp4, video/quicktime, video/webm
rightsAttestedrequiredenum
agentrequiredenumOne of: claude, codex
cliVersionrequiredstring

Responses

201The new remake.
400Invalid request.
401Missing, invalid or revoked key.
403The key lacks the scope, or the key's owner has view-only access to the workspace (code forbidden).
404Not found.
409Another remake of yours is still running (code remake_running).
429Rate limited, or a monthly cap reached.

201 response body

FieldTypeDescription
remakerequiredobject
remake.idrequireduuid
remake.statusrequiredenumThe furthest stage reached: studying (the study runs on your machine), building (shots land in the project as they are built; overlaps studying), polishing (the film-wide pass), needs_repair (the CLI is running the repair session), then done, failed or canceled. New values may be added; treat unknown ones as opaque.One of: studying, building, polishing, needs_repair, done, failed, canceled
remake.projectIdrequireduuid | null
remake.projectUrlrequiredurl | null
remake.shotsrequiredobject[]
remake.shots[].indexrequiredinteger
remake.shots[].startMsrequirednumber
remake.shots[].durationMsrequirednumber
remake.shots[].staterequiredenumOne of: skeleton, building, built, failed
remake.repairrequiredobject | null
remake.repair.requestedrequiredboolean
remake.repair.uncoveredrequiredobject[]
remake.repair.uncovered[].segmentIdrequiredstring
remake.repair.uncovered[].firstMsrequirednumber
remake.repair.uncovered[].lastMsrequirednumber
remake.repair.uncovered[].boxrequiredobject
remake.repair.uncovered[].box.xrequirednumber
remake.repair.uncovered[].box.yrequirednumber
remake.repair.uncovered[].box.wrequirednumber
remake.repair.uncovered[].box.hrequirednumber
remake.repair.uncovered[].samplesrequiredinteger
remake.reportrequiredobject | null
remake.report.glitchesrequiredany[]
remake.report.gapsrequiredany[]
remake.report.notesrequiredstring[]
remake.errorrequiredstring | null
remake.errorCoderequiredenum | nullOne of: cli_stopped, tab_lost, study_error, build_error
remake.libraryEligiblerequiredbooleanWhether this remake (the video, the study and the plan applied) may feed Raylight's motion library. False once the owner or the workspace turns data sharing off (Settings, Improve Raylight); that switch is the only opt-out.
remake.sourcerequiredobject
remake.source.fileNamerequiredstring
remake.source.durationMsrequiredinteger
remake.source.widthrequiredinteger
remake.source.heightrequiredinteger
remake.source.fpsrequirednumber
remake.agentrequiredenumOne of: claude, codex
remake.builderrequiredobject
remake.builder.attachedrequiredboolean
remake.builder.lastSeenAtrequiredstring | null
remake.createdAtrequiredstring
remake.updatedAtrequiredstring

Example

curl
curl -X POST https://api.raylight.app/v1/remakes \  -H "Authorization: Bearer $RAYLIGHT_API_KEY" \  -H "Content-Type: application/json" \  -d '{  "fileName": "<fileName>",  "bytes": 1,  "durationMs": 1,  "width": 1,  "height": 1,  "fps": 1,  "sha256": "<sha256>",  "rightsAttested": true,  "agent": "claude",  "cliVersion": "<cliVersion>"}'