@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,355 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-dive
|
|
3
|
+
description: 深度解读 — turn a complex topic, problem, or phenomenon into a thorough video-essay style analysis with evidence, multiple perspectives, citations, and synthesis.
|
|
4
|
+
when-to-use: video essays, investigative deep dives, philosophical explorations, science explainers, cultural criticism, political analysis — 3-20 minute long-form analytical content
|
|
5
|
+
engine: "@lalalic/markcut — run via `npx @lalalic/markcut`"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Deep Dive (深度解读) 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
|
+
Topic[📥 Topic / Problem / Phenomenon] --> Research[🔍 researcher agent<br/>evidence + sources]
|
|
15
|
+
Research --> Outline[📝 outline.md<br/>narrative arc]
|
|
16
|
+
Outline --> Script[✍️ script.md<br/>scene-by-scene]
|
|
17
|
+
Script --> Storyboard[📄 deep-dive.md]
|
|
18
|
+
BGM["🎵 BGM (optional)"] --> Storyboard
|
|
19
|
+
Media["🖼️ src:auto / archival / citations"] --> Storyboard
|
|
20
|
+
Storyboard --> Render[🎬 npx markcut render]
|
|
21
|
+
Render --> MP4[📺 final.mp4]
|
|
22
|
+
MP4 --> Reviewer[🔍 reviewer agent]
|
|
23
|
+
Reviewer -->|FAIL| Fix[🔧 fix]
|
|
24
|
+
Fix --> Storyboard
|
|
25
|
+
Reviewer -->|PASS| Done[✅ Done]
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
| Path | Runs in | Purpose |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `TEMPLATE.md` | your context | everything |
|
|
31
|
+
| `prompts/*.md` | your context | fill-in prompts you execute |
|
|
32
|
+
| `agents/*.md` | separate session | subagent definitions |
|
|
33
|
+
|
|
34
|
+
## 0. Prerequisites
|
|
35
|
+
|
|
36
|
+
- `npx @lalalic/markcut` runnable
|
|
37
|
+
- TTS CLI (default: `edge-tts`)
|
|
38
|
+
- `ffmpeg`/`ffprobe` on PATH
|
|
39
|
+
- Web search capability (for research phase)
|
|
40
|
+
- ITT/TTV CLI (for `src:auto` visuals) — optional but recommended
|
|
41
|
+
- For reviewer: image-understanding capability, STT CLI
|
|
42
|
+
|
|
43
|
+
## 1. Inputs — collect before starting
|
|
44
|
+
|
|
45
|
+
| Input | Required | Default | Notes |
|
|
46
|
+
|---|---|---|---|
|
|
47
|
+
| Topic / problem / phenomenon | **yes** | — | what to analyze. Can be a question ("Why do democracies fail?"), a phenomenon ("The rise of remote work"), a problem ("Plastic pollution"), or a cultural object ("Oppenheimer") |
|
|
48
|
+
| Source material | no | — | optional: article URL, book title, research paper, documentary to reference |
|
|
49
|
+
| Language | no | en | narration language |
|
|
50
|
+
| Tone | no | `analytical` | `analytical` (neutral, evidence-driven), `opinionated` (strong thesis, persuasive), `philosophical` (open-ended, reflective), `investigative` (detective-like, reveals) |
|
|
51
|
+
| Target duration | no | 8 min | 3–20 min. Longer formats need deeper scene breakdown |
|
|
52
|
+
| Depth | no | `moderate` | `overview` (surface-level, broad), `moderate` (some depth, 3-5 angles), `deep` (thorough, 5-10 angles, academic-level) |
|
|
53
|
+
| Voice | no | en: `en-US-GuyNeural` | edge-tts voice per language |
|
|
54
|
+
| BGM style | no | `ambient` | background music mood. Optional — deep dives can work without BGM |
|
|
55
|
+
|
|
56
|
+
**Core rule: Every factual claim must be supported by a source.** If you cannot find a source for a claim, either qualify it ("some argue that...", "it's believed that...") or remove it. Cite sources on screen (see §3).
|
|
57
|
+
|
|
58
|
+
## 2. Scene grammar — narrative architecture
|
|
59
|
+
|
|
60
|
+
### The deep dive arc
|
|
61
|
+
|
|
62
|
+
A deep dive is not a lecture and not a highlight reel — it's a **narrative journey** through a topic. The canonical arc:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
# video ← root: width:1920 height:1080 fps:30 layout:series
|
|
66
|
+
│ subtitle:{fontSize:"24px"} tts:"<edge-tts CLI>"
|
|
67
|
+
│ transition:fade(0.5)
|
|
68
|
+
├── ## Hook ← 15–30s. The question, the contradiction, the mystery
|
|
69
|
+
├── ## Context ← 30–60s. Background the audience needs
|
|
70
|
+
├── ## Thesis ← 15–30s. Your central argument / framing
|
|
71
|
+
├── ## Angle 1 ← 1–3 min. First perspective / evidence block
|
|
72
|
+
│ │ (may contain multiple sub-scenes)
|
|
73
|
+
│ ├── {scene} ← Claim → Evidence → Source → Analysis
|
|
74
|
+
│ ├── {scene} ← Repeat for each sub-point
|
|
75
|
+
│ └── ...
|
|
76
|
+
├── ## Angle 2 ← 1–3 min. Second perspective
|
|
77
|
+
├── ## Angle 3 ← 1–3 min. (optional, depth-dependent)
|
|
78
|
+
├── ## Counterpoint ← 30–60s. The opposing view (fairly stated)
|
|
79
|
+
├── ## Rebuttal / Synthesis ← 30–60s. Why the counterpoint doesn't fully hold, or synthesis
|
|
80
|
+
└── ## Conclusion ← 30–60s. Restate thesis, broader implication, call to reflection
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Scene timing template
|
|
84
|
+
|
|
85
|
+
| Section | Duration | Purpose |
|
|
86
|
+
|---|---|---|
|
|
87
|
+
| Hook | 15–30s | Arresting question, contradiction, or provocative claim. No context yet. |
|
|
88
|
+
| Context | 30–60s | Background: history, definitions, prior work. What the audience MUST know. |
|
|
89
|
+
| Thesis | 15–30s | Clear statement of your argument/framing. "I argue that..." |
|
|
90
|
+
| Angle×N | 1–3 min each | Evidence blocks. Each angle = one perspective or dimension of the topic |
|
|
91
|
+
| Counterpoint | 30–60s | Fair presentation of the strongest opposing view |
|
|
92
|
+
| Synthesis | 30–60s | Why the evidence points your way, or a nuanced middle ground |
|
|
93
|
+
| Conclusion | 30–60s | Broader implication, call to reflection, closing thought |
|
|
94
|
+
|
|
95
|
+
### Scene types (within sections)
|
|
96
|
+
|
|
97
|
+
Each section contains 1–5 scenes. A scene is one of these types:
|
|
98
|
+
|
|
99
|
+
**Claim scene** — A point is stated, then supported:
|
|
100
|
+
```
|
|
101
|
+
## Main Idea
|
|
102
|
+
layout:parallel
|
|
103
|
+
- image src:auto prompt:"<metaphorical or illustrative visual>" duration:10
|
|
104
|
+
- subtitle src:"<the claim — one clear sentence>" duration:10 type:Fade
|
|
105
|
+
- script "<narration expanding the claim, citing sources>"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Evidence scene** — Data, quote, or case study:
|
|
109
|
+
```
|
|
110
|
+
## The Data
|
|
111
|
+
layout:parallel
|
|
112
|
+
- image src:auto prompt:"<visual related to the data>" duration:8
|
|
113
|
+
- subtitle src:"<key statistic or quote>" duration:8 type:Typewriter
|
|
114
|
+
style:"fontSize:36px;color:#ffd700"
|
|
115
|
+
- script "<narration explaining what this evidence means>"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Source citation scene** — Attribution overlay:
|
|
119
|
+
```
|
|
120
|
+
## Source
|
|
121
|
+
layout:parallel
|
|
122
|
+
- image src:auto prompt:"<academic or documentary feel>" duration:4
|
|
123
|
+
- subtitle src:"— Smith (2023), Journal of Political Science" duration:4 type:Fade
|
|
124
|
+
style:"fontSize:20px;color:#aaa;fontStyle:italic"
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**Comparison scene** — Two-column or before/after:
|
|
128
|
+
```
|
|
129
|
+
## Two Views
|
|
130
|
+
layout:parallel
|
|
131
|
+
- component isBackground:true jsx:"<SplitComparison left='View A' right='View B' />"
|
|
132
|
+
- script "<narration comparing the two perspectives>"
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Transition scene** — Brief pause, signaling a shift:
|
|
136
|
+
```
|
|
137
|
+
## Shifting Gears
|
|
138
|
+
layout:parallel
|
|
139
|
+
- image src:auto prompt:"<transition visual — doorway, turning page>" duration:3
|
|
140
|
+
- subtitle src:"But there's another way to look at this..." duration:3 type:Fade
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Scene count guide
|
|
144
|
+
|
|
145
|
+
| Depth | Sections | Total scenes | Duration |
|
|
146
|
+
|---|---|---|---|
|
|
147
|
+
| overview | Hook + Context + Thesis + 2 angles + Counterpoint + Synthesis + Conclusion | 10–18 | 3–5 min |
|
|
148
|
+
| moderate | Hook + Context + Thesis + 3 angles + Counterpoint + Synthesis + Conclusion | 15–28 | 5–10 min |
|
|
149
|
+
| deep | Hook + Context + Thesis + 4–6 angles + Counterpoint + Rebuttal + Synthesis + Conclusion | 25–50 | 10–20 min |
|
|
150
|
+
|
|
151
|
+
### Visual style for each tone
|
|
152
|
+
|
|
153
|
+
| Tone | Visual approach | Pacing | Music |
|
|
154
|
+
|---|---|---|---|
|
|
155
|
+
| analytical | clean diagrams, data viz, archival footage, minimal text | steady, 10–30s per scene | ambient, subtle |
|
|
156
|
+
| opinionated | bold text overlays, dramatic imagery, reaction clips | dynamic, 5–15s per scene | building, persuasive |
|
|
157
|
+
| philosophical | nature visuals, slow pans, negative space, poetic imagery | slow, 15–40s per scene | sparse or none |
|
|
158
|
+
| investigative | document-style, maps, photos, timeline graphics, evidence close-ups | varied, 8–25s per scene | tense, mysterious |
|
|
159
|
+
|
|
160
|
+
## 3. Authoring rules — the analytical bar
|
|
161
|
+
|
|
162
|
+
### Research quality (see `prompts/outline.md` and `agents/researcher.md`)
|
|
163
|
+
|
|
164
|
+
Every deep dive is built on evidence. Before writing any scene:
|
|
165
|
+
1. **Research the topic** thoroughly using web search. Find: key facts, statistics, expert quotes, opposing views, historical context.
|
|
166
|
+
2. **For each factual claim**, note the source (URL, book title with page, paper with DOI). If no source exists for a claim, either remove it or soften it ("some suggest...").
|
|
167
|
+
3. **Present counterpoints fairly**: the "steel man" version of opposing views, not a straw man. If you can't steel-man an opposing view, acknowledge the uncertainty.
|
|
168
|
+
4. **Multiple perspectives** are the heart of a deep dive. A monological "this is correct" piece is a lecture, not a deep dive. Always include at least one counterpoint.
|
|
169
|
+
|
|
170
|
+
### Narration script
|
|
171
|
+
|
|
172
|
+
- **Conversational but precise**: Write for the ear, but don't sacrifice accuracy. Use everyday language for complex ideas.
|
|
173
|
+
- **Pacing**: 2.5–3 words/second. A 30s scene ≈ 75–90 words.
|
|
174
|
+
- **Scene-level hook**: Every scene should have a mini-hook in its first sentence — why should the viewer keep watching through this scene?
|
|
175
|
+
- **Transitions**: End each scene/section with a hook into the next ("But that's only half the story...").
|
|
176
|
+
- **No filler**: No "as we can see," "it's important to note that," "in order to understand X we must first..." — cut these.
|
|
177
|
+
- **Citations in narration**: "According to a 2023 study in Nature..." not "A study said..."
|
|
178
|
+
|
|
179
|
+
### On-screen citations
|
|
180
|
+
|
|
181
|
+
Every time you cite a source in narration, add a brief citation scene or overlay:
|
|
182
|
+
```markdown
|
|
183
|
+
## Source
|
|
184
|
+
layout:parallel
|
|
185
|
+
- image src:auto prompt:"<related visual>" duration:4
|
|
186
|
+
- subtitle src:"— Smith (2023), Journal of Political Science" duration:4 type:Fade
|
|
187
|
+
style:"fontSize:20px;color:#888;fontStyle:italic"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
For dense deep dives, use root-level citation slides between sections rather than per-claim — but the narration must still name the source.
|
|
191
|
+
|
|
192
|
+
### Subtitle / text overlay rules
|
|
193
|
+
|
|
194
|
+
- **Font size**: 28–48px for main text (smaller than short-video — deep dive viewers read more).
|
|
195
|
+
- **Key claims**: 36–48px, bold, centered.
|
|
196
|
+
- **Citations**: 18–24px, italic, bottom-right or bottom-center, subtle color.
|
|
197
|
+
- **Data / statistics**: 40–56px, prominent, colored (`#ffd700` for emphasis).
|
|
198
|
+
- **Quotes**: 32–40px, with quotation marks, citation below.
|
|
199
|
+
|
|
200
|
+
### Visual rhythm
|
|
201
|
+
|
|
202
|
+
- **Variety is critical**: Don't use the same visual pattern for every scene. Mix: full-screen imagery, split screens, text-only, data visualization, b-roll, talking head.
|
|
203
|
+
- **B-roll relevance**: Every visual should serve the argument. Avoid generic "filler" stock footage. If a concept is abstract, use metaphorical or illustrative visuals that provoke thought.
|
|
204
|
+
- **Scene length variety**: Within a section, mix short scenes (3–5s for impact) with longer ones (15–30s for explanation). A constant rhythm is monotonous.
|
|
205
|
+
|
|
206
|
+
### BGM
|
|
207
|
+
|
|
208
|
+
Optional but recommended. Use `foreground:true` for ducking:
|
|
209
|
+
```markdown
|
|
210
|
+
- audio isBackground:true foreground:true src:bgm.mp3 volume:0.08
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Volume lower than other formats (0.05–0.10) — deep dive TTS clarity is paramount. For philosophical or heavy topics, consider no BGM at all (silence can be powerful).
|
|
214
|
+
|
|
215
|
+
### Multi-language (variants)
|
|
216
|
+
|
|
217
|
+
- Same `# <lang>` variant block pattern as courseware.
|
|
218
|
+
- For bilingual deep dives, ensure both translations match in nuance — translation errors in analytical content are serious.
|
|
219
|
+
|
|
220
|
+
## 4. Components & styles
|
|
221
|
+
|
|
222
|
+
### Optional: Comparison / Split-screen component
|
|
223
|
+
|
|
224
|
+
When comparing two ideas, images, or perspectives:
|
|
225
|
+
|
|
226
|
+
```jsx
|
|
227
|
+
export function SplitComparison({ left, right, leftLabel = '', rightLabel = '' }) {
|
|
228
|
+
return (
|
|
229
|
+
<div style={{
|
|
230
|
+
display: 'flex', width: '100%', height: '100%',
|
|
231
|
+
position: 'absolute', inset: 0,
|
|
232
|
+
}}>
|
|
233
|
+
<div style={{
|
|
234
|
+
flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
235
|
+
background: 'linear-gradient(135deg, #1a1a2e 0%, #16213e 100%)',
|
|
236
|
+
fontSize: 36, color: '#e0e0e6', padding: 40, textAlign: 'center',
|
|
237
|
+
flexDirection: 'column', gap: 12,
|
|
238
|
+
}}>
|
|
239
|
+
{left}
|
|
240
|
+
{leftLabel && <span style={{ fontSize: 18, color: '#888', marginTop: 8 }}>{leftLabel}</span>}
|
|
241
|
+
</div>
|
|
242
|
+
<div style={{
|
|
243
|
+
width: 2, background: 'rgba(255,255,255,.1)',
|
|
244
|
+
}} />
|
|
245
|
+
<div style={{
|
|
246
|
+
flex: 1, display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
247
|
+
background: 'linear-gradient(135deg, #16213e 0%, #0f3460 100%)',
|
|
248
|
+
fontSize: 36, color: '#f5f5f7', padding: 40, textAlign: 'center',
|
|
249
|
+
flexDirection: 'column', gap: 12,
|
|
250
|
+
}}>
|
|
251
|
+
{right}
|
|
252
|
+
{rightLabel && <span style={{ fontSize: 18, color: '#888', marginTop: 8 }}>{rightLabel}</span>}
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
)
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Stylesheet (optional)
|
|
260
|
+
|
|
261
|
+
If you want a consistent overlay style for citations and footnotes:
|
|
262
|
+
```css
|
|
263
|
+
~~~css stylesheet
|
|
264
|
+
.citation {
|
|
265
|
+
font-size: 20px;
|
|
266
|
+
color: #888;
|
|
267
|
+
font-style: italic;
|
|
268
|
+
text-align: right;
|
|
269
|
+
position: absolute;
|
|
270
|
+
bottom: 40px;
|
|
271
|
+
right: 40px;
|
|
272
|
+
}
|
|
273
|
+
.stat {
|
|
274
|
+
font-size: 52px;
|
|
275
|
+
color: #ffd700;
|
|
276
|
+
font-weight: 800;
|
|
277
|
+
text-align: center;
|
|
278
|
+
}
|
|
279
|
+
.quote-text {
|
|
280
|
+
font-size: 38px;
|
|
281
|
+
color: #f5f5f7;
|
|
282
|
+
font-style: italic;
|
|
283
|
+
text-align: center;
|
|
284
|
+
padding: 0 60px;
|
|
285
|
+
line-height: 1.5;
|
|
286
|
+
}
|
|
287
|
+
~~~
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## 5. Workflow
|
|
291
|
+
|
|
292
|
+
### Phase 0: Research
|
|
293
|
+
|
|
294
|
+
1. **Understand the topic** — Read the topic/source material. Identify:
|
|
295
|
+
- Core question or problem
|
|
296
|
+
- Key dimensions / angles
|
|
297
|
+
- Known facts vs contested areas
|
|
298
|
+
- Potential sources and evidence
|
|
299
|
+
|
|
300
|
+
2. **Research** — Fill `prompts/outline.md` with the topic. This produces:
|
|
301
|
+
- Research summary with key facts, sources, statistics
|
|
302
|
+
- Narrative arc: hook angle → angles → counterpoint → synthesis
|
|
303
|
+
- Evidence map: what supports each point
|
|
304
|
+
|
|
305
|
+
**Alternative (deeper)**: Run `agents/researcher.md` in a separate session. It returns a structured research document with sources for every claim.
|
|
306
|
+
|
|
307
|
+
3. **Review research**: Every factual claim must have a source. If sources are weak, note uncertainty in the narration.
|
|
308
|
+
|
|
309
|
+
### Phase 1: Outline
|
|
310
|
+
|
|
311
|
+
4. **Narrative arc** — Using the research, write the scene outline: sections, scene types, key claims, and evidence per scene. Use `prompts/script.md` or write directly.
|
|
312
|
+
|
|
313
|
+
### Phase 2: Storyboard
|
|
314
|
+
|
|
315
|
+
5. **Write scenes** — For each section in the outline, write the markcut markdown:
|
|
316
|
+
- Choose scene types (claim, evidence, source, comparison, transition)
|
|
317
|
+
- Write narration (conversational but precise, sourced)
|
|
318
|
+
- Add on-screen citations for every source
|
|
319
|
+
- Choose visuals (`src:auto` prompts or archival imagery)
|
|
320
|
+
- Add effects for transitions between scenes
|
|
321
|
+
|
|
322
|
+
6. **Assemble deep-dive.md** — Compile all sections into a single markcut file following §2 grammar. Root config includes TTS voice and subtitle defaults. Add optional BGM.
|
|
323
|
+
|
|
324
|
+
### Phase 3: Render & Review
|
|
325
|
+
|
|
326
|
+
7. **Render** — `npx @lalalic/markcut render deep-dive.md`. On errors: fix and re-render, max 3 per error.
|
|
327
|
+
|
|
328
|
+
8. **Review (quality gate)** — Run `agents/reviewer.md` in a fresh separate session. Pass: `deep-dive.md`, rendered MP4, `TEMPLATE.md`, target duration, language, tone, depth. Returns `{verdict, findings[]}`.
|
|
329
|
+
|
|
330
|
+
9. **Fix loop** — On FAIL: fill `prompts/fix.md` with findings, edit, re-render, re-review. Max 3 iterations, then escalate.
|
|
331
|
+
|
|
332
|
+
## 6. Quality gate — exit criteria
|
|
333
|
+
|
|
334
|
+
Done only when ALL hold:
|
|
335
|
+
|
|
336
|
+
- [ ] reviewer verdict = `PASS` (zero blocker/major findings)
|
|
337
|
+
- [ ] total duration within ±15% of target
|
|
338
|
+
- [ ] structure matches §2 arc (hook → context → thesis → angles×N → counterpoint → synthesis → conclusion)
|
|
339
|
+
- [ ] hook is engaging (question, contradiction, or provocative claim — not a bland introduction)
|
|
340
|
+
- [ ] at least one counterpoint presented fairly (steel-manned, not straw-manned)
|
|
341
|
+
- [ ] every factual claim in narration is sourced (spot-check 5 claims: each has a citation scene or in-narration attribution)
|
|
342
|
+
- [ ] no fabricated sources, quotes, statistics, or studies
|
|
343
|
+
- [ ] no blank/black frames; visuals are relevant (not generic filler)
|
|
344
|
+
- [ ] STT transcript matches script lines (≥85% content match)
|
|
345
|
+
- [ ] scene types are varied (not all claim scenes — mix of evidence, citation, transition, comparison)
|
|
346
|
+
- [ ] BGM (if present) ducked under voice, volume ≤0.10
|
|
347
|
+
- [ ] tone matches chosen style (analytical/opinionated/philosophical/investigative)
|
|
348
|
+
- [ ] total scenes and section count appropriate for depth level (see §2 table)
|
|
349
|
+
|
|
350
|
+
## 7. Reference
|
|
351
|
+
|
|
352
|
+
- Golden example: See `tests/fixtures/templates/courseware.md` for the template format.
|
|
353
|
+
- For comparison scenes: use the `SplitComparison` component from §4.
|
|
354
|
+
- For citation formatting: follow APA/MLA style adapted for on-screen readability.
|
|
355
|
+
- Effect reference: `fadeIn`, `zoomIn`, `slideInLeft`, `slideInRight` for scene transitions.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-dive-researcher
|
|
3
|
+
description: Research a topic thoroughly for a deep-dive video essay. Returns structured evidence with sources for every claim. Runs in a separate session with web search capability.
|
|
4
|
+
context: fresh
|
|
5
|
+
mode: read-only
|
|
6
|
+
tools: web search, read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# System prompt
|
|
10
|
+
|
|
11
|
+
You are a research assistant for a video essay. Your job is to find **evidence** for every dimension of a topic. You are neutral — you present facts and sources, not opinions.
|
|
12
|
+
|
|
13
|
+
## Task
|
|
14
|
+
|
|
15
|
+
Given a topic and optional source material, research thoroughly:
|
|
16
|
+
|
|
17
|
+
1. **Core facts** — what is definitively known? Include sources (URLs) for each.
|
|
18
|
+
2. **Key statistics** — notable numbers with their sources.
|
|
19
|
+
3. **Expert opinions** — notable people and their positions, with attributions.
|
|
20
|
+
4. **Historical timeline** — key events, discoveries, or turning points.
|
|
21
|
+
5. **Debates / controversies** — what are the main disagreements? Who holds each view? What evidence does each side cite?
|
|
22
|
+
6. **Current state** — latest developments, recent research, ongoing debates.
|
|
23
|
+
7. **Broader implications** — why this matters beyond the topic itself.
|
|
24
|
+
|
|
25
|
+
For every factual claim, provide a source URL. If you cannot find a source, mark it as `[unverified]`.
|
|
26
|
+
|
|
27
|
+
## Output format
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"topic": "...",
|
|
32
|
+
"research_date": "...",
|
|
33
|
+
"summary": "2-3 sentence overview of findings",
|
|
34
|
+
"key_facts": [
|
|
35
|
+
{ "claim": "...", "source": "...", "confidence": "high|medium|low" }
|
|
36
|
+
],
|
|
37
|
+
"key_statistics": [
|
|
38
|
+
{ "stat": "...", "source": "...", "context": "..." }
|
|
39
|
+
],
|
|
40
|
+
"expert_quotes": [
|
|
41
|
+
{ "quote": "...", "attribution": "...", "source": "...", "position": "pro|con|neutral" }
|
|
42
|
+
],
|
|
43
|
+
"timeline": [
|
|
44
|
+
{ "date": "...", "event": "...", "significance": "..." }
|
|
45
|
+
],
|
|
46
|
+
"debates": [
|
|
47
|
+
{
|
|
48
|
+
"question": "...",
|
|
49
|
+
"position_a": { "view": "...", "proponents": ["..."], "evidence": ["..."] },
|
|
50
|
+
"position_b": { "view": "...", "proponents": ["..."], "evidence": ["..."] }
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"current_state": "...",
|
|
54
|
+
"implications": ["..."]
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
# Task template
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
Research the following topic for a {tone} deep-dive video essay.
|
|
62
|
+
|
|
63
|
+
Topic: {topic}
|
|
64
|
+
Source material: {source_material}
|
|
65
|
+
Depth: {depth} (overview | moderate | deep)
|
|
66
|
+
Language: {language}
|
|
67
|
+
|
|
68
|
+
Use web search to find evidence for every dimension listed in your procedure. Return the structured JSON with sources for every claim.
|
|
69
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: deep-dive-reviewer
|
|
3
|
+
description: Read-only quality gate for deep-dive video essays. Checks narrative arc completeness, evidence quality, citation presence, visual variety, and factual integrity.
|
|
4
|
+
context: fresh
|
|
5
|
+
mode: read-only
|
|
6
|
+
tools: read file, bash (ffmpeg/ffprobe, STT CLI), image understanding, web search
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# System prompt
|
|
10
|
+
|
|
11
|
+
You are a strict, evidence-based QA reviewer for analytical video essays (深度解读). You review; you **never edit** any file. Every finding must cite concrete evidence.
|
|
12
|
+
|
|
13
|
+
## Inputs (provided in the task)
|
|
14
|
+
- `deep_dive_md` — absolute path to the generated 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` — analytical | opinionated | philosophical | investigative
|
|
20
|
+
- `depth` — overview | moderate | deep
|
|
21
|
+
|
|
22
|
+
## Procedure
|
|
23
|
+
|
|
24
|
+
### 1. Static review (source vs rulebook)
|
|
25
|
+
|
|
26
|
+
**Narrative arc** (from §2):
|
|
27
|
+
- Hook present as first section (not intro, not title card — a real hook).
|
|
28
|
+
- Context section follows (background the audience needs).
|
|
29
|
+
- Thesis or central framing present.
|
|
30
|
+
- At least 2 angle sections for `overview`, 3 for `moderate`, 4+ for `deep`.
|
|
31
|
+
- Counterpoint section present and fairly stated.
|
|
32
|
+
- Synthesis or conclusion section present.
|
|
33
|
+
- Total scene count matches depth level (see §2 table).
|
|
34
|
+
|
|
35
|
+
**Evidence & citations**:
|
|
36
|
+
- Spot-check 3 scenes with factual claims. Each must have either:
|
|
37
|
+
- An in-narration source mention ("According to a 2023 study..."), OR
|
|
38
|
+
- A dedicated source citation scene/subtitle nearby.
|
|
39
|
+
- If any claim lacks attribution → major finding.
|
|
40
|
+
- If any source appears fabricated (check top-level claim plausibility) → blocker.
|
|
41
|
+
|
|
42
|
+
**Variety**:
|
|
43
|
+
- Are scene types mixed? Not all claim scenes. There should be evidence, citation, comparison, or transition scenes interspersed.
|
|
44
|
+
- Are effects used? At least some scenes have `effect:` (fadeIn, slideInRight, etc.).
|
|
45
|
+
- Visual prompts: are they specific and relevant? Not generic "beautiful landscape".
|
|
46
|
+
|
|
47
|
+
**Counterpoint fairness**:
|
|
48
|
+
- Read the counterpoint section. Is it a real opposing view, or a straw man? If the counterpoint is obviously weak, flag it.
|
|
49
|
+
|
|
50
|
+
**BGM/audio**:
|
|
51
|
+
- If BGM present: `foreground:true` and volume ≤ 0.10.
|
|
52
|
+
|
|
53
|
+
### 2. Dynamic review
|
|
54
|
+
- `ffprobe`: duration, resolution, audio streams.
|
|
55
|
+
- Extract 10 frames evenly spaced. For each:
|
|
56
|
+
- not blank/black
|
|
57
|
+
- has visible content matching the scene type (text for claim scenes, imagery for evidence, etc.)
|
|
58
|
+
- Extract audio → transcribe with STT. Compare against `script` lines. ≥85% match.
|
|
59
|
+
- Spot-check 3 `src:auto` prompts rendered correctly (no broken image icons).
|
|
60
|
+
|
|
61
|
+
### 3. Report
|
|
62
|
+
|
|
63
|
+
Severity: `blocker` (fabricated sources, wrong aspect, blank frames, no hook) · `major` (missing counterpoint, unsourced claims, low variety, no citations, duration >20% off) · `minor` (font size, timing, emoji usage)
|
|
64
|
+
|
|
65
|
+
Output exactly this JSON:
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"verdict": "PASS | FAIL",
|
|
70
|
+
"measured": {
|
|
71
|
+
"duration_s": 0,
|
|
72
|
+
"target_s": 0,
|
|
73
|
+
"resolution": "",
|
|
74
|
+
"stt_match_pct": 0,
|
|
75
|
+
"section_count": 0,
|
|
76
|
+
"scene_count": 0
|
|
77
|
+
},
|
|
78
|
+
"findings": [
|
|
79
|
+
{
|
|
80
|
+
"id": "F1",
|
|
81
|
+
"severity": "blocker | major | minor",
|
|
82
|
+
"scene": "<section name or 'global'>",
|
|
83
|
+
"check": "<which rule>",
|
|
84
|
+
"issue": "<what is wrong>",
|
|
85
|
+
"evidence": "<source line / frame path / STT excerpt>",
|
|
86
|
+
"fix_hint": "<one-line suggestion>"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
`PASS` requires zero `blocker` and zero `major` findings.
|
|
93
|
+
|
|
94
|
+
# Task template
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
Review a deep-dive video essay against its template.
|
|
98
|
+
|
|
99
|
+
deep_dive_md: {deep_dive_md}
|
|
100
|
+
mp4: {mp4}
|
|
101
|
+
template_md: {template_md}
|
|
102
|
+
duration_min: {duration_min}
|
|
103
|
+
language: {language}
|
|
104
|
+
tone: {tone}
|
|
105
|
+
depth: {depth}
|
|
106
|
+
|
|
107
|
+
Follow your procedure. Use whisper-cli (whisper.cpp) for STT if python whisper is unavailable. Save frames under a review directory. Spot-check top-level claims for source plausibility if web search is available. Output the verdict JSON only.
|
|
108
|
+
```
|
|
@@ -0,0 +1,28 @@
|
|
|
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 `{deep_dive_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 findings when trivially fixable.
|
|
15
|
+
- Unsupported factual claim → add a source citation scene or qualify the language ("some argue...").
|
|
16
|
+
- Missing counterpoint → insert a counterpoint section after the last angle, before synthesis.
|
|
17
|
+
- Hook too weak → rewrite hook as a question, contradiction, or provocative claim.
|
|
18
|
+
- Low visual variety → change some scene types (turn a claim scene into an evidence scene, add a transition scene).
|
|
19
|
+
- BGM too loud → reduce volume (0.05–0.08), ensure `foreground:true`.
|
|
20
|
+
- No citations on screen → add citation scenes for sourced claims.
|
|
21
|
+
- Duration off → adjust script word count (target × 2.5–3 w/s).
|
|
22
|
+
|
|
23
|
+
After editing, list what changed:
|
|
24
|
+
```
|
|
25
|
+
- <finding id>: <section> — <one-line description>
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Then re-render and re-review.
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# Prompt: Deep Dive Outline — Research + Narrative Arc
|
|
2
|
+
|
|
3
|
+
> Fill every `{placeholder}`, then execute in your own context.
|
|
4
|
+
> This is the most critical step: research thoroughly, then structure the arc.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are outlining a {depth} {tone} deep-dive video essay on: **{topic}**.
|
|
9
|
+
|
|
10
|
+
Source material: {source_material}
|
|
11
|
+
Language: {language}
|
|
12
|
+
Target duration: {duration_min} minutes
|
|
13
|
+
|
|
14
|
+
## Phase A — Research
|
|
15
|
+
|
|
16
|
+
Use web search to research the topic thoroughly. Find:
|
|
17
|
+
|
|
18
|
+
1. **Key facts** — what is definitively known? Provide sources (URLs) for each.
|
|
19
|
+
2. **Key statistics** — notable numbers with sources.
|
|
20
|
+
3. **Expert quotes** — notable people who have weighed in, with attributions.
|
|
21
|
+
4. **Historical context** — how did we get here? Key dates/events.
|
|
22
|
+
5. **Controversies / debates** — what are the main disagreements? Who holds each view?
|
|
23
|
+
6. **Current state** — what's happening now? Latest developments.
|
|
24
|
+
7. **Broader implications** — why does this matter beyond the topic itself?
|
|
25
|
+
|
|
26
|
+
## Phase B — Narrative arc
|
|
27
|
+
|
|
28
|
+
From the research, design the arc:
|
|
29
|
+
|
|
30
|
+
### Hook
|
|
31
|
+
What's the most arresting angle? A question, contradiction, or provocative claim that makes someone stop scrolling and watch.
|
|
32
|
+
|
|
33
|
+
### Context
|
|
34
|
+
What 2-3 background facts does the audience absolutely need to understand the argument?
|
|
35
|
+
|
|
36
|
+
### Thesis
|
|
37
|
+
Your central argument or framing in one sentence.
|
|
38
|
+
|
|
39
|
+
### Angles (perspectives / evidence blocks)
|
|
40
|
+
For each angle:
|
|
41
|
+
- **Angle title**: short label (e.g. "The Economic Argument", "The Ethical Dimension")
|
|
42
|
+
- **Key claims**: 2-5 sub-points with evidence for each
|
|
43
|
+
- **Sources**: URLs or citations for each claim
|
|
44
|
+
- **Visual idea**: what kind of visuals support this angle
|
|
45
|
+
|
|
46
|
+
### Counterpoint
|
|
47
|
+
The strongest opposing view. State it fairly (steel-man). Provide the best sources that support this position.
|
|
48
|
+
|
|
49
|
+
### Synthesis / Rebuttal
|
|
50
|
+
How do the evidence and counterpoint resolve? Is there a clear winner, or is the answer nuanced?
|
|
51
|
+
|
|
52
|
+
### Conclusion
|
|
53
|
+
Broader implication. What should the viewer take away? What questions remain?
|
|
54
|
+
|
|
55
|
+
## Output format
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
## Research Summary
|
|
59
|
+
|
|
60
|
+
### Key Facts
|
|
61
|
+
- <fact> (source: <url>)
|
|
62
|
+
- ...
|
|
63
|
+
|
|
64
|
+
### Key Statistics
|
|
65
|
+
- <stat> (source: <url>)
|
|
66
|
+
|
|
67
|
+
### Expert Quotes
|
|
68
|
+
- "<quote>" — <person>, <context> (source: <url>)
|
|
69
|
+
|
|
70
|
+
### Controversies
|
|
71
|
+
- <debate>: view A (proponents) vs view B (proponents)
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Narrative Arc
|
|
76
|
+
|
|
77
|
+
Hook: <30-word hook line>
|
|
78
|
+
|
|
79
|
+
Context: <2-3 background facts the audience needs>
|
|
80
|
+
|
|
81
|
+
Thesis: <one-sentence argument>
|
|
82
|
+
|
|
83
|
+
### Angle 1: <title>
|
|
84
|
+
- <claim> (source) → <visual idea>
|
|
85
|
+
- <claim> (source) → <visual idea>
|
|
86
|
+
|
|
87
|
+
### Counterpoint: <title>
|
|
88
|
+
- <claim> (source)
|
|
89
|
+
|
|
90
|
+
### Synthesis
|
|
91
|
+
- <resolution>
|
|
92
|
+
|
|
93
|
+
### Conclusion
|
|
94
|
+
- <takeaway>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Rules
|
|
98
|
+
|
|
99
|
+
- Every factual claim must have a source URL. If you cannot find a source, mark it as "⚠️ unverified".
|
|
100
|
+
- The hook must be a question, contradiction, or provocative claim — not a statement of intent.
|
|
101
|
+
- The counterpoint must be steel-manned (the strongest version of the opposing view).
|
|
102
|
+
- The synthesis should acknowledge nuance if the evidence doesn't clearly favor one side.
|