videonut 1.0.1 → 1.1.0

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 (79) hide show
  1. package/.antigravity/config.toml +8 -0
  2. package/.claude/commands/archivist.toml +12 -0
  3. package/.claude/commands/director.toml +12 -0
  4. package/.claude/commands/eic.toml +12 -0
  5. package/.claude/commands/investigator.toml +12 -0
  6. package/.claude/commands/prompt.toml +12 -0
  7. package/.claude/commands/scavenger.toml +12 -0
  8. package/.claude/commands/scout.toml +12 -0
  9. package/.claude/commands/scriptwriter.toml +12 -0
  10. package/.claude/commands/seo.toml +12 -0
  11. package/.claude/commands/thumbnail.toml +12 -0
  12. package/.claude/commands/topic_scout.toml +12 -0
  13. package/.gemini/commands/archivist.toml +12 -0
  14. package/.gemini/commands/director.toml +12 -0
  15. package/.gemini/commands/eic.toml +12 -0
  16. package/.gemini/commands/investigator.toml +12 -0
  17. package/.gemini/commands/prompt.toml +12 -0
  18. package/.gemini/commands/scavenger.toml +12 -0
  19. package/.gemini/commands/scout.toml +12 -0
  20. package/.gemini/commands/scriptwriter.toml +12 -0
  21. package/.gemini/commands/seo.toml +12 -0
  22. package/.gemini/commands/thumbnail.toml +12 -0
  23. package/.gemini/commands/topic_scout.toml +12 -0
  24. package/.qwen/commands/archivist.toml +12 -0
  25. package/.qwen/commands/director.toml +12 -0
  26. package/.qwen/commands/eic.toml +12 -0
  27. package/.qwen/commands/investigator.toml +12 -0
  28. package/.qwen/commands/prompt.toml +12 -0
  29. package/.qwen/commands/scavenger.toml +12 -0
  30. package/.qwen/commands/scout.toml +12 -0
  31. package/.qwen/commands/scriptwriter.toml +12 -0
  32. package/.qwen/commands/seo.toml +12 -0
  33. package/.qwen/commands/thumbnail.toml +12 -0
  34. package/.qwen/commands/topic_scout.toml +12 -0
  35. package/USER_GUIDE.md +90 -0
  36. package/agents/core/eic.md +772 -0
  37. package/agents/core/prompt_agent.md +264 -0
  38. package/agents/core/self_review_protocol.md +143 -0
  39. package/agents/creative/director.md +247 -0
  40. package/agents/creative/scriptwriter.md +208 -0
  41. package/agents/creative/seo.md +316 -0
  42. package/agents/creative/thumbnail.md +285 -0
  43. package/agents/research/investigator.md +395 -0
  44. package/agents/research/topic_scout.md +419 -0
  45. package/agents/technical/archivist.md +289 -0
  46. package/agents/technical/scavenger.md +248 -0
  47. package/bin/videonut.js +389 -107
  48. package/config.yaml +62 -0
  49. package/docs/AUDIT_REPORT.md +364 -0
  50. package/docs/LIFECYCLE.md +651 -0
  51. package/docs/scriptwriter.md +43 -0
  52. package/file_validator.py +187 -0
  53. package/memory/short_term/asset_manifest.md +64 -0
  54. package/memory/short_term/investigation_dossier.md +31 -0
  55. package/memory/short_term/master_script.md +51 -0
  56. package/package.json +16 -3
  57. package/requirements.txt +9 -0
  58. package/scripts/setup.js +8 -0
  59. package/tools/check_env.py +77 -0
  60. package/tools/downloaders/__pycache__/caption_reader.cpython-312.pyc +0 -0
  61. package/tools/downloaders/__pycache__/image_grabber.cpython-312.pyc +0 -0
  62. package/tools/downloaders/__pycache__/pdf_reader.cpython-312.pyc +0 -0
  63. package/tools/downloaders/__pycache__/screenshotter.cpython-312.pyc +0 -0
  64. package/tools/downloaders/__pycache__/web_reader.cpython-312.pyc +0 -0
  65. package/tools/downloaders/article_screenshotter.py +388 -0
  66. package/tools/downloaders/caption_reader.py +238 -0
  67. package/tools/downloaders/clip_grabber.py +83 -0
  68. package/tools/downloaders/image_grabber.py +106 -0
  69. package/tools/downloaders/pdf_reader.py +163 -0
  70. package/tools/downloaders/pdf_screenshotter.py +240 -0
  71. package/tools/downloaders/screenshotter.py +58 -0
  72. package/tools/downloaders/web_reader.py +69 -0
  73. package/tools/downloaders/youtube_search.py +174 -0
  74. package/tools/logging/search_logger.py +334 -0
  75. package/tools/validators/__pycache__/archive_url.cpython-312.pyc +0 -0
  76. package/tools/validators/__pycache__/link_checker.cpython-312.pyc +0 -0
  77. package/tools/validators/archive_url.py +269 -0
  78. package/tools/validators/link_checker.py +45 -0
  79. package/workflow_orchestrator.py +337 -0
