brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
scenario-unreal-cinematicsUse when making a trailer, cutscene, cinematic or short film in Unreal Engine 5.8 with Sequencer: shot lists, master and shot sequences, cameras, lenses, depth of field, camera cuts, spawnables, character animation in shots, per-shot lighting, Movie Render Graph or Movie Render Queue EXR renders, "render darker than the viewport", "first frames pop", "last …
Independent GitHub snapshot · Automated classification · Original documentation governs
Expert level here means the cut is checked as data before anything is built and a render is judged on its files and frames, not the viewport. The core stance: plan offline, build in one transaction, lock timing against the music before animating, light from approved masters, render per shot through one template graph, hand linear EXRs, an edit and a color note to the grade. If a sibling skill named here is missing from your available skills, ask the user to install it (npx skills add scenario-labs/skills --skill <name>); unattended, proceed from tool schemas and flag the gap.
REQUIRED BACKGROUND: scenario-unreal-expert (channels, review loop, 5.8 traps).
Status (2026-09-24): scripts/ue_cine.py and scripts/cine_render_callbacks.py are not yet run in Unreal; offline tests pass (counts: references/sources.md). In the engine, run tests/code/unreal-cinematics/job_00_probe_cine.py first.
DefaultEngine.ini under revision control (S4Iyzbl-oaE [00:15:22] [00:21:52]); CAT 5.8 schemas nest and can give each shot its own level (VP 5SJA1FfRPWs [00:19:07] [00:20:44]). Every tool is one ScopedEditorTransaction around a ScopedSlowTask, because "long running Python codes, they look really similar to a frozen engine" (SPI, moQTQzAOFVA [00:16:16])._LGT subsequences derived from them, graded by distance from their master (Glitch [00:27:18] [00:28:51] [00:29:23] [00:31:32] [00:36:59]).| Input | Changes | Default when silent |
|---|---|---|
| Delivery: graded or direct | tone curve, format, OCIO, color note | graded: EXR 16-bit half, tone curve off |
| Production record (rate, start, bias, naming) | every sequence, EDL | the project's DefaultEngine.ini; else 24 fps, start 0 (SPI 101, CAT demo 1000: match editorial) |
| Duration, shots, music | layout, stingers | the brief; a temp track before boarding |
| Aspect and filmback | lens, framing | 16:9 Digital Film [verify mm]; 2.39 crop for scope |
| Level and what exists | bindings | set possessable; cameras, characters, shot lights spawnable; master lighting in the level |
| Cast | pre-roll, cost | existing Animation Sequences; joints and meshes per character |
| Motion per shot, shutter timing | samples, pre-roll | Frame Center, odd counts |
| Exposure | continuity | Manual, physical camera, ISO compensates aperture changes |
| Channel | build, board, render | live editor (MCP, PythonRemote) for boards; ue_run or the command line for finals |
import ue_cine as C (skill scripts/, with scenario-unreal-expert's scripts/ on the path). Full code: references/procedures.md.
plan["production"]; folder template, shots in steps of 10; with CAT 5.8, shot schemas holding the _LGT schema, a level per shot when shots need unique set states (P2). Check the MCP SequencerTools toolset first [verify]. GATE: C.check_production(plan) no fail; audit_sequence seq.rate and seq.start.C.check_plan(plan): length, lenses, framing, 180-degree line, screen direction, jump cuts, DOF, pre-roll, exposure, cast, stingers, lighting groups (P1). GATE: no fail; every warn fixed or answered in the plan.C.build_from_plan(plan): master with Shots and music, a spawnable Cine Camera per shot (lens keyed, Use Field of View for LOD on), camera cut from pre-roll to the exclusive end, pre-rolled performers, <shot>_LGT with the temp light (P3); never overwrites. GATE: C.audit_sequence no fail, bind.override answered; C.empty_level_test lists only set pieces.C.board_generator(..., preroll=True): first, middle, last frame per shot plus each shot's first pre-roll frame read in isolation (GUI: Evaluate Sub Sequences In Isolation); ue_review.image_checks, contact sheet (P4). Retime (C.retime_shot), takes (C.new_take), own tools inside C.editor_tool (P5). GATE: no all-white or all-black frame, the sheet and the cut with music judged, C.ready_to_animate(plan) passes.C.lighting_masters(plan), render only those (render_jobs(plan, only=...)), director approval into plan["lighting_approved"]; then per-shot rim and kick lights in _LGT, lit through the viewport OCIO Display (P7b). GATE: C.ready_for_final_lighting(plan); luminance continuity and approval against the masters; stat unit or an Insights trace if a shot is slow.C.review_movie_cmd with the music (P10). GATE: C.check_render_output, C.first_frame_pop, C.cut_flash, then watch it with sound.CineWrittenFiles Execute Script (Editor Only); C.audit_render_settings(C.normalize_graph_snapshot(C.graph_snapshot(graph))); C.render_jobs(plan, sequences=C.active_shot_paths(master, plan)), C.render_orchestration, then C.render_generator (executor held globally) or C.mrq_command_line per shot (always -notexturestreaming) (P9). GATE: settings audit pass; C.check_manifest, C.exr_checks per sampled frame; after a crash, re-render C.shots_to_render(...) whole.C.edl(plan), review MP4, C.delivery_note(plan, settings) (Resolve interpretation), JSON reports; notes split technical or creative, three creative rounds, then a live session (Glitch [00:32:37] [00:33:40]) (P11).| Item | Value | Relative to, source |
|---|---|---|
| Hierarchical bias | root 0, +100 per level, equal values blend | shots doc |
| Pre-roll | 24 to 48 frames on cloth, hair, particles in motion | digest; tips doc |
| Engine Warm Up, idle cloth | more than 30 frames | tips doc |
| Temporal samples | Frame Close: 24 base (95% of Blur's shots), 48 fast, 64 very fast; Frame Center: odd (15, 25, 49, 65; Faucher: 15 to 31 covers 95 to 98%) | AAAhD5tEUBs [00:39:32] [00:40:05]; fVg5ihB8Wdc [00:06:01] [00:10:58] |
| AA method | None above 8 total samples | MRG image quality doc |
| Warm-up sampling | only the last 5 warm-up frames are sampled | 5.6 and 5.8 notes |
| Linear vs viewport | about 1 stop darker | 2Q3CybANHKE [00:09:39] |
| Review MP4 video bitrate | fps x 2 x 1000 kb/s (48,000 at 24 fps) | 2Q3CybANHKE [00:22:54] |
| Characters | under 200 joints | Glitch [00:05:33] |
| Master lighting | 10 to 13 per 400-shot episode, 1 to 2 days each | Glitch [00:28:51] |
check_plan, ready_to_animate, ready_for_final_lighting and audit_sequence without fail; audit_render_settings without fail or unanswered warn; frame counts with exclusive ends (check_render_output, check_manifest); EXR half, no NaN or Inf, not black, values above 1.0 in bright shots when linear, metadata present; first_frame_pop and cut_flash false; luminance jumps only where intended.| Mistake | What it looks like | Fix |
|---|---|---|
| Duplicating the master to experiment | a change leaks into the "backup" | New Take (new_take) inside the shot |
| Characters and cameras possessable | breaks in another map | spawnables; empty_level_test |
| Animating a set piece as a possessable | it snaps back after its shot | key it where needed, or spawnable (bind.override) |
| Hiding actors with the Outliner eye | back after reopening | Levels panel or a Level Visibility track |
| Several skeletal meshes, one animation track | parts do not follow | Set Leader Pose Component (check_characters) |
| Long Python tool, no progress | "frozen" editor killed mid-write | editor_tool |
| Animating before timing is locked | work on frames that get cut | board, stingers on cuts, ready_to_animate |
| Engine Warm Up for a running character | cloth snaps at frame one | pre-roll plus camera-cut warm-up |
| Expecting the last frame | "missing" frame 50 of 0 to 50 | end is exclusive; count end - start |
| Raising samples for noise | time up, noise unchanged | fix the light or post-process setting |
| Even samples with Frame Center, mixed temporal and spatial | stepping, waste | odd temporal only (or 24 with Frame Close) |
| Lighting shot by shot, no masters | late creative changes | approved masters first |
| Lighting in the default viewport, rendering linear | look shifts a stop | viewport OCIO Display |
| Linear EXRs sent with no interpretation | dark, odd colors in Resolve | delivery_note |
| Editing the shared graph per shot | every job changes | exposed variables per job |
| Overnight local queue, or a local executor | a crash loses the queue; render stops | farm manager or one process per shot; shots_to_render; start_render |
Headless render without -notexturestreaming | soft first frames | mrq_command_line |
{sequence_name}/{sequence_name}.####.exr, linear, half, metadata), <prod>.edl, the delivery note, the review MP4, contact sheets, JSON reports, the master. To scenario-unreal-lighting-rendering: shots failing continuity or noise, with frames. Farm commands to scenario-unreal-pipeline-automation; slow shots to scenario-unreal-performance.LevelSequenceEditorSubsystem.add_spawnable_from_class; no add_master_track; time functions take MovieSceneTimeUnit (seq-py doc; version deltas).references/procedures.md: P0 to P11, full code, plan fields, the template graph spec (P8). Load before writing Sequencer or render code.references/expert-notes.md: judgment per expert, timestamps, deciding conditions.references/critique.md: the rubric, mapped to code checks.references/gui-paths.md: menus and settings for the same procedures.references/sources.md: sources, credentials, URLs, timestamps; revision history.scripts/ue_cine.py (toolkit; its docstring lists every call) and scripts/cine_render_callbacks.py (the Execute Script class).