llms.txt
+68 −20
https://sleeperhit.studio/llms.txt
− - `GET /api/v1/credits` — requires scope `credits:read`. Studio Credit summary, plus `costs`: what each operation costs, the list the Billing page shows (a rate names its unit in `per`).− - `GET|PATCH /api/v1/story-projects/{id}/cast-canon` — read or save pinned project character portrait, body, character-sheet, voice, `aliases` and `signatureItems` canon (pinned assets are never re-rendered). Declare a script cue as an alias of the canon person it names (or answer `sameAs` / `newPersonName` on `PATCH /story-projects/{id}/cast` when a save names the candidates); videos with two or more people need signature items for each. Both answers carry `identity` warnings (one name reaching− - `POST /api/v1/artifacts/{artifactId}/voice` — `artifact:publish`. Recast one character's voice in place (no new revision, no charge). Requires `Idempotency-Key`. Body: `{ character, voiceId, voiceName, gender?, provider? }`. Returns the updated `voiceMap`; the cast is readable on `manifest.audio.voiceMap`.− - `POST /api/v1/artifacts/{artifactId}/avatar` — `artifact:publish`. Regenerate ONE character's avatar portrait in place (no new revision, no charge). Requires `Idempotency-Key`. Body: `{ character, refinement?, style?, referenceImageUrl? }`. Async + queue-backed: returns `{ artifactId, character, status, chatToolJobId }`; poll `GET /api/v1/artifacts/{artifactId}/cast` and watch that character's `avatarStatus` (`queued` → `rendering` → `ready`).− - `POST /api/v1/artifacts/{artifactId}/cast` — `artifact:publish`. Batch-update the cast in one call (no new revision, no charge). Requires `Idempotency-Key`. Body: `{ entries?: [{ character, voiceId?, voiceName?, gender?, provider?, avatarRefinement?, regenerateAvatar? }], avatarStyle? }` — provide at least one `entries` item OR a top-level `avatarStyle` (which restyles ALL portraits). Voice reassignments apply immediately; returns the updated `voiceMap` plus one async avatar op `{ character, s− - `GET /api/v1/artifacts/{artifactId}/coverage` — `artifact:read`. Read the latest coverage report (or `?reportId=<id>`). The report carries a `status` (`generating` → `complete` / `failed`); `report` holds the structured payload on completion.− For multi-installment and screenplay-backed work, use the project Series Bible before each StoryPlan, including the first screenplay. GET/PATCH/POST `/story-projects/{id}/series-bible` keeps format, audience, canon, episode map, characters, visual style, typography, and audio direction in one project-level document shared by the web UI, Story API, CLI, and MCP. POST generation is backed by the DB sidecar `story_api_series_bible`. Then GET/POST `/story-projects/{id}/series-bible/coverage`: the re− - Edit a chapter with POST `/pitch-decks/{jobId}/chapters/refine` (free; `storyBeat`, `visualPlan`, `location` — its ONE canonical location key — cast, words and duration; there is no `imagePrompt`) while the deck is a draft plan, in review or complete. On a draft nothing goes stale: the next plan approval recompiles just that chapter, and the answer's `planCoverage` says the changed plan was queued for coverage (the approval waits for it). A chapter the plan approval refused (`pitch_deck_render− - Choose a take with POST `/pitch-decks/{jobId}/chapters/{chapterIndex}/select-take` `{ callId, take, acceptRevoiced? }` (free). Add or remove a chapter with POST `/pitch-decks/{jobId}/chapters/insert` and `/chapters/remove` (free). Render a chapter again with POST `/pitch-decks/{jobId}/chapters/render-clip` `{ chapterIndex, callId?, confirmed? }` (scope `artifact:publish`, TWO CALLS).− - Finish with POST `/pitch-decks/{jobId}/finish` `{ deliveryResolution?, confirmed? }` (scope `artifact:publish`, TWO CALLS): the selected takes are upscaled to the delivery class, the text layers laid over the finished cuts, the finished master stitched, and the PDF laid out from poster frames of the finished takes. Refused while a call has no selected take or a footage chapter has not rendered. Only a `complete` deck exports (POST `/pitch-decks/{jobId}/video-export`).− - A refused render is a `409 pitch_deck_state_invalid` whose `details.refusal` is `{ code, action, fix }`: `action.kind` is `recast_figure`, `add_signature_items`, `recast_voice` or `remake_location_plate`, and `fix` names the MCP tool and CLI command that take it. A blocked compile adds `details.blocked[]`, one entry per chapter with its `chapterIndex` and `chapterNumber`. Nothing is reserved on a refusal.− - Price: A trailer is priced at 2 credits / second (720p). The exact price is quoted per shot once the plan is ready, before anything renders: 1 credit / second to render, plus 1 credit / second to finish at 720p. A 1080p finish is 4 credits / second instead (5 credits / second in all). Location plates and on-screen text are itemized in the same quotes.− - Every call renders at 480p with the cast's own recorded lines; everyone on camera is in the beat's cast (there are no background presences). A take that replaces a line with its own reading, or opens off its planned framing, is retaken ONCE automatically at our cost; after that a new take is the writer's priced retake. A moderation refusal is released (nothing is charged) and never retried.− - Choose a take with POST `/trailers/{jobId}/beats/{beatIndex}/select-take` `{ callId, take, acceptRevoiced? }` (free). Edit a beat with POST `/trailers/{jobId}/beats/refine` (free; `storyBeat`, `shotType`, `shots`, `visibleCharacters`, `location`, caption and seams). A beat's `location` is its ONE location, stored as a canonical location key, and a shot's `location` must be empty: SAME ROOM THROUGHOUT — a beat has ONE location, a canonical location key set on the beat, and its shots carry none;− - Finish with POST `/trailers/{jobId}/finish` `{ deliveryResolution?, confirmed? }` (scope `artifact:publish`, TWO CALLS): the selected takes are upscaled to the delivery class, the text layers composited and the finished master stitched. Refused while a call has no selected take. Only a `complete` trailer exports (POST `/trailers/{jobId}/video-export`).− - A refused render is a `409 trailer_state_invalid` whose `details.refusal` is `{ code, action, fix }`: `action.kind` is `recast_figure`, `add_signature_items`, `recast_voice` or `remake_location_plate`, and `fix` names the MCP tool and CLI command that take it. A blocked compile adds `details.blocked[]`, one entry per beat. Nothing is reserved on a refusal.− Poll GET `/artifacts/{artifactId}/coverage` (scope `artifact:read`, optionally `?reportId=<id>`) until `status` is `complete` or `failed`. On `complete`, `report` carries the structured coverage payload; it is `null` while generating. GET returns `{ coverage: null }` when no coverage has been requested yet.− Generation body: `{ "musicCoveragePercent"?: number }` (or empty). On defined-clip scripts this queues the baseline clip pass; `musicCoveragePercent` applies to realtime scripts only — a fraction (0..1) or whole percent (0..100), clamped into [0,1]. Returns `{ artifactId, status: "generating", coveragePercent, totalScenes }`.− Realtime directive edit body: `{ "scope"?: "screenplay"|"scene"|"entry", "mode"?: "merge"|"replace", "sceneIndex"?: number, "entryIndex"?: number, "prompt"?: string, "summary"?: string, "enabled"?: boolean, "weight"?: number }`. Use `mode: "merge"` (default) for additive steering and `mode: "replace"` to overwrite the targeted prompt palette. Returns `{ artifactId, status: "ready", scope, sceneIndex?, entryIndex?, directive, adaptiveSceneDirection? }`.− Poll GET `/artifacts/{artifactId}/music` (scope `artifact:read`) until `music.status` is `ready` (or `none` for intentional no-soundtrack reads). GET returns `{ music: { musicMode, status, scenesWithMusic, totalScenes, coveragePercent, definedClips } }` — `totalScenes` comes from the parsed script even when scene settings are sparse; `definedClips` lists each durable clip `{ sceneIndex, heading, prompt, vocals, status: pending|rendering|ready|failed, soundUrl, error, disabled, fadeInMs, fadeOutM+ - `GET /api/v1/credits` — requires scope `credits:read`. Studio Credit summary, plus `costs`: what each operation costs, the list the Billing page shows (a rate names its unit in `per`; a pitch deck and a trailer are priced per second; `ops` names the ledger op keys a line's charges carry).+ - `GET|PATCH /api/v1/story-projects/{id}/cast-canon` — read or save pinned project character portrait, body, character-sheet, voice, `aliases` and `signatureItems` canon (pinned assets are never re-rendered). Declare a script cue as an alias of the canon person it names (or answer `sameAs` / `newPersonName` on `PATCH /story-projects/{id}/cast` when a save names the candidates); videos with two or more people need signature items for each. Both answers carry `identity` warnings (one name reaching+ - `POST /api/v1/story-projects/{id}/cast-voice/design` — `artifact:publish`. Design a NEW voice for one named cast member (canon name, alias or script cue) from `description`, or from the Series Bible's voice line for them when omitted; up to four candidates, each voiced on the character's OWN screenplay lines (preview urls). METERED, TWO CALLS: without `confirmed` it prices the design (one casting voice per candidate) and draws nothing; with `confirmed: true` it draws and answers `designId` + `+ - `POST /api/v1/story-projects/{id}/cast-voice/choose` — `story:write`. Pin one candidate (`{ designId, candidate, voiceName? }`) to the cast canon and the voice library; `reads` lists the finished reads still speaking the old voice: re-voice the character in each with `POST /api/v1/artifacts/{artifactId}/revoice` (priced, two calls; the old recording stays restorable). Free. Requires `Idempotency-Key`. `GET .../cast-voice/designs?character=` (`story:read`) lists the project's designs with their+ - `PATCH /api/v1/story-projects/{id}/cast-voice` — `story:write`. Pin an EXISTING voice (`{ character, voiceId, voiceName?, provider?, gender? }`) on anyone on the project cast, in an episode or not (a person only a deck or trailer gives a line): every new episode, deck, trailer and showcase speaks them with it, and an episode that later names them inherits it. Free; `previous` is the voice it replaced, `reads` the finished reads still on another voice. A provider retiring its voices is refused + - CASTING COVERAGE — `GET /api/v1/story-projects/{id}/cast-voice/designs/{designId}/coverage` (`story:read`) and `POST` the same path (`story:write`, `Idempotency-Key`, optional `{ focusPrompt }`). A model LISTENS to a design's candidate takes blind, beside the voices already cast in the project, and scores each against the brief and the Series Bible (emblematic fit, truthful performance, period register, accent honesty, clean audio, word accuracy from a blind transcript, distinctness from the c+ - `POST /api/v1/story-projects/{id}/cast-portraits/design` — `artifact:publish`. Draw N HEADSHOT candidates (default 3, at most 4) for one named cast member, from the Series Bible's appearance with the person's LOOK after it (`direction`, else their cast canon look direction; `age` likewise). METERED, TWO CALLS: without `confirmed` it prices them (one cast headshot each) and draws nothing; with `confirmed: true` it reserves and queues the draw and answers `designId`. Poll `GET .../cast-portraits+ - `POST /api/v1/story-projects/{id}/cast-portraits/choose` — `story:write`. Pin one candidate (`{ designId, candidate }`) as the person's face on the cast canon. A new face clears the canon body shot and sheet drawn from the old one (`cleared`); draw them again with `POST .../cast` for that character. Free. Requires `Idempotency-Key`. A headshot its casting coverage FAILED is refused (409 `cast_portrait_casting_coverage_failed`, `details.castingCoverage`) unless `acknowledgeCastingCoverage: true+ - PORTRAIT CASTING COVERAGE — `GET /api/v1/story-projects/{id}/cast-portraits/designs/{designId}/coverage` (`story:read`) and `POST` the same path (`story:write`, `Idempotency-Key`, optional `{ focusPrompt }`). A model LOOKS at a design's drawn headshots blind, beside the faces already chosen for the cast, and scores each on emblematic fit, period truth (no modern faces or styling), naturalness (a photograph, not a generated image) and distinctness; it ranks them, `recommended` names the best th+ - `GET|PATCH /api/v1/story-projects/{id}/cast-look` — `story:read` / `story:write`. A person's LOOK at project level on the cast canon: `{ character, lookDirection?, age? }` (null clears a field). Every headshot and portrait candidate drawn for them reads it, outranking the Series Bible. Free; it does not re-open Bible coverage.+ - `GET|POST /api/v1/story-projects/{id}/cast` with `scriptUploadId` — an episode's cast. POST `images` (`face` / `body` / `sheet`) with `force` and `characters` redraws only those pictures and no voices (the Cast page's Redraw: a body shot or sheet drawn from the chosen headshot and checked against it), priced per picture, two calls like any episode cast. GET's `episode.read.behindCanon` names each character the episode's finished read still speaks with another voice than their cast canon voice + - `POST /api/v1/story-projects/{id}/cast` with `images` and NO `scriptUploadId` — the project cast canon's Redraw: `body` and/or `sheet` for canon people (`characters`), including people no episode names, drawn again from the chosen headshot (kept; `face` is a 400 — draw headshot candidates instead) and written onto the canon. Priced per picture, two calls: confirm with the quote's `quoteId`. GET the cast until `redraw.status` is `complete`; `redraw.pictures` names each new picture and its check+ - `GET|PATCH /api/v1/story-projects/{id}/series-bible/characters` — `story:read` / `story:write`. One Series Bible character (`?character=` id or name): PATCH `{ character, content: { appearance?, wardrobe?, ... }, expectedVersion?, create? }` changes only those fields and leaves every other character as stored; `expectedVersion` is a compare-and-swap (409 `series_bible_version_conflict`).+ - `POST /api/v1/artifacts/{artifactId}/voice` — `artifact:publish`. Recast one character's voice in place (no new revision, no charge). Requires `Idempotency-Key`. Body: `{ character, voiceId, voiceName, gender?, provider?, pinToCanon? }`. The cast canon person follows (decks and trailers speak with it) unless `pinToCanon: false`; the previous voice and recording are kept (`restore`). Returns the updated `voiceMap`; the cast is readable on `manifest.audio.voiceMap`.+ - `POST /api/v1/artifacts/{artifactId}/voice/restore` — `artifact:publish`. Undo the newest recast of `character` (or any): the previous voice comes back with the recording the read had before it, and the canon voice while the canon still holds the recast one. Free; restoring again flips back. Requires `Idempotency-Key`. `GET /artifacts/{artifactId}/cast` lists what is `restorable`.+ - `POST /api/v1/artifacts/{artifactId}/revoice` — `artifact:publish`. Re-voice ONE character in a finished read (`{ character, voiceId?, voiceName?, provider? }`; default: their cast canon voice): only their lines are spoken again, every other line is kept, then the read is mixed again. METERED, TWO CALLS: without `confirmed` it prices (`lines`, `keptLines`) and changes nothing; with `confirmed: true` it reserves and queues the finalize — poll the artifact until `manifest.audio.finalize.status` + - `POST /api/v1/voices/preview` — `story:write`. Hear any voice say `text`, or a character's first line in a read (`artifactId` + `character`), before assigning it; answers `preview.url`. Free; the same words in the same voice are voiced once (`cached`). Requires `Idempotency-Key`.+ - `PATCH|DELETE /api/v1/voices/{voiceId}` — `story:write`. Rename one of your library voices (`{ name }`; cast canon people pinned to it carry the new name), or delete it. A delete of a voice still pinned in a cast canon or spoken in a read is refused with 409 `voice_in_use` (`details.uses`) until sent with `?confirmed=true`.+ - `POST /api/v1/voice-migrations` — `story:write`. Migrate a voice (`{ fromVoiceId, toVoiceId, toProvider?, toVoiceName?, projectId?, character? }`): every cast canon pin (so a recurring show's pinned voices), trailer and deck narrator, and read with no finished recording moves to the replacement; finished reads keep their recording and are listed in `skipped` (re-voice them, priced). Free, TWO CALLS: without `confirmed` it answers `applied: false` with what would change; with `confirmed: true` + - `POST /api/v1/artifacts/{artifactId}/avatar` — `artifact:publish`. Regenerate ONE character's avatar portrait in place (no new revision, no charge). Requires `Idempotency-Key`. Body: `{ character, refinement?, style?, referenceImageUrl? }`; `style` is saved as the episode `avatar` override and holds at most 8000 characters, as that override does. Async + queue-backed: returns `{ artifactId, character, status, chatToolJobId }`; poll `GET /api/v1/artifacts/{artifactId}/cast` and watch that chara+ - `POST /api/v1/artifacts/{artifactId}/cast` — `artifact:publish`. Batch-update the cast in one call (no new revision, no charge). Requires `Idempotency-Key`. Body: `{ entries?: [{ character, voiceId?, voiceName?, gender?, provider?, avatarRefinement?, regenerateAvatar? }], avatarStyle? }` — provide at least one `entries` item OR a top-level `avatarStyle` (which restyles ALL portraits; saved as the episode `avatar` override, at most 8000 characters). Voice reassignments apply immediately; return+ - `GET /api/v1/scripts/{scriptUploadId}/overrides` — `story:read`. Read the five episode overrides on a script version — `avatar`, `theater`, `soundscape`, `pitchDeck`, `locations` — each the writer's per-episode direction over the Series Bible canon (null when unset; a null soundscape falls back to `soundscapeDefault`). Works for any Writers Lab episode, with or without an artifact. Free.+ - `PATCH /api/v1/scripts/{scriptUploadId}/overrides` — `story:write`. Partially change them: text sets one (at most 8000 characters), null or blank text clears it, keys left out are untouched; an unknown key or a non-text or over-long value is 400 `validation_failed`. Free, renders nothing, no `Idempotency-Key`. To re-render existing portraits in a new style now, use the cast's `avatarStyle` (metered).+ - `POST /api/v1/scripts/{scriptUploadId}/table-read/prepare` — `artifact:publish`. Prepare a cast episode's table read: charges its table-read credit (`TABLE_READ_SHORT` up to 60 pages, `TABLE_READ_LONG` above — the price a job adopting the screenplay reserves) once per screenplay version and adds its sound effects and music; the Writers Lab's "Continue to Table Read" on Cast is the same operation. Requires `Idempotency-Key`. Two calls: without `confirmed` it prices it (`status: quoted`); with `+ - `GET /api/v1/artifacts/{artifactId}/coverage` — `artifact:read`. Read the latest coverage report (or `?reportId=<id>`). The report carries a `status` (`generating` → `complete` / `failed`); `report` holds the structured payload on completion. `overallScore` is the gated score: near the bar the script is judged again (up to three judgments) and it is the MEDIAN of them — `summary` says so, `judging` records each judgment; a report the platform queues by itself (the coverage gate, a season run) + For multi-installment and screenplay-backed work, use the project Series Bible before each StoryPlan, including the first screenplay. GET/PATCH/POST `/story-projects/{id}/series-bible` keeps format, audience, canon, episode map, characters, visual style, typography, and audio direction in one project-level document shared by the web UI, Story API, CLI, and MCP. POST generation is backed by the DB sidecar `story_api_series_bible`. Then GET/POST `/story-projects/{id}/series-bible/coverage`: the re+ - Price: A pitch deck is priced at 2 credits / second (720p). Planning is free. The exact price is quoted per shot once the plan is ready, before anything renders: 1 credit / second to render, plus 1 credit / second to finish at 720p. A 1080p finish is 4 credits / second instead (5 credits / second in all). Location plates and on-screen text are itemized in the same quotes.+ - A deck request's `deckMode` says what the deck is for: `pitch` (the default) tells the approved story and is judged as a pitch; `showcase` is the show's world shown as its story — the intent's arc carried by a narrator and the characters' own lines, world chapters (`chapterFocus: "world"`: vistas, crowds, life, no cast on screen) interleaved with cast chapters (`chapterFocus: "cast"`: the characters in that world doing things) — and its pre-render coverage judges it as a showcase, never as a p+ - PLAN COVERAGE (GET `/pitch-decks/{jobId}/storyboard/coverage`, the gate the approval runs): One judgment is noisy near the bar, so when a plan revision first lands near it (the overall, or a veto dimension, within the band of its line) the SAME revision is judged again — up to the cap, a third only when two disagree, free to the writer — and the gate decides on the MEDIAN of each score, vetoes included; a plan edit starts a fresh set. The coverage read carries `judging`: each judgment with its+ - RENDERING OVER THE PLAN GATE: Only on the writer's explicit choice, with their reason: render over a plan the coverage judge scored under the bar. It overrides the judge's verdict only (an overall score or a judged veto under the bar on a complete report of the plan as it stands), never a code-checked blocking defect, and never a missing, running, failed, stale or old-rubric report. The confirmed approval records who, when, why and what it overrode on the report. Send `acknowledgePlanCoverage:+ - `shotDensity` (a pitch_deck or trailer request): For pitch_deck and trailer: how many angles (cuts) each rendered shot of a chapter or beat carries. Cuts inside a rendered shot are free, so density never changes the price, the plan or a line. "held" lets one long camera move carry a shot (1-2 angles); "standard" (default) cuts 2-3 angles into each shot where its seconds allow; "dense" cuts 3-5. No angle is planned under about 1.5 seconds, and a spoken line keeps its own seconds. Set when the d+ - EDITING GRAMMAR: A montage chapter is a rapid intercut run: several brief shots of about one to two seconds each across the people and places it names, cut tight (a run across more than three named people renders as a few short calls of the chapter). Marking or unmarking it changes what renders, so a rendered chapter goes stale. Mark it with `chapters/refine` (`montage: true|false`; a trailer beat with `beats/refine`). A black interlude is a beat of pure black between two chapters (0.5 to 2 se+ - A CHAPTER'S OWN SOUND: A chapter that keeps its scene sound plays the sound its own render made (harness bells, singers, a crowd: voices and all) under the score; every other chapter plays only its cast's lines over quiet room tone. On a chapter with no spoken line it also decides whether the render is made with sound, so keeping the sound of takes made silent needs them rendered again; any other change re-cuts the chapter from the takes it has, free. Mark it with `chapters/refine` (`keepsScen+ - THE TITLE SEQUENCE: A deck's title sequence opens its master, before the first chapter: optionally an epigraph (`epigraph`: its words and where they are from) and a source credit (`sourceCredit`), each quiet on black and held long enough to read; then flash cuts of six to ten frames to the people it names (`cast`, in order; `inShadow` darkens one), each the person's LIVING PORTRAIT — looking into the lens, still, breathing, rendered for the flash (priced first, its own step) — and until it is + - THE TITLE SEQUENCE'S TYPE: The title sequence's words are directed like a chapter's text, in the writer's own words, through the same direct-text-motion call with a `titleElement` instead of a `chapterIndex`: `title` ("KARAMAZOV huge, blood red, a stark sans, the ends cut off by the frame"), `epigraph` ("a subtle background behind the verse: grain, a candle's flicker, a few falling seeds"), `sourceCredit`, or `nameSupers` (every name alike: its face, its colour, and where it sits — beside the + - THE VISUAL GRAMMAR: The visual grammar is the deck's one camera language across every chapter: how its world is lit and framed, how the camera moves or holds, and how chapters hand off. It is plan words: plan coverage judges every chapter against it, and nothing rendered reads it, so changing it never makes a take out of date. GET `/pitch-decks/{jobId}/chapters` returns it as `visualGrammar`; replace it with POST `/pitch-decks/{jobId}/visual-grammar` `{ visualGrammar: "…" }` (scope `story:writ+ - THE CLOSING SEQUENCE: A deck's closing sequence ends its master, after the last chapter, and mirrors its title sequence: optionally a closing quote (`quote`: its words, quoted exactly, and where they are from, cited exactly — one that answers the opening's epigraph, often from the same source), then "Coming Soon" (`comingSoon`, up to 40 characters; "Coming Soon" when left out), then the production credit (`productionCredit`; "Sleeper Hit Studio" when left out), each quiet on black, faded in an+ - BELL ON THE BEAT: on the grid, one bell sound is struck on every beat by the deck's bell lane — frame-exact, one lane on the audio timeline, free. POST `/pitch-decks/{jobId}/bell-lane` `{ assetId? | prompt?, every?: 1|2, fromSeconds?, toSeconds?, skipSceneIndexes?, accent?, level?, duckUnderVoice? }` (scope `story:write`, Idempotency-Key; fields left out keep the lane's), GET it for the strikes, the `parts` it can skip, start/end `points` and `check` (every strike against its beat in the maste+ - THE SAME BELL AS ANOTHER DECK: GET `/story-projects/{projectId}/sounds?kind=bell` (scope `story:read`) lists every sound the project's decks and trailers use, named as it was used and by its numbered deck ("Deck 2"), each with `bellSound`; POST the bell lane with `{ sound: { fromJobId } }` to strike that deck's bell here, exactly as it struck there (only the sound; this deck's timing stays). CLI: `sleeperhit projects sounds <projectId> --kind bell`, then `sleeperhit pitch-deck bell <jobId> str+ - THE FINISH: The finish is a film look laid on the picture when the master is assembled: a look (camera, period-35mm, night-interior, none), an intensity (light, standard, strong; standard by default) and, optionally, single effects set to a level (adjust: { effect: off | subtle | medium | strong }; effects: steady-light, match-shots, halation, mist, shoulder, colour, vignette, weave, grain, soften). New decks and trailers start on camera. Titles and captions are laid after it, so type stays cr
Showing the first 40 of each.