@@ -0,0 +1,651 @@
1
+ # VideoNut Complete Lifecycle Documentation
2
+
3
+ ## 📊 SYSTEM OVERVIEW
4
+
5
+ ```
6
+ ╔══════════════════════════════════════════════════════════════════════════════╗
7
+ ║ VIDEONUT AGENT PIPELINE ║
8
+ ╠══════════════════════════════════════════════════════════════════════════════╣
9
+ ║ ║
10
+ ║ USER ──────────────────────────────────────────────────────────────────► ║
11
+ ║ │ ║
12
+ ║ ▼ ║
13
+ ║ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐║
14
+ ║ │ 📡 SCOUT │────►│ 🎯 PROMPT │────►│ 🕵️ INVEST │────►│ ✍️ SCRIPT │║
15
+ ║ │ (1st Agent) │ │ AGENT │ │ IGATOR │ │ WRITER │║
16
+ ║ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘║
17
+ ║ │ │ │ │ ║
18
+ ║ │ WRITES │ READS │ READS │ READS ║
19
+ ║ ▼ ▼ ▼ ▼ ║
20
+ ║ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐║
21
+ ║ │config.yaml │ │topic_brief │ │ prompt.md │ │truth_dossier│║
22
+ ║ │ │ │ .md │ │ │ │ .md │║
23
+ ║ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘║
24
+ ║ ║
25
+ ║ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐║
26
+ ║ │ 🎬 DIRECTOR │────►│ 🦅 SCAVENGE │────►│ 💾 ARCHIVIST│────►│ 🧐 EIC │║
27
+ ║ │ │ │ R │ │ │ │ │║
28
+ ║ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘║
29
+ ║ │ │ │ │ ║
30
+ ║ │ READS │ READS │ READS │ READS ║
31
+ ║ ▼ ▼ ▼ ▼ ║
32
+ ║ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐║
33
+ ║ │voice_script │ │master_script│ │asset_manifest│ │ALL PREVIOUS │║
34
+ ║ │narrative_ │ │ .md │ │ .md │ │ FILES │║
35
+ ║ │script.md │ │ │ │ │ │ │║
36
+ ║ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘║
37
+ ║ ║
38
+ ║ ┌─────────────┐ ┌─────────────┐ ║
39
+ ║ │ 🎨 THUMBNAIL│ │ 🔍 SEO │ ║
40
+ ║ │ │ │ │ ║
41
+ ║ └─────────────┘ └─────────────┘ ║
42
+ ║ │ │ ║
43
+ ║ └───────┬───────────┘ ║
44
+ ║ ▼ ║
45
+ ║ ┌─────────────────┐ ║
46
+ ║ │youtube_ │ ║
47
+ ║ │optimization.md │ ║
48
+ ║ └─────────────────┘ ║
49
+ ║ ║
50
+ ╚══════════════════════════════════════════════════════════════════════════════╝
51
+ ```
52
+
53
+ ---
54
+
55
+ ## 🔐 CONFIG.YAML ACCESS CONTROL
56
+
57
+ ```
58
+ ╔══════════════════════════════════════════════════════════════════════════════╗
59
+ ║ WHO CAN MODIFY CONFIG.YAML? ║
60
+ ╠══════════════════════════════════════════════════════════════════════════════╣
61
+ ║ ║
62
+ ║ ┌──────────────────────────────────────────────────────────────────────┐ ║
63
+ ║ │ 📡 TOPIC SCOUT (ONLY AGENT) │ ║
64
+ ║ │ │ ║
65
+ ║ │ ✅ CAN WRITE TO config.yaml: │ ║
66
+ ║ │ • projects_folder │ ║
67
+ ║ │ • current_project │ ║
68
+ ║ │ • video_format │ ║
69
+ ║ │ • target_duration │ ║
70
+ ║ │ • target_line_count │ ║
71
+ ║ │ • audio_language │ ║
72
+ ║ │ • scope (international/national/regional) │ ║
73
+ ║ │ • country │ ║
74
+ ║ │ • region │ ║
75
+ ║ │ • industry_tag │ ║
76
+ ║ │ │ ║
77
+ ║ └──────────────────────────────────────────────────────────────────────┘ ║
78
+ ║ │ ║
79
+ ║ │ WRITES ║
80
+ ║ ▼ ║
81
+ ║ ┌──────────────────────────────────────────────────────────────────────┐ ║
82
+ ║ │ config.yaml │ ║
83
+ ║ └──────────────────────────────────────────────────────────────────────┘ ║
84
+ ║ │ ║
85
+ ║ │ READ ONLY ║
86
+ ║ ▼ ║
87
+ ║ ┌──────────────────────────────────────────────────────────────────────┐ ║
88
+ ║ │ 🎯 Prompt │ 🕵️ Investigator │ ✍️ Scriptwriter │ 🎬 Director │ ║
89
+ ║ │ 🦅 Scavenger │ 💾 Archivist │ 🧐 EIC │ 🎨 Thumbnail │ 🔍 SEO │ ║
90
+ ║ │ │ ║
91
+ ║ │ ❌ CANNOT MODIFY config.yaml │ ║
92
+ ║ │ ✅ CAN READ all values │ ║
93
+ ║ │ ✅ CAN CREATE files in {projects_folder}/{current_project}/ │ ║
94
+ ║ └──────────────────────────────────────────────────────────────────────┘ ║
95
+ ║ ║
96
+ ╚══════════════════════════════════════════════════════════════════════════════╝
97
+ ```
98
+
99
+ ---
100
+
101
+ ## 🛠️ AGENT TOOLS MATRIX
102
+
103
+ ```
104
+ ╔════════════════════════════════════════════════════════════════════════════════════════╗
105
+ ║ WHICH AGENT USES WHICH TOOLS? ║
106
+ ╠════════════════════════════════════════════════════════════════════════════════════════╣
107
+ ║ ║
108
+ ║ TOOL │ SCOUT │ PROMPT │ INVEST │ SCRIPT │ DIREC │ SCAV │ ARCH │ EIC ║
109
+ ║ ────────────────────────┼───────┼────────┼────────┼────────┼───────┼──────┼──────┼─────║
110
+ ║ google_web_search │ ✅ │ ✅ │ ✅ │ ❌ │ ✅ │ ✅ │ ❌ │ ❌ ║
111
+ ║ youtube_search.py │ ✅ │ ✅ │ ✅ │ ❌ │ ✅ │ ✅ │ ❌ │ ❌ ║
112
+ ║ caption_reader.py │ ✅ │ ✅ │ ✅ │ ❌ │ ✅ │ ✅ │ ✅ │ ❌ ║
113
+ ║ web_reader.py │ ✅ │ ✅ │ ✅ │ ❌ │ ✅ │ ✅ │ ❌ │ ❌ ║
114
+ ║ link_checker.py │ ✅ │ ✅ │ ✅ │ ❌ │ ✅ │ ✅ │ ✅ │ ✅ ║
115
+ ║ clip_grabber.py │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ✅ │ ❌ ║
116
+ ║ image_grabber.py │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ✅ │ ❌ ║
117
+ ║ article_screenshotter │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ✅ │ ❌ ║
118
+ ║ screenshotter.py │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ │ ✅ │ ❌ ║
119
+ ║ pdf_reader.py │ ❌ │ ❌ │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ ║
120
+ ║ archive_url.py │ ❌ │ ❌ │ ✅ │ ❌ │ ❌ │ ✅ │ ❌ │ ❌ ║
121
+ ║ search_logger.py │ ✅ │ ✅ │ ✅ │ ❌ │ ❌ │ ❌ │ ❌ │ ❌ ║
122
+ ║ ║
123
+ ╚════════════════════════════════════════════════════════════════════════════════════════╝
124
+ ```
125
+
126
+ ---
127
+
128
+ ## 📁 FILE CREATION & READING FLOW
129
+
130
+ ```
131
+ ╔══════════════════════════════════════════════════════════════════════════════════════════╗
132
+ ║ FILE FLOW: WHO CREATES, WHO READS ║
133
+ ╠══════════════════════════════════════════════════════════════════════════════════════════╣
134
+ ║ ║
135
+ ║ 📡 TOPIC SCOUT ─────────────────────────────────────────────────────────────────────► ║
136
+ ║ │ ║
137
+ ║ ├──► CREATES: Project folder (gemini_2026-01-04_Topic_001/) ║
138
+ ║ ├──► UPDATES: config.yaml (ALL settings) ║
139
+ ║ └──► CREATES: topic_brief.md (200 words) ║
140
+ ║ │ ║
141
+ ║ ▼ READS topic_brief.md ║
142
+ ║ 🎯 PROMPT AGENT ────────────────────────────────────────────────────────────────────► ║
143
+ ║ │ ║
144
+ ║ └──► CREATES: prompt.md (Full investigation prompt with 21 questions) ║
145
+ ║ │ ║
146
+ ║ ▼ READS prompt.md ║
147
+ ║ 🕵️ INVESTIGATOR ────────────────────────────────────────────────────────────────────► ║
148
+ ║ │ ║
149
+ ║ └──► CREATES: truth_dossier.md (Research findings, answers to 21 questions) ║
150
+ ║ │ ║
151
+ ║ ▼ READS truth_dossier.md ║
152
+ ║ ✍️ SCRIPTWRITER ─────────────────────────────────────────────────────────────────────► ║
153
+ ║ │ ║
154
+ ║ ├──► CREATES: voice_script.md (Script for TTS with voice cues) ║
155
+ ║ └──► CREATES: narrative_script.md (Clean script for Director) ║
156
+ ║ │ ║
157
+ ║ ▼ READS narrative_script.md ║
158
+ ║ 🎬 DIRECTOR ──────────────────────────────────────────────────────────────────────────► ║
159
+ ║ │ ║
160
+ ║ ├──► CREATES: master_script.md (Scene-by-scene with visual directions) ║
161
+ ║ └──► CREATES: video_direction.md (Summary of visual needs) ║
162
+ ║ │ ║
163
+ ║ ▼ READS master_script.md ║
164
+ ║ 🦅 SCAVENGER ───────────────────────────────────────────────────────────────────────► ║
165
+ ║ │ ║
166
+ ║ └──► CREATES: asset_manifest.md (All URLs + timestamps verified) ║
167
+ ║ │ ║
168
+ ║ ▼ READS asset_manifest.md ║
169
+ ║ 💾 ARCHIVIST ───────────────────────────────────────────────────────────────────────► ║
170
+ ║ │ ║
171
+ ║ ├──► DOWNLOADS: assets/ folder (images, videos, screenshots) ║
172
+ ║ └──► CREATES: MANUAL_REQUIRED.txt (If some downloads failed) ║
173
+ ║ │ ║
174
+ ║ ▼ READS ALL previous files ║
175
+ ║ 🧐 EIC (Editor-in-Chief) ────────────────────────────────────────────────────────────► ║
176
+ ║ │ ║
177
+ ║ └──► CREATES: review_report.md (Quality review, approval/rejection) ║
178
+ ║ │ ║
179
+ ║ ▼ READS voice_script.md, truth_dossier.md ║
180
+ ║ 🎨 THUMBNAIL + 🔍 SEO ─────────────────────────────────────────────────────────────────► ║
181
+ ║ │ ║
182
+ ║ └──► CREATES: youtube_optimization.md (Thumbnail prompts + SEO) ║
183
+ ║ ║
184
+ ╚══════════════════════════════════════════════════════════════════════════════════════════╝
185
+ ```
186
+
187
+ ---
188
+
189
+ ## 💬 WHAT EACH AGENT ASKS THE USER
190
+
191
+ ```
192
+ ╔══════════════════════════════════════════════════════════════════════════════════════════╗
193
+ ║ USER INTERACTION PER AGENT ║
194
+ ╠══════════════════════════════════════════════════════════════════════════════════════════╣
195
+ ║ ║
196
+ ║ 📡 TOPIC SCOUT (MOST USER INTERACTION) ║
197
+ ║ ├── [NP] What's the topic? ─────────────────────► User enters topic ║
198
+ ║ ├── [NP] Scope? (1=International, 2=National, 3=Regional) ───► User picks 1/2/3 ║
199
+ ║ ├── [NP] Which country? ─────────────────────────► User enters "India" ║
200
+ ║ ├── [NP] Which region? ──────────────────────────► User enters "Telangana" ║
201
+ ║ ├── [NP] Audio language? ────────────────────────► User picks Telugu ║
202
+ ║ ├── [NP] Video format? ──────────────────────────► User picks Investigative ║
203
+ ║ ├── [NP] Duration? ──────────────────────────────► User enters 25 (minutes) ║
204
+ ║ ├── [NP] Industry tag? ──────────────────────────► User picks Political ║
205
+ ║ ├── [ST] Pick topic (1-5)? ──────────────────────► User picks 2 ║
206
+ ║ └── Proceed to Prompt Agent? ────────────────────► User says Y ║
207
+ ║ ║
208
+ ║ 🎯 PROMPT AGENT (MINIMAL INTERACTION) ║
209
+ ║ ├── Topic already from topic_brief.md? Use it? ──► User says Y ║
210
+ ║ └── Proceed to Investigator? ────────────────────► User says Y ║
211
+ ║ ║
212
+ ║ 🕵️ INVESTIGATOR (ONE CONFIRMATION) ║
213
+ ║ └── [SI] Start Investigation? ───────────────────► User says Y ║
214
+ ║ ║
215
+ ║ ✍️ SCRIPTWRITER (ONE CONFIRMATION) ║
216
+ ║ └── [GS] Generate Script? ───────────────────────► User says Y ║
217
+ ║ ║
218
+ ║ 🎬 DIRECTOR (ONE CONFIRMATION) ║
219
+ ║ └── [GM] Generate Master Script? ────────────────► User says Y ║
220
+ ║ ║
221
+ ║ 🦅 SCAVENGER (ONE CONFIRMATION) ║
222
+ ║ └── [FA] Find Assets? ───────────────────────────► User says Y ║
223
+ ║ ║
224
+ ║ 💾 ARCHIVIST (ONE CONFIRMATION) ║
225
+ ║ └── [DA] Download Assets? ───────────────────────► User says Y ║
226
+ ║ ║
227
+ ║ 🧐 EIC (Automatic, may ask for revisions) ║
228
+ ║ └── [SR] Start Review? ──────────────────────────► User says Y ║
229
+ ║ ║
230
+ ║ 🎨 THUMBNAIL + 🔍 SEO (ONE CONFIRMATION) ║
231
+ ║ └── [GO] Generate Optimization? ─────────────────► User says Y ║
232
+ ║ ║
233
+ ╚══════════════════════════════════════════════════════════════════════════════════════════╝
234
+ ```
235
+
236
+ ---
237
+
238
+ ## 📋 COMPLETE EXAMPLE: Electoral Bonds Scam
239
+
240
+ ```
241
+ ╔══════════════════════════════════════════════════════════════════════════════════════════╗
242
+ ║ COMPLETE WALKTHROUGH: "Electoral Bonds Scam" (Political, India) ║
243
+ ╠══════════════════════════════════════════════════════════════════════════════════════════╣
244
+
245
+ STEP 1: USER RUNS /topic_scout
246
+ ═══════════════════════════════════════════════════════════════════════════════════════════
247
+
248
+ User: /topic_scout
249
+
250
+ 📡 Scout: "Ready to configure. What do you want to do?"
251
+
252
+ User: [NP] New Project
253
+
254
+ 📡 Scout: "What's the topic?"
255
+ User: "Electoral Bonds Scam"
256
+
257
+ 📡 Scout: "What's the scope?"
258
+ [1] International
259
+ [2] National
260
+ [3] Regional
261
+ User: 2
262
+
263
+ 📡 Scout: "Which country?"
264
+ User: "India"
265
+
266
+ 📡 Scout: "Audio language?"
267
+ [1] English [2] Telugu [3] Hindi...
268
+ User: 2 (Telugu)
269
+
270
+ 📡 Scout: "Video format?"
271
+ [1] Investigative Case Study (30-45 min)
272
+ [2] News Explainer (15-20 min)
273
+ ...
274
+ User: 1
275
+
276
+ 📡 Scout: "Target duration in minutes?"
277
+ User: 30
278
+
279
+ 📡 Scout: "Industry tag?"
280
+ [1] Finance [2] Stock Market [3] Political...
281
+ User: 3 (Political)
282
+
283
+ 📡 Scout: "✅ PROJECT CREATED"
284
+ 📁 Folder: gemini_2026-01-04_Electoral_Bonds_Scam_001
285
+ 📊 Settings:
286
+ • Scope: national | India
287
+ • Language: Telugu
288
+ • Format: Investigative Case Study
289
+ • Duration: 30 min (4050 words)
290
+ • Industry: Political
291
+
292
+ config.yaml UPDATED ✅
293
+
294
+ 📡 Scout: "Search for topic context or enter manually?"
295
+ User: [ST] Search
296
+
297
+ 📡 Scout: *searches using google_web_search, youtube_search.py*
298
+
299
+ TOP 5 ANGLES:
300
+ #1 🔥 "Supreme Court reveals full donor list"
301
+ #2 📈 "Congress demands JPC probe"
302
+ #3 💡 "How companies bought politicians"
303
+ ...
304
+
305
+ User: 1
306
+
307
+ 📡 Scout: *researches deeply, finds YouTube videos*
308
+ *uses caption_reader.py to get timestamps*
309
+ *writes 200-word brief*
310
+ *saves to topic_brief.md*
311
+
312
+ 📡 Scout: "✅ Brief saved. Proceed to /prompt? [Y/N]"
313
+ User: Y
314
+
315
+ ═══════════════════════════════════════════════════════════════════════════════════════════
316
+ STEP 2: USER RUNS /prompt
317
+ ═══════════════════════════════════════════════════════════════════════════════════════════
318
+
319
+ User: /prompt
320
+
321
+ 🎯 Prompt Agent: "📁 Found topic_brief.md from Topic Scout!"
322
+ Topic: Electoral Bonds Scam - Supreme Court revelation
323
+
324
+ 🎯 Prompt Agent: "Use this topic? [Y/N]"
325
+ User: Y
326
+
327
+ 🎯 Prompt Agent: *reads brief*
328
+ *searches for more details using google_web_search*
329
+ *generates 21 investigation questions*
330
+ *saves to prompt.md*
331
+
332
+ 🎯 Prompt Agent: "✅ Prompt created. Proceed to /investigator? [Y/N]"
333
+ User: Y
334
+
335
+ ═══════════════════════════════════════════════════════════════════════════════════════════
336
+ STEP 3: USER RUNS /investigator
337
+ ═══════════════════════════════════════════════════════════════════════════════════════════
338
+
339
+ User: /investigator
340
+
341
+ 🕵️ Investigator: "Active Project: gemini_2026-01-04_Electoral_Bonds_Scam_001"
342
+ "📍 Scope: national | India"
343
+ "🏷️ Industry: Political"
344
+
345
+ 🕵️ Investigator: "[SI] Start Investigation? [Y/N]"
346
+ User: Y
347
+
348
+ 🕵️ Investigator: *reads prompt.md*
349
+ *uses google_web_search for each question*
350
+ *uses youtube_search.py to find interviews*
351
+ *uses caption_reader.py to extract quotes with timestamps*
352
+ *uses web_reader.py to read news articles*
353
+ *uses archive_url.py to preserve key sources*
354
+
355
+ Industry: Political → Prioritizes:
356
+ • myneta.info (donation data)
357
+ • Election Commission website
358
+ • Supreme Court judgments
359
+ • Parliament proceedings
360
+
361
+ 🕵️ Investigator: *writes truth_dossier.md with all findings*
362
+
363
+ 🕵️ Investigator: "✅ Dossier created. Proceed to /scriptwriter? [Y/N]"
364
+ User: Y
365
+
366
+ ═══════════════════════════════════════════════════════════════════════════════════════════
367
+ STEP 4: USER RUNS /scriptwriter
368
+ ═══════════════════════════════════════════════════════════════════════════════════════════
369
+
370
+ User: /scriptwriter
371
+
372
+ ✍️ Scriptwriter: "Active Project: gemini_2026-01-04_Electoral_Bonds_Scam_001"
373
+ Target: 30 min = 4050 words (Telugu audio)
374
+
375
+ ✍️ Scriptwriter: "[GS] Generate Script?"
376
+ User: Y
377
+
378
+ ✍️ Scriptwriter: *reads truth_dossier.md*
379
+ *reads config for audio_language: Telugu*
380
+ *writes voice_script.md (with voice cues like (pause 2s), (angry tone))*
381
+ *writes narrative_script.md (clean version for Director)*
382
+
383
+ Word count check: 4050 words ✅
384
+
385
+ ✍️ Scriptwriter: "✅ Scripts created: voice_script.md, narrative_script.md"
386
+
387
+ ═══════════════════════════════════════════════════════════════════════════════════════════
388
+ STEP 5: USER RUNS /director
389
+ ═══════════════════════════════════════════════════════════════════════════════════════════
390
+
391
+ User: /director
392
+
393
+ 🎬 Director: "[GM] Generate Master Script?"
394
+ User: Y
395
+
396
+ 🎬 Director: *reads narrative_script.md*
397
+ *reads config for video_format: Investigative Case Study*
398
+ *designs visual shots for each narration line*
399
+ *uses youtube_search.py to find clips*
400
+ *uses caption_reader.py to get exact timestamps*
401
+
402
+ Scene count: 50 scenes (30 min video) ✅
403
+
404
+ 🎬 Director: *writes master_script.md*
405
+ *writes video_direction.md*
406
+
407
+ Assets sourced:
408
+ - 15 YouTube clips with timestamps
409
+ - 10 news article screenshots [MANUAL]
410
+ - 8 stock footage [STOCK-MANUAL]
411
+ - 12 graphics/charts [MANUAL]
412
+
413
+ ═══════════════════════════════════════════════════════════════════════════════════════════
414
+ STEP 6: USER RUNS /scavenger
415
+ ═══════════════════════════════════════════════════════════════════════════════════════════
416
+
417
+ User: /scavenger
418
+
419
+ 🦅 Scavenger: "[FA] Find Assets?"
420
+ User: Y
421
+
422
+ 🦅 Scavenger: *reads master_script.md*
423
+ *uses link_checker.py to validate ALL URLs*
424
+ *uses youtube_search.py to find better alternatives*
425
+ *uses caption_reader.py to verify timestamps*
426
+ *uses archive_url.py to preserve news links*
427
+
428
+ URL Validation:
429
+ - 15 YouTube URLs: ✅ All valid
430
+ - 8 News URLs: ✅ 7 valid, 1 archived
431
+ - 5 Image URLs: ✅ All valid
432
+
433
+ 🦅 Scavenger: *writes asset_manifest.md*
434
+
435
+ Ready to Download: 28 assets
436
+ Manual Required: 10 assets
437
+
438
+ ═══════════════════════════════════════════════════════════════════════════════════════════
439
+ STEP 7: USER RUNS /archivist
440
+ ═══════════════════════════════════════════════════════════════════════════════════════════
441
+
442
+ User: /archivist
443
+
444
+ 💾 Archivist: "[DA] Download Assets?"
445
+ User: Y
446
+
447
+ 💾 Archivist: *reads asset_manifest.md*
448
+ *uses link_checker.py before each download*
449
+ *uses clip_grabber.py for YouTube clips*
450
+ *uses image_grabber.py for images*
451
+ *uses article_screenshotter.py for news quotes*
452
+ *uses caption_reader.py for transcript files*
453
+
454
+ Downloads:
455
+ ├── assets/
456
+ │ ├── 001_supreme_court_judgment_clip.mp4 ✅
457
+ │ ├── 002_rahul_gandhi_speech_0215-0342.mp4 ✅
458
+ │ ├── 003_bjp_press_conference.mp4 ✅
459
+ │ ├── 004_economist_article_quote.png ✅
460
+ │ ...
461
+ └── MANUAL_REQUIRED.txt (10 items)
462
+
463
+ ═══════════════════════════════════════════════════════════════════════════════════════════
464
+ STEP 8: USER RUNS /eic
465
+ ═══════════════════════════════════════════════════════════════════════════════════════════
466
+
467
+ User: /eic
468
+
469
+ 🧐 EIC: "[SR] Start Review?"
470
+ User: Y
471
+
472
+ 🧐 EIC: *reads ALL files*
473
+ *uses link_checker.py to verify URLs still work*
474
+
475
+ CHECKLIST:
476
+ ✅ Dossier has 21 questions answered
477
+ ✅ Script is 4050 words (30 min target)
478
+ ✅ All 21 questions referenced in script
479
+ ✅ Scene count: 50 (within limit)
480
+ ✅ 28/38 assets downloaded (10 manual)
481
+ ✅ Human story present (victims identified)
482
+ ✅ Hook in first 30 seconds
483
+
484
+ 🧐 EIC: *writes review_report.md*
485
+ Status: APPROVED ✅
486
+
487
+ ═══════════════════════════════════════════════════════════════════════════════════════════
488
+ STEP 9: USER RUNS /thumbnail and /seo
489
+ ═══════════════════════════════════════════════════════════════════════════════════════════
490
+
491
+ User: /thumbnail
492
+
493
+ 🎨 Thumbnail: *reads voice_script.md, truth_dossier.md*
494
+ *generates 3 AI image prompts*
495
+ *saves to youtube_optimization.md*
496
+
497
+ User: /seo
498
+
499
+ 🔍 SEO: *reads voice_script.md*
500
+ *uses google_web_search for keyword research*
501
+ *generates title, description, tags*
502
+ *appends to youtube_optimization.md*
503
+
504
+ ═══════════════════════════════════════════════════════════════════════════════════════════
505
+ FINAL PROJECT FOLDER STRUCTURE
506
+ ═══════════════════════════════════════════════════════════════════════════════════════════
507
+
508
+ ./Projects/gemini_2026-01-04_Electoral_Bonds_Scam_001/
509
+ ├── topic_brief.md (200 words - from Scout)
510
+ ├── prompt.md (21 questions - from Prompt Agent)
511
+ ├── truth_dossier.md (Research - from Investigator)
512
+ ├── voice_script.md (TTS ready - from Scriptwriter)
513
+ ├── narrative_script.md (Clean script - from Scriptwriter)
514
+ ├── master_script.md (Scene-by-scene - from Director)
515
+ ├── video_direction.md (Summary - from Director)
516
+ ├── asset_manifest.md (URLs + timestamps - from Scavenger)
517
+ ├── review_report.md (Quality check - from EIC)
518
+ ├── youtube_optimization.md (Thumbnail + SEO - from both)
519
+ ├── MANUAL_REQUIRED.txt (Failed downloads - from Archivist)
520
+ └── assets/
521
+ ├── 001_supreme_court_judgment_clip.mp4
522
+ ├── 002_rahul_gandhi_speech.mp4
523
+ ├── 003_bjp_press_conference.mp4
524
+ ├── ...
525
+ └── (28 downloaded files)
526
+
527
+ ╚══════════════════════════════════════════════════════════════════════════════════════════╝
528
+ ```
529
+
530
+ ---
531
+
532
+ ## 🔗 AGENT CONNECTION DIAGRAM
533
+
534
+ ```
535
+ USER
536
+
537
+ │ /topic_scout
538
+
539
+ ┌─────────────────────────────────────┐
540
+ │ 📡 TOPIC SCOUT │
541
+ │ • Creates project folder │
542
+ │ • WRITES config.yaml (ALL fields) │
543
+ │ • Creates topic_brief.md │
544
+ └─────────────────┬───────────────────┘
545
+
546
+ config.yaml updated
547
+ topic_brief.md created
548
+
549
+
550
+ ┌─────────────────────────────────────┐
551
+ │ 🎯 PROMPT AGENT │
552
+ │ • READS config.yaml │
553
+ │ • READS topic_brief.md │
554
+ │ • Creates prompt.md │
555
+ └─────────────────┬───────────────────┘
556
+
557
+
558
+ ┌─────────────────────────────────────┐
559
+ │ 🕵️ INVESTIGATOR │
560
+ │ • READS config.yaml (industry_tag) │
561
+ │ • READS prompt.md │
562
+ │ • Creates truth_dossier.md │
563
+ └─────────────────┬───────────────────┘
564
+
565
+
566
+ ┌─────────────────────────────────────┐
567
+ │ ✍️ SCRIPTWRITER │
568
+ │ • READS config.yaml (language) │
569
+ │ • READS truth_dossier.md │
570
+ │ • Creates voice_script.md │
571
+ │ • Creates narrative_script.md │
572
+ └─────────────────┬───────────────────┘
573
+
574
+
575
+ ┌─────────────────────────────────────┐
576
+ │ 🎬 DIRECTOR │
577
+ │ • READS config.yaml (format) │
578
+ │ • READS narrative_script.md │
579
+ │ • Creates master_script.md │
580
+ │ • Creates video_direction.md │
581
+ └─────────────────┬───────────────────┘
582
+
583
+
584
+ ┌─────────────────────────────────────┐
585
+ │ 🦅 SCAVENGER │
586
+ │ • READS config.yaml │
587
+ │ • READS master_script.md │
588
+ │ • Creates asset_manifest.md │
589
+ └─────────────────┬───────────────────┘
590
+
591
+
592
+ ┌─────────────────────────────────────┐
593
+ │ 💾 ARCHIVIST │
594
+ │ • READS config.yaml │
595
+ │ • READS asset_manifest.md │
596
+ │ • Downloads to assets/ │
597
+ │ • Creates MANUAL_REQUIRED.txt │
598
+ └─────────────────┬───────────────────┘
599
+
600
+
601
+ ┌─────────────────────────────────────┐
602
+ │ 🧐 EIC │
603
+ │ • READS config.yaml │
604
+ │ • READS ALL previous files │
605
+ │ • Creates review_report.md │
606
+ └─────────────────┬───────────────────┘
607
+
608
+ ┌─────────────┴─────────────┐
609
+ ▼ ▼
610
+ ┌──────────────────────┐ ┌──────────────────────┐
611
+ │ 🎨 THUMBNAIL │ │ 🔍 SEO │
612
+ │ • Creates prompts │ │ • Title/Desc/Tags │
613
+ └──────────┬───────────┘ └──────────┬───────────┘
614
+ │ │
615
+ └───────────┬───────────────┘
616
+
617
+ ┌─────────────────────────────────────┐
618
+ │ youtube_optimization.md │
619
+ └─────────────────────────────────────┘
620
+
621
+
622
+ VIDEO READY!
623
+ ```
624
+
625
+ ---
626
+
627
+ ## 📌 KEY RULES SUMMARY
628
+
629
+ ```
630
+ ╔══════════════════════════════════════════════════════════════════════════════════════════╗
631
+ ║ KEY RULES ║
632
+ ╠══════════════════════════════════════════════════════════════════════════════════════════╣
633
+ ║ ║
634
+ ║ 1️⃣ ONLY Topic Scout creates projects and modifies config.yaml ║
635
+ ║ ║
636
+ ║ 2️⃣ ALL other agents READ config.yaml but NEVER modify it ║
637
+ ║ ║
638
+ ║ 3️⃣ ALL files are created in: {projects_folder}/{current_project}/ ║
639
+ ║ ║
640
+ ║ 4️⃣ Region is USER SELECTED, not auto-derived from language ║
641
+ ║ ║
642
+ ║ 5️⃣ Each agent READS the previous agent's output file ║
643
+ ║ ║
644
+ ║ 6️⃣ Industry Tag helps agents prioritize relevant sources ║
645
+ ║ ║
646
+ ║ 7️⃣ Word count = Duration × 135 (avg 135 words per minute) ║
647
+ ║ ║
648
+ ║ 8️⃣ Minimum video duration = 15 minutes (2025 words) ║
649
+ ║ ║
650
+ ╚══════════════════════════════════════════════════════════════════════════════════════════╝
651
+ ```