@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.
Files changed (46) hide show
  1. package/package.json +3 -2
  2. package/{SKILL.md → skills/markcut/SKILL.md} +8 -2
  3. package/skills/markcut/docs/template.md +213 -0
  4. package/{templates → skills/markcut/docs/templates}/courseware/TEMPLATE.md +220 -10
  5. package/{templates → skills/markcut/docs/templates}/courseware/prompts/outline.md +5 -0
  6. package/{templates → skills/markcut/docs/templates}/courseware/prompts/scene.md +6 -0
  7. package/skills/markcut/docs/templates/deep-dive/TEMPLATE.md +355 -0
  8. package/skills/markcut/docs/templates/deep-dive/agents/researcher.md +69 -0
  9. package/skills/markcut/docs/templates/deep-dive/agents/reviewer.md +108 -0
  10. package/skills/markcut/docs/templates/deep-dive/prompts/fix.md +28 -0
  11. package/skills/markcut/docs/templates/deep-dive/prompts/outline.md +102 -0
  12. package/skills/markcut/docs/templates/deep-dive/prompts/script.md +64 -0
  13. package/skills/markcut/docs/templates/illustrated-book/TEMPLATE.md +360 -0
  14. package/skills/markcut/docs/templates/illustrated-book/agents/reviewer.md +115 -0
  15. package/skills/markcut/docs/templates/illustrated-book/prompts/fix.md +29 -0
  16. package/skills/markcut/docs/templates/illustrated-book/prompts/illustration.md +35 -0
  17. package/skills/markcut/docs/templates/illustrated-book/prompts/story.md +69 -0
  18. package/skills/markcut/docs/templates/short-film/TEMPLATE.md +387 -0
  19. package/skills/markcut/docs/templates/short-film/agents/reviewer.md +115 -0
  20. package/skills/markcut/docs/templates/short-film/prompts/fix.md +29 -0
  21. package/skills/markcut/docs/templates/short-film/prompts/screenplay.md +101 -0
  22. package/skills/markcut/docs/templates/short-film/prompts/storyboard.md +54 -0
  23. package/skills/markcut/docs/templates/short-video/TEMPLATE.md +302 -0
  24. package/skills/markcut/docs/templates/short-video/agents/reviewer.md +94 -0
  25. package/skills/markcut/docs/templates/short-video/prompts/fix.md +27 -0
  26. package/skills/markcut/docs/templates/short-video/prompts/script.md +65 -0
  27. package/skills/markcut/docs/templates/vlog/TEMPLATE.md +405 -0
  28. package/skills/markcut/docs/templates/vlog/agents/reviewer.md +89 -0
  29. package/skills/markcut/docs/templates/vlog/agents/story-writer.md +100 -0
  30. package/skills/markcut/docs/templates/vlog/prompts/bgm-select.md +38 -0
  31. package/skills/markcut/docs/templates/vlog/prompts/group-clips.md +93 -0
  32. package/skills/markcut/docs/templates/vlog/prompts/local-context.md +59 -0
  33. package/skills/markcut/docs/templates/vlog/prompts/outline.md +56 -0
  34. package/skills/markcut/docs/templates/vlog/prompts/review-fix.md +27 -0
  35. package/skills/markcut/docs/templates/vlog/prompts/storyboard.md +41 -0
  36. package/src/config.mjs +11 -3
  37. package/src/player/bundle/player.js +793 -545
  38. package/src/player/pipeline.mjs +1 -0
  39. package/src/player/server.mjs +3 -5
  40. /package/{docs → skills/markcut/docs}/edit-mode.md +0 -0
  41. /package/{docs → skills/markcut/docs}/json-descriptive.md +0 -0
  42. /package/{docs → skills/markcut/docs}/label-mode.md +0 -0
  43. /package/{docs → skills/markcut/docs}/markdown-descriptive.md +0 -0
  44. /package/{docs → skills/markcut/docs}/system-prompt-edit.md +0 -0
  45. /package/{templates → skills/markcut/docs/templates}/courseware/agents/reviewer.md +0 -0
  46. /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.