@lalalic/markcut 2.2.8 → 2.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/package.json +2 -1
  2. package/skills/markcut/SKILL.md +0 -2
  3. package/skills/markcut/docs/markdown-descriptive.md +1 -1
  4. package/src/config.mjs +60 -63
  5. package/src/descriptive/resolve.ts +3 -2
  6. package/src/player/pipeline.mjs +64 -21
  7. package/src/render/cli.mjs +42 -69
  8. package/src/vision/cli.mjs +21 -45
  9. package/skills/markcut/docs/template.md +0 -212
  10. package/skills/markcut/docs/templates/courseware/TEMPLATE.md +0 -526
  11. package/skills/markcut/docs/templates/courseware/agents/reviewer.md +0 -84
  12. package/skills/markcut/docs/templates/courseware/prompts/fix.md +0 -30
  13. package/skills/markcut/docs/templates/courseware/prompts/outline.md +0 -58
  14. package/skills/markcut/docs/templates/courseware/prompts/scene.md +0 -70
  15. package/skills/markcut/docs/templates/deep-dive/TEMPLATE.md +0 -354
  16. package/skills/markcut/docs/templates/deep-dive/agents/researcher.md +0 -69
  17. package/skills/markcut/docs/templates/deep-dive/agents/reviewer.md +0 -108
  18. package/skills/markcut/docs/templates/deep-dive/prompts/fix.md +0 -28
  19. package/skills/markcut/docs/templates/deep-dive/prompts/outline.md +0 -102
  20. package/skills/markcut/docs/templates/deep-dive/prompts/script.md +0 -64
  21. package/skills/markcut/docs/templates/illustrated-book/TEMPLATE.md +0 -356
  22. package/skills/markcut/docs/templates/illustrated-book/agents/reviewer.md +0 -115
  23. package/skills/markcut/docs/templates/illustrated-book/prompts/fix.md +0 -29
  24. package/skills/markcut/docs/templates/illustrated-book/prompts/illustration.md +0 -35
  25. package/skills/markcut/docs/templates/illustrated-book/prompts/story.md +0 -69
  26. package/skills/markcut/docs/templates/short-film/TEMPLATE.md +0 -385
  27. package/skills/markcut/docs/templates/short-film/agents/reviewer.md +0 -115
  28. package/skills/markcut/docs/templates/short-film/prompts/fix.md +0 -29
  29. package/skills/markcut/docs/templates/short-film/prompts/screenplay.md +0 -101
  30. package/skills/markcut/docs/templates/short-film/prompts/storyboard.md +0 -54
  31. package/skills/markcut/docs/templates/short-video/TEMPLATE.md +0 -301
  32. package/skills/markcut/docs/templates/short-video/agents/reviewer.md +0 -94
  33. package/skills/markcut/docs/templates/short-video/prompts/fix.md +0 -27
  34. package/skills/markcut/docs/templates/short-video/prompts/script.md +0 -65
  35. package/skills/markcut/docs/templates/vlog/TEMPLATE.md +0 -326
  36. package/skills/markcut/docs/templates/vlog/agents/reviewer.md +0 -89
  37. package/skills/markcut/docs/templates/vlog/agents/story-writer.md +0 -100
  38. package/skills/markcut/docs/templates/vlog/prompts/bgm-select.md +0 -38
  39. package/skills/markcut/docs/templates/vlog/prompts/group-clips.md +0 -93
  40. package/skills/markcut/docs/templates/vlog/prompts/local-context.md +0 -59
  41. package/skills/markcut/docs/templates/vlog/prompts/outline.md +0 -56
  42. package/skills/markcut/docs/templates/vlog/prompts/review-fix.md +0 -27
  43. package/skills/markcut/docs/templates/vlog/prompts/storyboard.md +0 -41
  44. package/src/render/cli.test.ts +0 -13
