@lalalic/markcut 2.1.0 → 2.2.1
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.
- package/package.json +3 -2
- package/{SKILL.md → skills/markcut/SKILL.md} +8 -2
- package/skills/markcut/docs/template.md +213 -0
- package/{templates → skills/markcut/docs/templates}/courseware/TEMPLATE.md +220 -10
- package/{templates → skills/markcut/docs/templates}/courseware/prompts/outline.md +5 -0
- package/{templates → skills/markcut/docs/templates}/courseware/prompts/scene.md +6 -0
- package/skills/markcut/docs/templates/deep-dive/TEMPLATE.md +355 -0
- package/skills/markcut/docs/templates/deep-dive/agents/researcher.md +69 -0
- package/skills/markcut/docs/templates/deep-dive/agents/reviewer.md +108 -0
- package/skills/markcut/docs/templates/deep-dive/prompts/fix.md +28 -0
- package/skills/markcut/docs/templates/deep-dive/prompts/outline.md +102 -0
- package/skills/markcut/docs/templates/deep-dive/prompts/script.md +64 -0
- package/skills/markcut/docs/templates/illustrated-book/TEMPLATE.md +360 -0
- package/skills/markcut/docs/templates/illustrated-book/agents/reviewer.md +115 -0
- package/skills/markcut/docs/templates/illustrated-book/prompts/fix.md +29 -0
- package/skills/markcut/docs/templates/illustrated-book/prompts/illustration.md +35 -0
- package/skills/markcut/docs/templates/illustrated-book/prompts/story.md +69 -0
- package/skills/markcut/docs/templates/short-film/TEMPLATE.md +387 -0
- package/skills/markcut/docs/templates/short-film/agents/reviewer.md +115 -0
- package/skills/markcut/docs/templates/short-film/prompts/fix.md +29 -0
- package/skills/markcut/docs/templates/short-film/prompts/screenplay.md +101 -0
- package/skills/markcut/docs/templates/short-film/prompts/storyboard.md +54 -0
- package/skills/markcut/docs/templates/short-video/TEMPLATE.md +302 -0
- package/skills/markcut/docs/templates/short-video/agents/reviewer.md +94 -0
- package/skills/markcut/docs/templates/short-video/prompts/fix.md +27 -0
- package/skills/markcut/docs/templates/short-video/prompts/script.md +65 -0
- package/skills/markcut/docs/templates/vlog/TEMPLATE.md +405 -0
- package/skills/markcut/docs/templates/vlog/agents/reviewer.md +89 -0
- package/skills/markcut/docs/templates/vlog/agents/story-writer.md +100 -0
- package/skills/markcut/docs/templates/vlog/prompts/bgm-select.md +38 -0
- package/skills/markcut/docs/templates/vlog/prompts/group-clips.md +93 -0
- package/skills/markcut/docs/templates/vlog/prompts/local-context.md +59 -0
- package/skills/markcut/docs/templates/vlog/prompts/outline.md +56 -0
- package/skills/markcut/docs/templates/vlog/prompts/review-fix.md +27 -0
- package/skills/markcut/docs/templates/vlog/prompts/storyboard.md +41 -0
- package/src/config.mjs +11 -3
- package/src/player/bundle/player.js +793 -545
- package/src/player/pipeline.mjs +1 -0
- package/src/player/server.mjs +3 -5
- /package/{docs → skills/markcut/docs}/edit-mode.md +0 -0
- /package/{docs → skills/markcut/docs}/json-descriptive.md +0 -0
- /package/{docs → skills/markcut/docs}/label-mode.md +0 -0
- /package/{docs → skills/markcut/docs}/markdown-descriptive.md +0 -0
- /package/{docs → skills/markcut/docs}/system-prompt-edit.md +0 -0
- /package/{templates → skills/markcut/docs/templates}/courseware/agents/reviewer.md +0 -0
- /package/{templates → skills/markcut/docs/templates}/courseware/prompts/fix.md +0 -0
|
@@ -0,0 +1,387 @@
|
|
|
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
|
+
- TTS CLI (default: `edge-tts`) — voiceover narration or character voices
|
|
37
|
+
- ITT CLI (for `src:auto` scene generation) — **critical**, every scene is AI-generated
|
|
38
|
+
- `ffmpeg`/`ffprobe` on PATH
|
|
39
|
+
- For reviewer: image-understanding capability, STT CLI
|
|
40
|
+
|
|
41
|
+
## 1. Inputs — collect before starting
|
|
42
|
+
|
|
43
|
+
| Input | Required | Default | Notes |
|
|
44
|
+
|---|---|---|---|
|
|
45
|
+
| 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" |
|
|
46
|
+
| Source material | no | — | optional: existing short story, screenplay, article, or poem to adapt |
|
|
47
|
+
| Film type | no | `dramatic` | `dramatic` (narrative, characters, plot), `documentary` (real-world subject, serious tone), `mood` (atmospheric, minimal plot, sensory) |
|
|
48
|
+
| Tone | no | `serious` | `serious` (somber, weighty), `noir` (dark, mysterious), `melancholic` (sad, reflective), `hopeful` (bittersweet, uplifting) |
|
|
49
|
+
| Language | no | en | narration and on-screen text language |
|
|
50
|
+
| Target duration | no | 7 min | 5–10 min |
|
|
51
|
+
| Voice(s) | no | en: `en-US-GuyNeural` | edge-tts voice(s). For multiple characters, provide a list: {narrator, character1, character2} |
|
|
52
|
+
| 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 |
|
|
53
|
+
| Aspect ratio | no | `16:9` | `16:9` (standard), `2.35:1` (cinemascope — add black bars in stylesheet), `4:3` (vintage) |
|
|
54
|
+
|
|
55
|
+
**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.
|
|
56
|
+
|
|
57
|
+
## 2. Scene grammar — three-act narrative architecture
|
|
58
|
+
|
|
59
|
+
### The dramatic arc
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
# video ← root: width:1920 height:1080 fps:30 layout:series
|
|
63
|
+
│ tts:"<edge-tts CLI — narrator voice>"
|
|
64
|
+
│ transition:fade(0.5)
|
|
65
|
+
├── - audio isBackground:true foreground:true src:score.mp3 volume:0.12
|
|
66
|
+
├── - audio isBackground:true src:ambient.mp3 volume:0.05 (optional, diegetic ambience)
|
|
67
|
+
│
|
|
68
|
+
├── ## Teaser ← 30–90s. Mood establisher, no context yet
|
|
69
|
+
│
|
|
70
|
+
├── ## Act 1 — The Setup ← 90s–2min. Character, world, inciting incident
|
|
71
|
+
│ ├── ### Scene 1 ← establishing the world
|
|
72
|
+
│ ├── ### Scene 2 ← introducing the protagonist
|
|
73
|
+
│ └── ### Scene 3 ← the inciting incident
|
|
74
|
+
│
|
|
75
|
+
├── ## Act 2 — The Confrontation ← 3–5min. Rising action, complications
|
|
76
|
+
│ ├── ### Scene 4 ← reacting to inciting incident
|
|
77
|
+
│ ├── ### Scene 5 ← rising stakes
|
|
78
|
+
│ ├── ### Scene 6 ← midpoint / turning point
|
|
79
|
+
│ ├── ### Scene 7 ← complications, darkest moment
|
|
80
|
+
│ └── ### Scene 8 ← final push toward climax
|
|
81
|
+
│
|
|
82
|
+
├── ## Act 3 — The Resolution ← 90s–2min. Climax, denouement
|
|
83
|
+
│ ├── ### Scene 9 ← climax
|
|
84
|
+
│ ├── ### Scene 10 ← falling action
|
|
85
|
+
│ └── ### Scene 11 ← resolution / final image
|
|
86
|
+
│
|
|
87
|
+
└── ## Epilogue ← 30–60s. Emotional close, title card
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Each `### Scene` is a story beat in a specific location/time. Scenes within an act play sequentially.
|
|
91
|
+
|
|
92
|
+
### Scene structure (within each scene)
|
|
93
|
+
|
|
94
|
+
Each scene follows this shape:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
### 1.2 — Title (INT/EXT. LOCATION - TIME)
|
|
98
|
+
layout:parallel
|
|
99
|
+
- image src:auto prompt:"<cinematic shot description>" duration:<s>
|
|
100
|
+
effect:<camera move suggestion>
|
|
101
|
+
- script "<voiceover or dialogue line>" duration:<s>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
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.
|
|
105
|
+
|
|
106
|
+
### Scene types
|
|
107
|
+
|
|
108
|
+
| Type | Purpose | Visual style | Duration |
|
|
109
|
+
|---|---|---|---|
|
|
110
|
+
| **Establishing** | Show location, time, mood | Wide shot, static or slow pan | 8–15s |
|
|
111
|
+
| **Character intro** | Introduce protagonist | Medium shot, shallow DOF | 5–10s |
|
|
112
|
+
| **Dialogue** | Conversation | Shot-reverse-shot or two-shot | 10–30s |
|
|
113
|
+
| **Action** | Movement, event | Dynamic, handheld or tracking | 5–20s |
|
|
114
|
+
| **Montage** | Time passing, emotional build | Series of dissolves, varied shots | 15–45s |
|
|
115
|
+
| **VO/internal** | Voiceover over visuals | Relevant imagery, metaphorical | 5–20s |
|
|
116
|
+
| **Climax** | Peak emotional moment | Intense composition, close-ups | 15–30s |
|
|
117
|
+
| **Resolution** | Calm after storm | Wide, soft lighting, slow | 10–20s |
|
|
118
|
+
| **Transition** | Bridge between acts | Metaphorical, fade to black | 3–5s |
|
|
119
|
+
|
|
120
|
+
### Timing template (7-minute film)
|
|
121
|
+
|
|
122
|
+
| Section | Scenes | Total duration | Notes |
|
|
123
|
+
|---|---|---|---|
|
|
124
|
+
| Teaser | 1 scene | 30–60s | No context, pure mood |
|
|
125
|
+
| Act 1 | 3 scenes | 90s | Setup + inciting incident |
|
|
126
|
+
| Act 2 | 4–5 scenes | 3min | Rising action + midpoint + darkest moment |
|
|
127
|
+
| Act 3 | 3 scenes | 90s | Climax + falling action + resolution |
|
|
128
|
+
| Epilogue | 1 scene | 30s | Emotional close |
|
|
129
|
+
| **Total** | **12–13 scenes** | **~7 min** | Adjust proportionally for 5–10 min |
|
|
130
|
+
|
|
131
|
+
For a 10-minute film, add 1–2 scenes per act. For a 5-minute film, trim 1 scene per act.
|
|
132
|
+
|
|
133
|
+
### Visual direction prompts
|
|
134
|
+
|
|
135
|
+
Every image in a short film needs cinematic shot direction. The `src:auto prompt:"..."` must include:
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
prompt:"[SHOT TYPE] of [SUBJECT], [ACTION/COMPOSITION], [LIGHTING/MOOD], [CAMERA MOVEMENT], [COLOR PALETTE], cinematic, film still, 4K"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
| Element | Options |
|
|
142
|
+
|---|---|
|
|
143
|
+
| Shot type | wide shot, medium shot, close-up, extreme close-up, over-the-shoulder, POV, two-shot, establishing shot, aerial shot, Dutch angle |
|
|
144
|
+
| Camera movement | static, slow push-in, slow pull-out, tracking left, pan right, handheld, dolly zoom, crane up |
|
|
145
|
+
| Lighting | golden hour, moonlight, harsh noon sun, soft window light, neon glow, candlelight, low-key, high-key, chiaroscuro, silhouette |
|
|
146
|
+
| Color palette | warm tones, cool blues, desaturated, monochrome, teal and orange, sepia, high contrast |
|
|
147
|
+
| Mood | melancholic, tense, serene, foreboding, intimate, lonely, hopeful |
|
|
148
|
+
|
|
149
|
+
Example:
|
|
150
|
+
```markdown
|
|
151
|
+
- image src:auto
|
|
152
|
+
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"
|
|
153
|
+
duration:12 effect:fadeIn
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Camera effects
|
|
157
|
+
|
|
158
|
+
| markcut effect | Cinematic equivalent |
|
|
159
|
+
|---|---|
|
|
160
|
+
| `effect:fadeIn` | Dissolve in (soft scene open) |
|
|
161
|
+
| `effect:zoomIn` | Slow push-in (building tension) |
|
|
162
|
+
| `effect:zoomOut` | Slow pull-out (revealing context) |
|
|
163
|
+
| `effect:fadeIn` with long duration | Dissolve (gentle scene transition) |
|
|
164
|
+
| `transition:fade(1.0)` | Fade to black (act break, passage of time) |
|
|
165
|
+
|
|
166
|
+
### Transitions between scenes
|
|
167
|
+
|
|
168
|
+
Use the root-level `transition:` for standard scene-to-scene:
|
|
169
|
+
```markdown
|
|
170
|
+
# video
|
|
171
|
+
...
|
|
172
|
+
transition:fade(0.5)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
For specific narrative transitions, use a dedicated transition scene:
|
|
176
|
+
```markdown
|
|
177
|
+
### Transition — Fade to Black
|
|
178
|
+
layout:parallel
|
|
179
|
+
- image src:auto prompt:"black frame" duration:2 effect:fadeIn
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Or use a metaphorical transition:
|
|
183
|
+
```markdown
|
|
184
|
+
### Transition — The Passing Days
|
|
185
|
+
layout:parallel
|
|
186
|
+
- 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
|
|
187
|
+
- script "Days passed. Weeks. The letter stayed in his pocket."
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## 3. Authoring rules — the cinematic bar
|
|
191
|
+
|
|
192
|
+
### Screenplay structure
|
|
193
|
+
|
|
194
|
+
Every short film needs:
|
|
195
|
+
|
|
196
|
+
1. **A protagonist with a desire**: Someone the audience cares about who wants something. The desire drives the plot.
|
|
197
|
+
2. **An inciting incident**: Something that disrupts the protagonist's ordinary world and forces a choice.
|
|
198
|
+
3. **Rising stakes**: Each scene should make the situation more urgent or meaningful.
|
|
199
|
+
4. **A midpoint shift**: Halfway through, the protagonist stops reacting and starts acting.
|
|
200
|
+
5. **A darkest moment**: Just before the climax, all seems lost.
|
|
201
|
+
6. **A climax**: The peak emotional moment where the protagonist confronts the central conflict.
|
|
202
|
+
7. **A resolution**: The new ordinary — how the protagonist is changed.
|
|
203
|
+
|
|
204
|
+
### Narration / voiceover rules
|
|
205
|
+
|
|
206
|
+
- **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.
|
|
207
|
+
- **VO should be poetic but precise**. Short sentences. Concrete imagery. No exposition dumps.
|
|
208
|
+
- **One VO line per scene** (typically). Each line is 10–30 words. 2.5 words/second pace.
|
|
209
|
+
- **If using dialogue between characters**: Use different TTS voices per character. Mark dialogue with character names in the script:
|
|
210
|
+
```markdown
|
|
211
|
+
- script "JOHN: I never thought I'd see this place again.\nMARIA: None of us did."
|
|
212
|
+
```
|
|
213
|
+
- **First-person** for personal stories. **Third-person** for documentary-style narration.
|
|
214
|
+
|
|
215
|
+
### Visual composition rules
|
|
216
|
+
|
|
217
|
+
- **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.
|
|
218
|
+
- **Variety of shot types**: Don't use the same shot type twice in a row. Alternate wide, medium, close-up.
|
|
219
|
+
- **Lighting as storytelling**: A character in shadow = hiding something. Warm light = safety/memory. Cold light = reality/loss.
|
|
220
|
+
- **Color as meaning**: Cool palette for isolation/alienation. Warm for memory/comfort. Desaturated for despair.
|
|
221
|
+
- **Foreground / background**: Use depth (shallow DOF, objects in foreground) to create cinematic depth.
|
|
222
|
+
|
|
223
|
+
### Sound design
|
|
224
|
+
|
|
225
|
+
Sound is half the experience of a film. Use:
|
|
226
|
+
|
|
227
|
+
1. **Score (BGM)**: Root-level audio, `foreground:true` for ducking during VO:
|
|
228
|
+
```markdown
|
|
229
|
+
- audio isBackground:true foreground:true src:score.mp3 volume:0.12
|
|
230
|
+
```
|
|
231
|
+
2. **Ambient sound**: Diegetic background — rain, wind, traffic, room tone:
|
|
232
|
+
```markdown
|
|
233
|
+
- audio isBackground:true src:rain-ambient.mp3 volume:0.06
|
|
234
|
+
```
|
|
235
|
+
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.
|
|
236
|
+
|
|
237
|
+
### Scene timing rhythm
|
|
238
|
+
|
|
239
|
+
A 7-minute film ≈ 420 seconds. With ~12 scenes:
|
|
240
|
+
- Average scene: 35 seconds
|
|
241
|
+
- Variation is critical: some scenes 10s (impact), some 60s (breathing room)
|
|
242
|
+
- Act 2 is the longest and should have the widest variation
|
|
243
|
+
- Silence / slow scenes feel longer — use them sparingly
|
|
244
|
+
|
|
245
|
+
### Multi-language (variants)
|
|
246
|
+
|
|
247
|
+
- Same `# <lang>` variant block pattern.
|
|
248
|
+
- For translated films: dialogue and VO must preserve the dramatic timing. A line that takes 3s in English should take ~3s in the translation.
|
|
249
|
+
|
|
250
|
+
## 4. Components & styles
|
|
251
|
+
|
|
252
|
+
### Optional: Letterbox / Cinemascope overlay
|
|
253
|
+
|
|
254
|
+
```css
|
|
255
|
+
~~~css stylesheet
|
|
256
|
+
.letterbox {
|
|
257
|
+
position: absolute;
|
|
258
|
+
left: 0; right: 0;
|
|
259
|
+
height: 120px; /* for 2.35:1 on 16:9 canvas */
|
|
260
|
+
background: #000;
|
|
261
|
+
pointer-events: none;
|
|
262
|
+
}
|
|
263
|
+
.letterbox-top { top: 0; }
|
|
264
|
+
.letterbox-bottom { bottom: 0; }
|
|
265
|
+
~~~
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
```markdown
|
|
269
|
+
- component isBackground:true jsx:"<div className='letterbox letterbox-top' />"
|
|
270
|
+
- component isBackground:true jsx:"<div className='letterbox letterbox-bottom' />"
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Optional: Subtitle styling for film
|
|
274
|
+
|
|
275
|
+
```markdown
|
|
276
|
+
# video
|
|
277
|
+
... subtitle:{fontSize:"28px",fontFamily:"'Courier New',monospace",style:"text-align:center;text-shadow:0 2px 8px rgba(0,0,0,.8)"}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Title card component
|
|
281
|
+
|
|
282
|
+
```jsx
|
|
283
|
+
export function TitleCard({ title, subtitle = '' }) {
|
|
284
|
+
return (
|
|
285
|
+
<div style={{
|
|
286
|
+
width: '100%', height: '100%',
|
|
287
|
+
display: 'flex', flexDirection: 'column',
|
|
288
|
+
alignItems: 'center', justifyContent: 'center',
|
|
289
|
+
background: '#0a0a0a',
|
|
290
|
+
fontFamily: "'Georgia', serif",
|
|
291
|
+
}}>
|
|
292
|
+
<div style={{ fontSize: 64, color: '#f5f5f7', letterSpacing: 4, marginBottom: 20, textAlign: 'center', padding: '0 40px' }}>
|
|
293
|
+
{title}
|
|
294
|
+
</div>
|
|
295
|
+
{subtitle && (
|
|
296
|
+
<div style={{ fontSize: 24, color: '#888', fontStyle: 'italic', letterSpacing: 2 }}>
|
|
297
|
+
{subtitle}
|
|
298
|
+
</div>
|
|
299
|
+
)}
|
|
300
|
+
</div>
|
|
301
|
+
)
|
|
302
|
+
}
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Theme knobs
|
|
306
|
+
|
|
307
|
+
| Knob | Default | Effect |
|
|
308
|
+
|---|---|---|
|
|
309
|
+
| Letterbox height | `0` (none) | `120px` for 2.35:1 cinemascope |
|
|
310
|
+
| Subtitle font | `'Courier New', monospace` | Film subtitle aesthetic |
|
|
311
|
+
| Score volume | `0.12` | Music presence in mix |
|
|
312
|
+
| Transition duration | `0.5s` | Scene-to-scene fade speed |
|
|
313
|
+
|
|
314
|
+
## 5. Workflow
|
|
315
|
+
|
|
316
|
+
### Phase 0: Concept
|
|
317
|
+
|
|
318
|
+
1. **Define the story** — Given the concept/logline, develop:
|
|
319
|
+
- Protagonist: who, what do they want, what's in their way
|
|
320
|
+
- Logline expanded into 3-sentence synopsis (beginning, middle, end)
|
|
321
|
+
- Tone and visual references (films, photographers, color palettes)
|
|
322
|
+
- VO/narration approach: first-person or third-person, how much
|
|
323
|
+
|
|
324
|
+
### Phase 1: Screenplay
|
|
325
|
+
|
|
326
|
+
2. **Write the screenplay** — Fill `prompts/screenplay.md` with the concept. This produces:
|
|
327
|
+
- Three-act structure with scene-by-scene breakdown
|
|
328
|
+
- Per-scene: location, time, shot type, VO/dialogue, mood, duration
|
|
329
|
+
- Visual references for each scene
|
|
330
|
+
|
|
331
|
+
The output is a narrative plan, not a technical markcut document.
|
|
332
|
+
|
|
333
|
+
### Phase 2: Storyboard
|
|
334
|
+
|
|
335
|
+
3. **Develop shot-by-shot** — For each scene from the screenplay, fill `prompts/storyboard.md`:
|
|
336
|
+
- Detailed TTI prompt with shot type, lighting, mood, camera movement, color
|
|
337
|
+
- VO/dialogue text for the scene
|
|
338
|
+
- Duration and effect
|
|
339
|
+
- Sound notes (score, ambient, silence)
|
|
340
|
+
|
|
341
|
+
4. **Generate visuals** — Run ITT CLI for each scene's prompt. Store as `scene-01.jpg`, `scene-02.jpg`, etc. in `.markcut/generated/media/`.
|
|
342
|
+
|
|
343
|
+
### Phase 3: Assemble
|
|
344
|
+
|
|
345
|
+
5. **Assemble film.md** — Write the markcut markdown file using §2 grammar:
|
|
346
|
+
- Root config with TTS voice, optional subtitles
|
|
347
|
+
- BGM/ambient audio at root level
|
|
348
|
+
- Teaser → Act 1 → Act 2 → Act 3 → Epilogue
|
|
349
|
+
- Each scene with cinematic image + VO/dialogue
|
|
350
|
+
- Transitions between acts (fade to black, metaphorical)
|
|
351
|
+
- Title card at start, credits at end
|
|
352
|
+
|
|
353
|
+
6. **Render** — `npx @lalalic/markcut render film.md`. On errors: fix and re-render, max 3 per error.
|
|
354
|
+
|
|
355
|
+
### Phase 4: Review
|
|
356
|
+
|
|
357
|
+
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[]}`.
|
|
358
|
+
|
|
359
|
+
8. **Fix loop** — On FAIL: fill `prompts/fix.md` with findings, edit, re-render, re-review. Max 3 iterations, then escalate.
|
|
360
|
+
|
|
361
|
+
## 6. Quality gate — exit criteria
|
|
362
|
+
|
|
363
|
+
Done only when ALL hold:
|
|
364
|
+
|
|
365
|
+
- [ ] reviewer verdict = `PASS` (zero blocker/major findings)
|
|
366
|
+
- [ ] total duration within ±15% of target
|
|
367
|
+
- [ ] structure matches §2 (teaser → act 1 → act 2 → act 3 → epilogue)
|
|
368
|
+
- [ ] protagonist has a clear desire, inciting incident is present, stakes rise through the film
|
|
369
|
+
- [ ] voiceover is minimal — the story is told through images first, VO second
|
|
370
|
+
- [ ] at least 2 shot type transitions in every 3 consecutive scenes (not all wide, not all close-up)
|
|
371
|
+
- [ ] lighting/mood is intentional and consistent within scenes (spot-check 3: does the image match the described tone?)
|
|
372
|
+
- [ ] no blank/black frames; all `src:auto` images rendered with cinematic quality
|
|
373
|
+
- [ ] STT transcript matches script lines (≥85% content match)
|
|
374
|
+
- [ ] BGM (if present) ducked under VO, volume 0.08–0.15
|
|
375
|
+
- [ ] ambient sound (if present) present at low volume (≤0.06)
|
|
376
|
+
- [ ] scene duration variation: at least 2 scenes under 15s AND at least 2 scenes over 40s
|
|
377
|
+
- [ ] transitions between acts are marked (fade to black, transition scene, or clear narrative break)
|
|
378
|
+
- [ ] audio is not uniformly present — at least one moment of silence or near-silence (≤3s of quiet) for dramatic effect
|
|
379
|
+
- [ ] visual prompts include shot type, camera movement, lighting, and color palette (spot-check 3)
|
|
380
|
+
|
|
381
|
+
## 7. Reference
|
|
382
|
+
|
|
383
|
+
- Golden example: See `tests/fixtures/templates/courseware.md` for the template format.
|
|
384
|
+
- Screenplay structure: Save the Cat (Blake Snyder) or The Hero's Journey (Joseph Campbell) for scene-by-scene planning.
|
|
385
|
+
- Shot types: See §2 visual direction prompts for the full taxonomy of cinematic shots.
|
|
386
|
+
- Sound design principle: For every minute of film, have at least 5 seconds of silence or near-silence.
|
|
387
|
+
- Effect reference: `fadeIn` (dissolve), `zoomIn` (push-in), `zoomOut` (pull-out), `transition:fade(T)` (scene transition).
|
|
@@ -0,0 +1,115 @@
|
|
|
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
|
+
```
|
|
@@ -0,0 +1,29 @@
|
|
|
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.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Prompt: Screenplay — Three-Act Structure
|
|
2
|
+
|
|
3
|
+
> Fill every `{placeholder}`, then execute in your own context.
|
|
4
|
+
> Produces a scene-by-scene narrative plan with character arc, shot suggestions, and VO lines.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are writing a {duration_min}-minute {film_type} short film in a {tone} tone.
|
|
9
|
+
|
|
10
|
+
Concept: **{concept}**
|
|
11
|
+
|
|
12
|
+
Source material: {source_material}
|
|
13
|
+
Language: {language}
|
|
14
|
+
Voice(s): {voices}
|
|
15
|
+
|
|
16
|
+
## Requirements
|
|
17
|
+
|
|
18
|
+
### Three-act structure
|
|
19
|
+
|
|
20
|
+
| Act | Function | Duration | Scenes |
|
|
21
|
+
|---|---|---|---|
|
|
22
|
+
| Teaser | Mood establisher, no context | 30–90s | 1 |
|
|
23
|
+
| Act 1 — Setup | Character, world, inciting incident | 90s–2min | 3 |
|
|
24
|
+
| Act 2 — Confrontation | Rising action, midpoint, darkest moment | 3–5min | 4–5 |
|
|
25
|
+
| Act 3 — Resolution | Climax, falling action, resolution | 90s–2min | 3 |
|
|
26
|
+
| Epilogue | Emotional close | 30–60s | 1 |
|
|
27
|
+
|
|
28
|
+
### Protagonist rules
|
|
29
|
+
- The protagonist must have a **desire** that drives the plot.
|
|
30
|
+
- The **inciting incident** must happen by the end of Act 1.
|
|
31
|
+
- The **midpoint** in Act 2 must shift the protagonist from reacting to acting.
|
|
32
|
+
- The **darkest moment** must occur just before the climax.
|
|
33
|
+
- The **climax** is where the protagonist confronts the central conflict — emotionally, not necessarily physically.
|
|
34
|
+
- The **resolution** shows the new ordinary — how the protagonist has changed.
|
|
35
|
+
|
|
36
|
+
### Scene format
|
|
37
|
+
For each scene, provide:
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
### Act X.Y — Scene Title (INT/EXT. LOCATION - TIME)
|
|
41
|
+
- Shot type: <wide/medium/close-up/POV/etc>
|
|
42
|
+
- Camera movement: <static/push-in/handheld/etc>
|
|
43
|
+
- Lighting: <golden hour/moonlight/neon/etc>
|
|
44
|
+
- Mood: <one word>
|
|
45
|
+
- Color palette: <cool/warm/desaturated/etc>
|
|
46
|
+
- Visual prompt: <one-sentence TTI prompt with shot, subject, lighting, mood>
|
|
47
|
+
- VO/Dialogue: <narration line or character dialogue>
|
|
48
|
+
- Duration: <seconds>
|
|
49
|
+
- Sound: <score/ambient/silence>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### VO rules
|
|
53
|
+
- VO is minimal. The story is told through images.
|
|
54
|
+
- One VO line per scene (max two). Each 10–30 words.
|
|
55
|
+
- For dialogue, mark speaker: "JOHN: I never thought..."
|
|
56
|
+
- No exposition dumps. Show, don't tell.
|
|
57
|
+
|
|
58
|
+
## Output format
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Title: <title>
|
|
62
|
+
|
|
63
|
+
Logline: <one sentence>
|
|
64
|
+
|
|
65
|
+
### Synopsis (3 sentences)
|
|
66
|
+
1. <Beginning>
|
|
67
|
+
2. <Middle>
|
|
68
|
+
3. <End>
|
|
69
|
+
|
|
70
|
+
### Teaser
|
|
71
|
+
- Scene: <description>
|
|
72
|
+
- Visual: <prompt>
|
|
73
|
+
- VO: <line>
|
|
74
|
+
- Duration: <s>
|
|
75
|
+
|
|
76
|
+
### Act 1 — <title>
|
|
77
|
+
|
|
78
|
+
#### Scene 1.1 — <name> (<location>)
|
|
79
|
+
- Shot: <type>
|
|
80
|
+
- Camera: <movement>
|
|
81
|
+
- Lighting: <description>
|
|
82
|
+
- Color: <palette>
|
|
83
|
+
- Visual: <prompt>
|
|
84
|
+
- VO: <line>
|
|
85
|
+
- Duration: <s>
|
|
86
|
+
- Sound: <note>
|
|
87
|
+
|
|
88
|
+
#### Scene 1.2 ...
|
|
89
|
+
...
|
|
90
|
+
|
|
91
|
+
### Act 2 ...
|
|
92
|
+
|
|
93
|
+
### Act 3 ...
|
|
94
|
+
|
|
95
|
+
### Epilogue
|
|
96
|
+
- Visual: <prompt>
|
|
97
|
+
- VO: <line>
|
|
98
|
+
- Duration: <s>
|
|
99
|
+
|
|
100
|
+
Total estimated duration: <sum>
|
|
101
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Prompt: Scene → Markcut Shot
|
|
2
|
+
|
|
3
|
+
> Fill every `{placeholder}`, then execute in your own context.
|
|
4
|
+
> Run once per scene from the screenplay. Produces the exact markcut markdown for ONE scene.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are turning one scene of a {tone} short film into markcut markdown.
|
|
9
|
+
|
|
10
|
+
Film: {film_title}
|
|
11
|
+
Scene from screenplay:
|
|
12
|
+
|
|
13
|
+
{screenplay_scene}
|
|
14
|
+
|
|
15
|
+
## Rules
|
|
16
|
+
|
|
17
|
+
### Visual prompt
|
|
18
|
+
Write a detailed TTI prompt with ALL of these elements:
|
|
19
|
+
1. **Shot type**: wide, medium, close-up, POV, over-the-shoulder, Dutch angle, establishing
|
|
20
|
+
2. **Subject**: who or what is in the frame, what are they doing, what emotion
|
|
21
|
+
3. **Composition**: where is the subject in the frame, foreground/background
|
|
22
|
+
4. **Lighting**: specific light source and quality
|
|
23
|
+
5. **Camera movement**: static, push-in, handheld, tracking, pan, tilt
|
|
24
|
+
6. **Color palette**: warm, cool, desaturated, high contrast, etc.
|
|
25
|
+
7. **Mood**: one word or short phrase
|
|
26
|
+
8. **End with**: ", cinematic, film still, 4K, highly detailed"
|
|
27
|
+
|
|
28
|
+
### Narration / dialogue
|
|
29
|
+
- One `- script "..."` node containing the VO or dialogue line.
|
|
30
|
+
- For dialogue: `"CHARACTER: line"`
|
|
31
|
+
- Match the exact text from the screenplay.
|
|
32
|
+
|
|
33
|
+
### Duration
|
|
34
|
+
Match the screenplay's specified duration ±2s. Adjust if the VO line is longer/shorter.
|
|
35
|
+
|
|
36
|
+
### Effect
|
|
37
|
+
- `effect:fadeIn` for soft opens
|
|
38
|
+
- `effect:zoomIn` for dramatic reveals or tension building
|
|
39
|
+
- `effect:zoomOut` for reveals of context
|
|
40
|
+
- No effect for static, contemplative scenes
|
|
41
|
+
|
|
42
|
+
### Sound note (optional)
|
|
43
|
+
Add a comment in the script or a separate note about sound design for this scene.
|
|
44
|
+
|
|
45
|
+
## Output format for ONE scene
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
### <Act>.<Scene> — <Title> (<Location>)
|
|
49
|
+
layout:parallel
|
|
50
|
+
- image src:auto
|
|
51
|
+
prompt:"<SHOT TYPE> of <SUBJECT>, <COMPOSITION>, <LIGHTING>, <CAMERA MOVEMENT>, <COLOR>, <MOOD>, cinematic, film still, 4K"
|
|
52
|
+
duration:<s> effect:<effect>
|
|
53
|
+
- script "<VO or dialogue>" duration:<s>
|
|
54
|
+
```
|