@@ -1,29 +0,0 @@
1
- # Prompt: Apply Reviewer Findings
2
-
3
- > Fill every `{placeholder}`, then execute in your own context.
4
-
5
- ---
6
-
7
- Apply the reviewer findings below to `{book_md_path}` with minimal, targeted edits.
8
-
9
- Reviewer findings (JSON):
10
-
11
- {findings_json}
12
-
13
- Rules:
14
- - Address every `blocker` and `major` finding. Minor when trivially fixable.
15
- - Art style inconsistency → rewrite the `prompt:"..."` values to append the art style string to every illustration. Ensure the same style string is used everywhere.
16
- - Character inconsistency → update illustration prompts to use matching character descriptions (same color, features, clothing).
17
- - Text-narration mismatch → make subtitle text and script text match exactly, or add a note if intentional.
18
- - Wrong font/typography → change `fontFamily` in subtitle `style:` to serif (Georgia, Merriweather).
19
- - Missing Ken Burns effect → add `effect:zoomIn` or `effect:fadeIn` to image nodes.
20
- - BGM too loud → reduce volume, ensure `foreground:true`.
21
- - Text in illustration → remove text/typography references from image prompts.
22
- - Duration off → adjust per-spread durations or redistribute text across spreads.
23
-
24
- After editing, list what changed:
25
- ```
26
- - <finding id>: <spread> — <one-line description>
27
- ```
28
-
29
- Then re-render and re-review.
@@ -1,35 +0,0 @@
1
- # Prompt: Illustration Prompt Generator
2
-
3
- > Fill every `{placeholder}`, then execute in your own context.
4
- > Generates a detailed TTI-compatible prompt for ONE illustration.
5
-
6
- ---
7
-
8
- Write a single image generation prompt for this spread of a {book_type} picture book.
9
-
10
- Art style: **{art_style}** — MUST be appended verbatim to every prompt.
11
-
12
- Spread text:
13
- "{spread_text}"
14
-
15
- Illustration description from story plan:
16
- {illustration_description}
17
-
18
- Characters seen so far (maintain consistency):
19
- {character_descriptions}
20
-
21
- ## Rules
22
-
23
- - The prompt must end with: ", {art_style}" — copy the art style string exactly at the end.
24
- - Include composition: wide shot / close-up / medium shot / view from above / etc.
25
- - Include lighting/mood: warm morning light, moonlit, misty twilight, golden hour, etc.
26
- - For characters: reference their appearance consistently (e.g. "the little red fox with a white-tipped tail, wearing a small blue scarf").
27
- - Do NOT include text, typography, letters, or words in the prompt — text is added via subtitle nodes.
28
- - Keep the prompt to 1-3 sentences. Detailed but not excessive.
29
- - Vary composition and perspective across spreads to avoid visual monotony.
30
-
31
- ## Output format
32
-
33
- ```
34
- prompt:"<detailed description of the illustration, composition, lighting, characters, {art_style}>"
35
- ```
@@ -1,69 +0,0 @@
1
- # Prompt: Story Page Plan
2
-
3
- > Fill every `{placeholder}`, then execute in your own context.
4
- > Splits the text into spreads, each with text + illustration description.
5
-
6
- ---
7
-
8
- You are adapting a {book_type} into an illustrated picture-book video.
9
-
10
- Art style: **{art_style}** — this goes into every illustration prompt.
11
-
12
- Full text / source:
13
-
14
- {material}
15
-
16
- Language: {language}
17
- Reading pace: {reading_pace}
18
-
19
- ## Rules
20
-
21
- ### Split into spreads
22
- - Each spread = 1-4 sentences that form a complete narrative unit.
23
- - A spread should feel complete on its own while creating gentle anticipation for the next.
24
- - For `story` type: follow narrative arc (beginning → middle → end).
25
- - For `poetry` type: one spread per stanza or 2-4 lines.
26
- - For `educational` type: one spread per fact or concept.
27
- - For `wordless` type: minimal or no text; focus on visual storytelling.
28
- - Total spreads: auto-calculated based on text length and pace, but aim for 5-20.
29
-
30
- ### Per-spread illustration description
31
- - Describe a specific scene from the text for that spread. What is happening visually?
32
- - Include: subject, action, setting, composition (wide/close-up/view from...), lighting/mood.
33
- - End with: ", {art_style}" — copy the art style string exactly.
34
- - For characters: describe appearance consistently across spreads.
35
- - Keep descriptions to 1-2 sentences each — concise but vivid.
36
-
37
- ### Per-spread narration
38
- - Write the full on-screen text (what the subtitle shows) for this spread.
39
- - Write the narration (what TTS speaks). Usually the same as the on-screen text.
40
- - If the narration elaborates, note the difference.
41
-
42
- ## Output format
43
-
44
- ```
45
- Title: <title>
46
-
47
- Art style: {art_style}
48
- Total spreads: <N>
49
- Estimated duration: <total seconds> (at {reading_pace} pace)
50
-
51
- ### Cover
52
- - Text: <title + author>
53
- - Illustration: <vivid description of the cover artwork, {art_style}>
54
- - Duration: 6s
55
-
56
- ### Spread 1
57
- - Text: <full text for this spread — 1-4 sentences>
58
- - Narration: <same as text, or note differences>
59
- - Illustration: <scene description, composition, mood, {art_style}>
60
- - Duration: <seconds>
61
-
62
- ### Spread 2
63
- ...
64
-
65
- ### Colophon
66
- - Text: "The End" + credits
67
- - Illustration: <closing visual, {art_style}>
68
- - Duration: 6s
69
- ```
@@ -1,385 +0,0 @@
1
- ---
2
- name: short-film
3
- description: Turn a narrative, theme, or script into a 5-10 minute serious dramatic short film with three-act structure, cinematic scenes, sound design, and narrative voiceover.
4
- when-to-use: dramatic short films, serious documentaries, cinematic mood pieces, narrative storytelling, any 5-10 minute video with dramatic arc and production value
5
- engine: "@lalalic/markcut — run via `npx @lalalic/markcut`"
6
- ---
7
-
8
- # Short Film (严肃短片) Template
9
-
10
- Follow this file top to bottom. Read the markcut skill (`SKILL.md` → `docs/markdown-descriptive.md`) first if you have not.
11
-
12
- ```mermaid
13
- flowchart LR
14
- Input[📥 Concept / Script / Theme] --> Screenplay[✍️ screenplay.md<br/>three-act structure]
15
- Screenplay --> Script[📋 acts + scenes + VO lines]
16
- Script --> Board[🎬 storyboard.md<br/>shot-by-shot plan]
17
- Board --> Film[📄 film.md]
18
- BGM["🎵 score + sound design"] --> Film
19
- Film --> Render[🎬 npx markcut render]
20
- Render --> MP4[📺 final.mp4]
21
- MP4 --> Reviewer[🔍 reviewer agent]
22
- Reviewer -->|FAIL| Fix[🔧 fix]
23
- Fix --> Film
24
- Reviewer -->|PASS| Done[✅ Done]
25
- ```
26
-
27
- | Path | Runs in | Purpose |
28
- |---|---|---|
29
- | `TEMPLATE.md` | your context | everything |
30
- | `prompts/*.md` | your context | fill-in prompts you execute |
31
- | `agents/*.md` | separate session | subagent definitions |
32
-
33
- ## 0. Prerequisites
34
-
35
- - `npx @lalalic/markcut` runnable
36
- - `ffmpeg`/`ffprobe`/`exiftool` on PATH
37
- - For reviewer: image-understanding capability, STT CLI
38
-
39
- ## 1. Inputs — collect before starting
40
-
41
- | Input | Required | Default | Notes |
42
- |---|---|---|---|
43
- | Concept / logline | **yes** | — | one sentence that captures the film: "A grieving musician finds an old letter that sends him on a journey across the city" |
44
- | Source material | no | — | optional: existing short story, screenplay, article, or poem to adapt |
45
- | Film type | no | `dramatic` | `dramatic` (narrative, characters, plot), `documentary` (real-world subject, serious tone), `mood` (atmospheric, minimal plot, sensory) |
46
- | Tone | no | `serious` | `serious` (somber, weighty), `noir` (dark, mysterious), `melancholic` (sad, reflective), `hopeful` (bittersweet, uplifting) |
47
- | Language | no | en | narration and on-screen text language |
48
- | Target duration | no | 7 min | 5–10 min |
49
- | Voice(s) | no | | mlx-audio voice(s). For multiple characters, provide a list: {narrator, character1, character2} |
50
- | Music mood | no | `cinematic` | score style: cinematic, ambient, noir jazz, minimal piano, tense. BGM is **recommended but not mandatory** — silence is a valid cinematic choice |
51
- | Aspect ratio | no | `16:9` | `16:9` (standard), `2.35:1` (cinemascope — add black bars in stylesheet), `4:3` (vintage) |
52
-
53
- **Core principle**: A serious short film is **visual storytelling first**. Every scene should advance the story through image, sound, and performance — not just narration. Voiceover is a tool, not a crutch.
54
-
55
- ## 2. Scene grammar — three-act narrative architecture
56
-
57
- ### The dramatic arc
58
-
59
- ```
60
- # video ← root: width:1920 height:1080 fps:30 layout:series
61
-
62
- │ transition:fade(0.5)
63
- ├── - audio isBackground:true foreground:true src:score.mp3 volume:0.12
64
- ├── - audio isBackground:true src:ambient.mp3 volume:0.05 (optional, diegetic ambience)
65
-
66
- ├── ## Teaser ← 30–90s. Mood establisher, no context yet
67
-
68
- ├── ## Act 1 — The Setup ← 90s–2min. Character, world, inciting incident
69
- │ ├── ### Scene 1 ← establishing the world
70
- │ ├── ### Scene 2 ← introducing the protagonist
71
- │ └── ### Scene 3 ← the inciting incident
72
-
73
- ├── ## Act 2 — The Confrontation ← 3–5min. Rising action, complications
74
- │ ├── ### Scene 4 ← reacting to inciting incident
75
- │ ├── ### Scene 5 ← rising stakes
76
- │ ├── ### Scene 6 ← midpoint / turning point
77
- │ ├── ### Scene 7 ← complications, darkest moment
78
- │ └── ### Scene 8 ← final push toward climax
79
-
80
- ├── ## Act 3 — The Resolution ← 90s–2min. Climax, denouement
81
- │ ├── ### Scene 9 ← climax
82
- │ ├── ### Scene 10 ← falling action
83
- │ └── ### Scene 11 ← resolution / final image
84
-
85
- └── ## Epilogue ← 30–60s. Emotional close, title card
86
- ```
87
-
88
- Each `### Scene` is a story beat in a specific location/time. Scenes within an act play sequentially.
89
-
90
- ### Scene structure (within each scene)
91
-
92
- Each scene follows this shape:
93
-
94
- ```
95
- ### 1.2 — Title (INT/EXT. LOCATION - TIME)
96
- layout:parallel
97
- - image src:auto prompt:"<cinematic shot description>" duration:<s>
98
- effect:<camera move suggestion>
99
- - script "<voiceover or dialogue line>" duration:<s>
100
- ```
101
-
102
- The scene's `layout:parallel` means the visual and audio play simultaneously. The visual is a generated image (or video) described with cinematic language. The audio is voiceover narration, character dialogue, or ambient sound.
103
-
104
- ### Scene types
105
-
106
- | Type | Purpose | Visual style | Duration |
107
- |---|---|---|---|
108
- | **Establishing** | Show location, time, mood | Wide shot, static or slow pan | 8–15s |
109
- | **Character intro** | Introduce protagonist | Medium shot, shallow DOF | 5–10s |
110
- | **Dialogue** | Conversation | Shot-reverse-shot or two-shot | 10–30s |
111
- | **Action** | Movement, event | Dynamic, handheld or tracking | 5–20s |
112
- | **Montage** | Time passing, emotional build | Series of dissolves, varied shots | 15–45s |
113
- | **VO/internal** | Voiceover over visuals | Relevant imagery, metaphorical | 5–20s |
114
- | **Climax** | Peak emotional moment | Intense composition, close-ups | 15–30s |
115
- | **Resolution** | Calm after storm | Wide, soft lighting, slow | 10–20s |
116
- | **Transition** | Bridge between acts | Metaphorical, fade to black | 3–5s |
117
-
118
- ### Timing template (7-minute film)
119
-
120
- | Section | Scenes | Total duration | Notes |
121
- |---|---|---|---|
122
- | Teaser | 1 scene | 30–60s | No context, pure mood |
123
- | Act 1 | 3 scenes | 90s | Setup + inciting incident |
124
- | Act 2 | 4–5 scenes | 3min | Rising action + midpoint + darkest moment |
125
- | Act 3 | 3 scenes | 90s | Climax + falling action + resolution |
126
- | Epilogue | 1 scene | 30s | Emotional close |
127
- | **Total** | **12–13 scenes** | **~7 min** | Adjust proportionally for 5–10 min |
128
-
129
- For a 10-minute film, add 1–2 scenes per act. For a 5-minute film, trim 1 scene per act.
130
-
131
- ### Visual direction prompts
132
-
133
- Every image in a short film needs cinematic shot direction. The `src:auto prompt:"..."` must include:
134
-
135
- ```
136
- prompt:"[SHOT TYPE] of [SUBJECT], [ACTION/COMPOSITION], [LIGHTING/MOOD], [CAMERA MOVEMENT], [COLOR PALETTE], cinematic, film still, 4K"
137
- ```
138
-
139
- | Element | Options |
140
- |---|---|
141
- | Shot type | wide shot, medium shot, close-up, extreme close-up, over-the-shoulder, POV, two-shot, establishing shot, aerial shot, Dutch angle |
142
- | Camera movement | static, slow push-in, slow pull-out, tracking left, pan right, handheld, dolly zoom, crane up |
143
- | Lighting | golden hour, moonlight, harsh noon sun, soft window light, neon glow, candlelight, low-key, high-key, chiaroscuro, silhouette |
144
- | Color palette | warm tones, cool blues, desaturated, monochrome, teal and orange, sepia, high contrast |
145
- | Mood | melancholic, tense, serene, foreboding, intimate, lonely, hopeful |
146
-
147
- Example:
148
- ```markdown
149
- - image src:auto
150
- prompt:"WIDE SHOT of a lone figure standing on a rain-soaked platform at dusk, train tracks vanishing into fog, soft amber light from a distant signal, static camera, desaturated cool tones, melancholic mood, cinematic, film still, 4K"
151
- duration:12 effect:fadeIn
152
- ```
153
-
154
- ### Camera effects
155
-
156
- | markcut effect | Cinematic equivalent |
157
- |---|---|
158
- | `effect:fadeIn` | Dissolve in (soft scene open) |
159
- | `effect:zoomIn` | Slow push-in (building tension) |
160
- | `effect:zoomOut` | Slow pull-out (revealing context) |
161
- | `effect:fadeIn` with long duration | Dissolve (gentle scene transition) |
162
- | `transition:fade(1.0)` | Fade to black (act break, passage of time) |
163
-
164
- ### Transitions between scenes
165
-
166
- Use the root-level `transition:` for standard scene-to-scene:
167
- ```markdown
168
- # video
169
- ...
170
- transition:fade(0.5)
171
- ```
172
-
173
- For specific narrative transitions, use a dedicated transition scene:
174
- ```markdown
175
- ### Transition — Fade to Black
176
- layout:parallel
177
- - image src:auto prompt:"black frame" duration:2 effect:fadeIn
178
- ```
179
-
180
- Or use a metaphorical transition:
181
- ```markdown
182
- ### Transition — The Passing Days
183
- layout:parallel
184
- - image src:auto prompt:"EXTREME CLOSE-UP of calendar pages turning in slow motion, warm window light, shallow depth of field, cinematic, film still" duration:4 effect:fadeIn
185
- - script "Days passed. Weeks. The letter stayed in his pocket."
186
- ```
187
-
188
- ## 3. Authoring rules — the cinematic bar
189
-
190
- ### Screenplay structure
191
-
192
- Every short film needs:
193
-
194
- 1. **A protagonist with a desire**: Someone the audience cares about who wants something. The desire drives the plot.
195
- 2. **An inciting incident**: Something that disrupts the protagonist's ordinary world and forces a choice.
196
- 3. **Rising stakes**: Each scene should make the situation more urgent or meaningful.
197
- 4. **A midpoint shift**: Halfway through, the protagonist stops reacting and starts acting.
198
- 5. **A darkest moment**: Just before the climax, all seems lost.
199
- 6. **A climax**: The peak emotional moment where the protagonist confronts the central conflict.
200
- 7. **A resolution**: The new ordinary — how the protagonist is changed.
201
-
202
- ### Narration / voiceover rules
203
-
204
- - **Voiceover is a spice, not the main dish**. The story should be told through images. Use VO only when internal thoughts or context cannot be shown visually.
205
- - **VO should be poetic but precise**. Short sentences. Concrete imagery. No exposition dumps.
206
- - **One VO line per scene** (typically). Each line is 10–30 words. 2.5 words/second pace.
207
- - **If using dialogue between characters**: Use different TTS voices per character. Mark dialogue with character names in the script:
208
- ```markdown
209
- - script "JOHN: I never thought I'd see this place again.\nMARIA: None of us did."
210
- ```
211
- - **First-person** for personal stories. **Third-person** for documentary-style narration.
212
-
213
- ### Visual composition rules
214
-
215
- - **Every image should tell a story**: A character in a frame should be doing something, feeling something. No empty landscapes unless they serve the mood.
216
- - **Variety of shot types**: Don't use the same shot type twice in a row. Alternate wide, medium, close-up.
217
- - **Lighting as storytelling**: A character in shadow = hiding something. Warm light = safety/memory. Cold light = reality/loss.
218
- - **Color as meaning**: Cool palette for isolation/alienation. Warm for memory/comfort. Desaturated for despair.
219
- - **Foreground / background**: Use depth (shallow DOF, objects in foreground) to create cinematic depth.
220
-
221
- ### Sound design
222
-
223
- Sound is half the experience of a film. Use:
224
-
225
- 1. **Score (BGM)**: Root-level audio, `foreground:true` for ducking during VO:
226
- ```markdown
227
- - audio isBackground:true foreground:true src:score.mp3 volume:0.12
228
- ```
229
- 2. **Ambient sound**: Diegetic background — rain, wind, traffic, room tone:
230
- ```markdown
231
- - audio isBackground:true src:rain-ambient.mp3 volume:0.06
232
- ```
233
- 3. **Silence**: For the most dramatic moments, drop ALL audio. A 3–5 second silence before the climax can be more powerful than any music.
234
-
235
- ### Scene timing rhythm
236
-
237
- A 7-minute film ≈ 420 seconds. With ~12 scenes:
238
- - Average scene: 35 seconds
239
- - Variation is critical: some scenes 10s (impact), some 60s (breathing room)
240
- - Act 2 is the longest and should have the widest variation
241
- - Silence / slow scenes feel longer — use them sparingly
242
-
243
- ### Multi-language (variants)
244
-
245
- - Same `# <lang>` variant block pattern.
246
- - For translated films: dialogue and VO must preserve the dramatic timing. A line that takes 3s in English should take ~3s in the translation.
247
-
248
- ## 4. Components & styles
249
-
250
- ### Optional: Letterbox / Cinemascope overlay
251
-
252
- ```css
253
- ~~~css stylesheet
254
- .letterbox {
255
- position: absolute;
256
- left: 0; right: 0;
257
- height: 120px; /* for 2.35:1 on 16:9 canvas */
258
- background: #000;
259
- pointer-events: none;
260
- }
261
- .letterbox-top { top: 0; }
262
- .letterbox-bottom { bottom: 0; }
263
- ~~~
264
- ```
265
-
266
- ```markdown
267
- - component isBackground:true jsx:"<div className='letterbox letterbox-top' />"
268
- - component isBackground:true jsx:"<div className='letterbox letterbox-bottom' />"
269
- ```
270
-
271
- ### Optional: Subtitle styling for film
272
-
273
- ```markdown
274
- # video
275
- ... subtitle:{fontSize:"28px",fontFamily:"'Courier New',monospace",style:"text-align:center;text-shadow:0 2px 8px rgba(0,0,0,.8)"}
276
- ```
277
-
278
- ### Title card component
279
-
280
- ```jsx
281
- export function TitleCard({ title, subtitle = '' }) {
282
- return (
283
- <div style={{
284
- width: '100%', height: '100%',
285
- display: 'flex', flexDirection: 'column',
286
- alignItems: 'center', justifyContent: 'center',
287
- background: '#0a0a0a',
288
- fontFamily: "'Georgia', serif",
289
- }}>
290
- <div style={{ fontSize: 64, color: '#f5f5f7', letterSpacing: 4, marginBottom: 20, textAlign: 'center', padding: '0 40px' }}>
291
- {title}
292
- </div>
293
- {subtitle && (
294
- <div style={{ fontSize: 24, color: '#888', fontStyle: 'italic', letterSpacing: 2 }}>
295
- {subtitle}
296
- </div>
297
- )}
298
- </div>
299
- )
300
- }
301
- ```
302
-
303
- ### Theme knobs
304
-
305
- | Knob | Default | Effect |
306
- |---|---|---|
307
- | Letterbox height | `0` (none) | `120px` for 2.35:1 cinemascope |
308
- | Subtitle font | `'Courier New', monospace` | Film subtitle aesthetic |
309
- | Score volume | `0.12` | Music presence in mix |
310
- | Transition duration | `0.5s` | Scene-to-scene fade speed |
311
-
312
- ## 5. Workflow
313
-
314
- ### Phase 0: Concept
315
-
316
- 1. **Define the story** — Given the concept/logline, develop:
317
- - Protagonist: who, what do they want, what's in their way
318
- - Logline expanded into 3-sentence synopsis (beginning, middle, end)
319
- - Tone and visual references (films, photographers, color palettes)
320
- - VO/narration approach: first-person or third-person, how much
321
-
322
- ### Phase 1: Screenplay
323
-
324
- 2. **Write the screenplay** — Fill `prompts/screenplay.md` with the concept. This produces:
325
- - Three-act structure with scene-by-scene breakdown
326
- - Per-scene: location, time, shot type, VO/dialogue, mood, duration
327
- - Visual references for each scene
328
-
329
- The output is a narrative plan, not a technical markcut document.
330
-
331
- ### Phase 2: Storyboard
332
-
333
- 3. **Develop shot-by-shot** — For each scene from the screenplay, fill `prompts/storyboard.md`:
334
- - Detailed TTI prompt with shot type, lighting, mood, camera movement, color
335
- - VO/dialogue text for the scene
336
- - Duration and effect
337
- - Sound notes (score, ambient, silence)
338
-
339
- 4. **Generate visuals** — Run ITT CLI for each scene's prompt. Store as `scene-01.jpg`, `scene-02.jpg`, etc. in `.markcut/generated/media/`.
340
-
341
- ### Phase 3: Assemble
342
-
343
- 5. **Assemble film.md** — Write the markcut markdown file using §2 grammar:
344
- - Root config with TTS voice, optional subtitles
345
- - BGM/ambient audio at root level
346
- - Teaser → Act 1 → Act 2 → Act 3 → Epilogue
347
- - Each scene with cinematic image + VO/dialogue
348
- - Transitions between acts (fade to black, metaphorical)
349
- - Title card at start, credits at end
350
-
351
- 6. **Render** — `npx @lalalic/markcut render film.md`. On errors: fix and re-render, max 3 per error.
352
-
353
- ### Phase 4: Review
354
-
355
- 7. **Review (quality gate)** — Run `agents/reviewer.md` in a fresh separate session. Pass: `film.md`, rendered MP4, `TEMPLATE.md`, target duration, language, tone, film type. Returns `{verdict, findings[]}`.
356
-
357
- 8. **Fix loop** — On FAIL: fill `prompts/fix.md` with findings, edit, re-render, re-review. Max 3 iterations, then escalate.
358
-
359
- ## 6. Quality gate — exit criteria
360
-
361
- Done only when ALL hold:
362
-
363
- - [ ] reviewer verdict = `PASS` (zero blocker/major findings)
364
- - [ ] total duration within ±15% of target
365
- - [ ] structure matches §2 (teaser → act 1 → act 2 → act 3 → epilogue)
366
- - [ ] protagonist has a clear desire, inciting incident is present, stakes rise through the film
367
- - [ ] voiceover is minimal — the story is told through images first, VO second
368
- - [ ] at least 2 shot type transitions in every 3 consecutive scenes (not all wide, not all close-up)
369
- - [ ] lighting/mood is intentional and consistent within scenes (spot-check 3: does the image match the described tone?)
370
- - [ ] no blank/black frames; all `src:auto` images rendered with cinematic quality
371
- - [ ] STT transcript matches script lines (≥85% content match)
372
- - [ ] BGM (if present) ducked under VO, volume 0.08–0.15
373
- - [ ] ambient sound (if present) present at low volume (≤0.06)
374
- - [ ] scene duration variation: at least 2 scenes under 15s AND at least 2 scenes over 40s
375
- - [ ] transitions between acts are marked (fade to black, transition scene, or clear narrative break)
376
- - [ ] audio is not uniformly present — at least one moment of silence or near-silence (≤3s of quiet) for dramatic effect
377
- - [ ] visual prompts include shot type, camera movement, lighting, and color palette (spot-check 3)
378
-
379
- ## 7. Reference
380
-
381
- - Golden example: See `tests/fixtures/templates/courseware.md` for the template format.
382
- - Screenplay structure: Save the Cat (Blake Snyder) or The Hero's Journey (Joseph Campbell) for scene-by-scene planning.
383
- - Shot types: See §2 visual direction prompts for the full taxonomy of cinematic shots.
384
- - Sound design principle: For every minute of film, have at least 5 seconds of silence or near-silence.
385
- - Effect reference: `fadeIn` (dissolve), `zoomIn` (push-in), `zoomOut` (pull-out), `transition:fade(T)` (scene transition).
@@ -1,115 +0,0 @@
1
- ---
2
- name: short-film-reviewer
3
- description: Read-only quality gate for serious short films. Checks three-act structure, cinematic visual quality, shot variety, sound design, and narrative arc completeness.
4
- context: fresh
5
- mode: read-only
6
- tools: read file, bash (ffmpeg/ffprobe, STT CLI), image understanding
7
- ---
8
-
9
- # System prompt
10
-
11
- You are a strict, film-literate QA reviewer for serious short films (5-10 min). You review; you **never edit** any file. Your standards are festival-quality — you judge narrative structure, visual storytelling, shot variety, sound design, and emotional impact.
12
-
13
- ## Inputs (provided in the task)
14
- - `film_md` — absolute path to the generated film markdown
15
- - `mp4` — absolute path to the rendered video
16
- - `template_md` — absolute path to this `TEMPLATE.md`
17
- - `duration_min` — target duration
18
- - `language` — expected language
19
- - `tone` — serious | noir | melancholic | hopeful
20
- - `film_type` — dramatic | documentary | mood
21
-
22
- ## Procedure
23
-
24
- ### 1. Static review (source vs rulebook)
25
-
26
- **Narrative arc** (§2):
27
- - Teaser present (first section, mood-establisher, 30-90s)
28
- - Act 1 present with 3 scenes (character intro, world building, inciting incident)
29
- - Act 2 present with 4-5 scenes (rising action, midpoint, complications, darkest moment)
30
- - Act 3 present with 3 scenes (climax, falling action, resolution)
31
- - Epilogue present (emotional close, 30-60s)
32
- - Total scene count: 11-14 (adjust for 5 vs 10 min)
33
- - Protagonist has a clear desire (check: does every scene serve that desire?)
34
- - Inciting incident occurs by end of Act 1
35
- - Midpoint shift present (protagonist stops reacting, starts acting)
36
- - Darkest moment present just before climax
37
-
38
- **Shot variety**:
39
- - Scan all `prompt:"..."` values for shot type keywords (wide, medium, close-up, POV, etc.)
40
- - In every 3 consecutive scenes, at least 2 different shot types.
41
- - If 3+ consecutive scenes use the same shot type → major finding.
42
-
43
- **Visual prompt completeness**:
44
- - Every `prompt:"..."` should contain: shot type, subject, lighting/mood, and cinematic language.
45
- - Spot-check 5 prompts. If any is generic ("beautiful landscape" without shot/lighting) → major finding.
46
-
47
- **Narration economy**:
48
- - Count `- script "..."` lines. Check if VO is used sparingly.
49
- - If there are more VO lines than visual-only scenes, flag as potential over-narration.
50
- - VO lines should be 10-30 words. If consistently >40 words, minor finding.
51
-
52
- **Sound design**:
53
- - BGM present? Note volume.
54
- - Ambient sound present? Note.
55
- - Is there at least one moment of silence or near-silence (≤3s of no audio)? Check for a scene without script and without BGM/ambient, OR a gap between scenes.
56
- - If audio is uniformly dense (music + VO + ambient in every scene) → major finding.
57
-
58
- ### 2. Dynamic review
59
- - `ffprobe`: duration (compare to target ±15%), resolution, audio streams.
60
- - Extract 12 frames (1 from teaser, 2 from each act, 1 epilogue, +2 key moments).
61
- - For each: not blank/black, has cinematic visual quality (composition, lighting visible).
62
- - Shot variety check: compare consecutive frames — do they look like different shot types?
63
- - Mood consistency: do the visuals match the described tone? (dark film should look dark, etc.)
64
- - Extract audio → STT. Compare against all `- script "..."` lines. ≥85% match.
65
- - Check total silence: are there any gaps in the audio track >3s? If yes, note as evidence of intentional silence.
66
-
67
- ### 3. Report
68
-
69
- Severity: `blocker` (missing acts, blank frames, no narrative arc) · `major` (same shot type repeatedly, over-narration, no silence, generic prompts, no inciting incident, duration >20% off) · `minor` (VO slightly long, minor timing, font choice)
70
-
71
- Output exactly this JSON:
72
-
73
- ```json
74
- {
75
- "verdict": "PASS | FAIL",
76
- "measured": {
77
- "duration_s": 0,
78
- "target_s": 0,
79
- "resolution": "",
80
- "stt_match_pct": 0,
81
- "scene_count": 0,
82
- "shot_types": ["wide", "medium", "close-up", "POV", "establishing"],
83
- "silence_moments": 0
84
- },
85
- "findings": [
86
- {
87
- "id": "F1",
88
- "severity": "blocker | major | minor",
89
- "scene": "<scene name or 'global'>",
90
- "check": "<which rule>",
91
- "issue": "<what is wrong>",
92
- "evidence": "<source line / frame path / STT excerpt>",
93
- "fix_hint": "<one-line suggestion>"
94
- }
95
- ]
96
- }
97
- ```
98
-
99
- `PASS` requires zero `blocker` and zero `major` findings.
100
-
101
- # Task template
102
-
103
- ```
104
- Review a serious short film against its template and narrative structure requirements.
105
-
106
- film_md: {film_md}
107
- mp4: {mp4}
108
- template_md: {template_md}
109
- duration_min: {duration_min}
110
- language: {language}
111
- tone: {tone}
112
- film_type: {film_type}
113
-
114
- Follow your procedure. Use whisper-cli (whisper.cpp) for STT if python whisper is unavailable. Save frames under a review directory. Pay special attention to narrative arc completeness and shot variety. Output the verdict JSON only.
115
- ```
@@ -1,29 +0,0 @@
1
- # Prompt: Apply Reviewer Findings
2
-
3
- > Fill every `{placeholder}`, then execute in your own context.
4
-
5
- ---
6
-
7
- Apply the reviewer findings below to `{film_md_path}` with minimal, targeted edits.
8
-
9
- Reviewer findings (JSON):
10
-
11
- {findings_json}
12
-
13
- Rules:
14
- - Address every `blocker` and `major` finding. Minor when trivially fixable.
15
- - Missing dramatic arc → add inciting incident scene, midpoint shift, or darkest moment as needed.
16
- - Too much VO → convert some VO scenes to purely visual (remove script, let image + music tell the story).
17
- - Same shot type repeatedly → alternate wide/medium/close-up across consecutive scenes.
18
- - Blank frames → check `src:auto` prompts for sufficient detail; add composition, lighting, and mood.
19
- - Low visual variety → mix shot types, camera movements, and lighting across scenes.
20
- - No silence → add a 3-5s silent scene or extend a pause in an existing scene (remove audio, let image breathe).
21
- - Duration off → adjust scene durations proportionally. Shorten VO lines or add transitional scenes.
22
- - Missing act transition → add fade-to-black transition scene between acts.
23
-
24
- After editing, list what changed:
25
- ```
26
- - <finding id>: <scene> — <one-line description>
27
- ```
28
-
29
- Then re-render and re-review.