videoclaw 3.0.0-alpha.7 → 3.0.0-alpha.8

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 (419) hide show
  1. package/CLAUDE.md +46 -8
  2. package/README.md +20 -2
  3. package/assets/review-station/index.html +11 -1
  4. package/dist/cli/args.js +7 -7
  5. package/dist/cli/args.js.map +1 -1
  6. package/dist/cli/handlers/analysis.d.ts +24 -0
  7. package/dist/cli/handlers/analysis.d.ts.map +1 -1
  8. package/dist/cli/handlers/analysis.js +163 -0
  9. package/dist/cli/handlers/analysis.js.map +1 -1
  10. package/dist/cli/handlers/batch.js +2 -2
  11. package/dist/cli/handlers/batch.js.map +1 -1
  12. package/dist/cli/handlers/candidates.d.ts.map +1 -1
  13. package/dist/cli/handlers/candidates.js +178 -58
  14. package/dist/cli/handlers/candidates.js.map +1 -1
  15. package/dist/cli/handlers/character.d.ts.map +1 -1
  16. package/dist/cli/handlers/character.js +11 -7
  17. package/dist/cli/handlers/character.js.map +1 -1
  18. package/dist/cli/handlers/create.d.ts.map +1 -1
  19. package/dist/cli/handlers/create.js +7 -6
  20. package/dist/cli/handlers/create.js.map +1 -1
  21. package/dist/cli/handlers/execution.d.ts.map +1 -1
  22. package/dist/cli/handlers/execution.js +33 -1
  23. package/dist/cli/handlers/execution.js.map +1 -1
  24. package/dist/cli/handlers/library.js +2 -2
  25. package/dist/cli/handlers/library.js.map +1 -1
  26. package/dist/cli/handlers/media-production.d.ts.map +1 -1
  27. package/dist/cli/handlers/media-production.js +88 -0
  28. package/dist/cli/handlers/media-production.js.map +1 -1
  29. package/dist/cli/handlers/mograph.d.ts +18 -0
  30. package/dist/cli/handlers/mograph.d.ts.map +1 -0
  31. package/dist/cli/handlers/mograph.js +511 -0
  32. package/dist/cli/handlers/mograph.js.map +1 -0
  33. package/dist/cli/handlers/multi-shot.d.ts.map +1 -1
  34. package/dist/cli/handlers/multi-shot.js +108 -19
  35. package/dist/cli/handlers/multi-shot.js.map +1 -1
  36. package/dist/cli/handlers/prompt-craft.d.ts.map +1 -1
  37. package/dist/cli/handlers/prompt-craft.js +65 -24
  38. package/dist/cli/handlers/prompt-craft.js.map +1 -1
  39. package/dist/cli/handlers/provider-registration.d.ts.map +1 -1
  40. package/dist/cli/handlers/provider-registration.js +13 -12
  41. package/dist/cli/handlers/provider-registration.js.map +1 -1
  42. package/dist/cli/handlers/reference-sheets.d.ts.map +1 -1
  43. package/dist/cli/handlers/reference-sheets.js +10 -10
  44. package/dist/cli/handlers/reference-sheets.js.map +1 -1
  45. package/dist/cli/handlers/review-portal.d.ts.map +1 -1
  46. package/dist/cli/handlers/review-portal.js +3 -1
  47. package/dist/cli/handlers/review-portal.js.map +1 -1
  48. package/dist/cli/handlers/stages.d.ts.map +1 -1
  49. package/dist/cli/handlers/stages.js +56 -0
  50. package/dist/cli/handlers/stages.js.map +1 -1
  51. package/dist/cli/json-input.d.ts +3 -0
  52. package/dist/cli/json-input.d.ts.map +1 -0
  53. package/dist/cli/json-input.js +22 -0
  54. package/dist/cli/json-input.js.map +1 -0
  55. package/dist/cli/provider-adapter.js +22 -10
  56. package/dist/cli/provider-adapter.js.map +1 -1
  57. package/dist/cli/vclaw.d.ts.map +1 -1
  58. package/dist/cli/vclaw.js +17 -5
  59. package/dist/cli/vclaw.js.map +1 -1
  60. package/dist/index.d.ts +2 -0
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +1 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/video/artifacts.d.ts +8 -0
  65. package/dist/video/artifacts.d.ts.map +1 -1
  66. package/dist/video/artifacts.js.map +1 -1
  67. package/dist/video/assemble/assemble.d.ts.map +1 -1
  68. package/dist/video/assemble/assemble.js +170 -26
  69. package/dist/video/assemble/assemble.js.map +1 -1
  70. package/dist/video/assemble/media-qc.d.ts +77 -2
  71. package/dist/video/assemble/media-qc.d.ts.map +1 -1
  72. package/dist/video/assemble/media-qc.js +177 -4
  73. package/dist/video/assemble/media-qc.js.map +1 -1
  74. package/dist/video/assemble/pdf.d.ts.map +1 -1
  75. package/dist/video/assemble/pdf.js +0 -1
  76. package/dist/video/assemble/pdf.js.map +1 -1
  77. package/dist/video/assemble/stitch.d.ts +102 -0
  78. package/dist/video/assemble/stitch.d.ts.map +1 -1
  79. package/dist/video/assemble/stitch.js +208 -21
  80. package/dist/video/assemble/stitch.js.map +1 -1
  81. package/dist/video/assemble/title-card.js.map +1 -1
  82. package/dist/video/assemble/types.d.ts +59 -0
  83. package/dist/video/assemble/types.d.ts.map +1 -1
  84. package/dist/video/audio-platform/measure.d.ts +11 -0
  85. package/dist/video/audio-platform/measure.d.ts.map +1 -0
  86. package/dist/video/audio-platform/measure.js +57 -0
  87. package/dist/video/audio-platform/measure.js.map +1 -0
  88. package/dist/video/category-registry.d.ts.map +1 -1
  89. package/dist/video/category-registry.js +10 -1
  90. package/dist/video/category-registry.js.map +1 -1
  91. package/dist/video/character-auto-create.d.ts +51 -0
  92. package/dist/video/character-auto-create.d.ts.map +1 -1
  93. package/dist/video/character-auto-create.js +75 -33
  94. package/dist/video/character-auto-create.js.map +1 -1
  95. package/dist/video/cinematography.d.ts +60 -0
  96. package/dist/video/cinematography.d.ts.map +1 -1
  97. package/dist/video/cinematography.js +99 -0
  98. package/dist/video/cinematography.js.map +1 -1
  99. package/dist/video/cli-schema.d.ts.map +1 -1
  100. package/dist/video/cli-schema.js +97 -11
  101. package/dist/video/cli-schema.js.map +1 -1
  102. package/dist/video/clip-qc.d.ts +164 -0
  103. package/dist/video/clip-qc.d.ts.map +1 -0
  104. package/dist/video/clip-qc.js +202 -0
  105. package/dist/video/clip-qc.js.map +1 -0
  106. package/dist/video/dialogue.d.ts.map +1 -1
  107. package/dist/video/dialogue.js +7 -1
  108. package/dist/video/dialogue.js.map +1 -1
  109. package/dist/video/environment-auto-create.d.ts +2 -0
  110. package/dist/video/environment-auto-create.d.ts.map +1 -1
  111. package/dist/video/environment-auto-create.js +15 -4
  112. package/dist/video/environment-auto-create.js.map +1 -1
  113. package/dist/video/errors.d.ts +1 -1
  114. package/dist/video/errors.d.ts.map +1 -1
  115. package/dist/video/errors.js +24 -0
  116. package/dist/video/errors.js.map +1 -1
  117. package/dist/video/execute.d.ts.map +1 -1
  118. package/dist/video/execute.js +4 -0
  119. package/dist/video/execute.js.map +1 -1
  120. package/dist/video/execution-adapter.d.ts +30 -0
  121. package/dist/video/execution-adapter.d.ts.map +1 -0
  122. package/dist/video/execution-adapter.js +140 -0
  123. package/dist/video/execution-adapter.js.map +1 -0
  124. package/dist/video/execution-character-locks.d.ts +24 -0
  125. package/dist/video/execution-character-locks.d.ts.map +1 -0
  126. package/dist/video/execution-character-locks.js +54 -0
  127. package/dist/video/execution-character-locks.js.map +1 -0
  128. package/dist/video/execution-plan.d.ts +7 -0
  129. package/dist/video/execution-plan.d.ts.map +1 -1
  130. package/dist/video/execution-plan.js +3 -1
  131. package/dist/video/execution-plan.js.map +1 -1
  132. package/dist/video/execution-profile.d.ts +1 -0
  133. package/dist/video/execution-profile.d.ts.map +1 -1
  134. package/dist/video/execution-profile.js +38 -10
  135. package/dist/video/execution-profile.js.map +1 -1
  136. package/dist/video/execution-runtime.d.ts +3 -48
  137. package/dist/video/execution-runtime.d.ts.map +1 -1
  138. package/dist/video/execution-runtime.js +118 -280
  139. package/dist/video/execution-runtime.js.map +1 -1
  140. package/dist/video/execution-status.d.ts +35 -0
  141. package/dist/video/execution-status.d.ts.map +1 -1
  142. package/dist/video/execution-status.js +76 -16
  143. package/dist/video/execution-status.js.map +1 -1
  144. package/dist/video/filmmaking-prompts.d.ts +28 -2
  145. package/dist/video/filmmaking-prompts.d.ts.map +1 -1
  146. package/dist/video/filmmaking-prompts.js +70 -76
  147. package/dist/video/filmmaking-prompts.js.map +1 -1
  148. package/dist/video/final-media.d.ts.map +1 -1
  149. package/dist/video/final-media.js +34 -7
  150. package/dist/video/final-media.js.map +1 -1
  151. package/dist/video/flow-media-url.d.ts +143 -0
  152. package/dist/video/flow-media-url.d.ts.map +1 -0
  153. package/dist/video/flow-media-url.js +195 -0
  154. package/dist/video/flow-media-url.js.map +1 -0
  155. package/dist/video/gen-image-flow.d.ts.map +1 -1
  156. package/dist/video/gen-image-flow.js +20 -8
  157. package/dist/video/gen-image-flow.js.map +1 -1
  158. package/dist/video/keyframe-qc.d.ts +142 -0
  159. package/dist/video/keyframe-qc.d.ts.map +1 -0
  160. package/dist/video/keyframe-qc.js +472 -0
  161. package/dist/video/keyframe-qc.js.map +1 -0
  162. package/dist/video/lip-sync.d.ts +136 -0
  163. package/dist/video/lip-sync.d.ts.map +1 -0
  164. package/dist/video/lip-sync.js +219 -0
  165. package/dist/video/lip-sync.js.map +1 -0
  166. package/dist/video/mograph/beats.d.ts +46 -0
  167. package/dist/video/mograph/beats.d.ts.map +1 -0
  168. package/dist/video/mograph/beats.js +159 -0
  169. package/dist/video/mograph/beats.js.map +1 -0
  170. package/dist/video/mograph/execute.d.ts +81 -0
  171. package/dist/video/mograph/execute.d.ts.map +1 -0
  172. package/dist/video/mograph/execute.js +53 -0
  173. package/dist/video/mograph/execute.js.map +1 -0
  174. package/dist/video/mograph/logos.d.ts +41 -0
  175. package/dist/video/mograph/logos.d.ts.map +1 -0
  176. package/dist/video/mograph/logos.js +65 -0
  177. package/dist/video/mograph/logos.js.map +1 -0
  178. package/dist/video/mograph/pack.d.ts +67 -0
  179. package/dist/video/mograph/pack.d.ts.map +1 -0
  180. package/dist/video/mograph/pack.js +406 -0
  181. package/dist/video/mograph/pack.js.map +1 -0
  182. package/dist/video/mograph/plan.d.ts +77 -0
  183. package/dist/video/mograph/plan.d.ts.map +1 -0
  184. package/dist/video/mograph/plan.js +146 -0
  185. package/dist/video/mograph/plan.js.map +1 -0
  186. package/dist/video/mograph/sheet.d.ts +46 -0
  187. package/dist/video/mograph/sheet.d.ts.map +1 -0
  188. package/dist/video/mograph/sheet.js +194 -0
  189. package/dist/video/mograph/sheet.js.map +1 -0
  190. package/dist/video/mograph/style-families.d.ts +43 -0
  191. package/dist/video/mograph/style-families.d.ts.map +1 -0
  192. package/dist/video/mograph/style-families.js +154 -0
  193. package/dist/video/mograph/style-families.js.map +1 -0
  194. package/dist/video/mograph/types.d.ts +135 -0
  195. package/dist/video/mograph/types.d.ts.map +1 -0
  196. package/dist/video/mograph/types.js +10 -0
  197. package/dist/video/mograph/types.js.map +1 -0
  198. package/dist/video/motion-overlay/v2v-transport.d.ts +5 -0
  199. package/dist/video/motion-overlay/v2v-transport.d.ts.map +1 -1
  200. package/dist/video/motion-overlay/v2v-transport.js +36 -5
  201. package/dist/video/motion-overlay/v2v-transport.js.map +1 -1
  202. package/dist/video/multi-shot-prompt.d.ts +52 -1
  203. package/dist/video/multi-shot-prompt.d.ts.map +1 -1
  204. package/dist/video/multi-shot-prompt.js +140 -17
  205. package/dist/video/multi-shot-prompt.js.map +1 -1
  206. package/dist/video/music-video.d.ts +21 -0
  207. package/dist/video/music-video.d.ts.map +1 -1
  208. package/dist/video/music-video.js +19 -1
  209. package/dist/video/music-video.js.map +1 -1
  210. package/dist/video/narrate.d.ts.map +1 -1
  211. package/dist/video/narrate.js +11 -3
  212. package/dist/video/narrate.js.map +1 -1
  213. package/dist/video/native-dreamina.d.ts +10 -0
  214. package/dist/video/native-dreamina.d.ts.map +1 -1
  215. package/dist/video/native-dreamina.js +93 -29
  216. package/dist/video/native-dreamina.js.map +1 -1
  217. package/dist/video/native-flow-r2v.d.ts +16 -0
  218. package/dist/video/native-flow-r2v.d.ts.map +1 -1
  219. package/dist/video/native-flow-r2v.js +54 -8
  220. package/dist/video/native-flow-r2v.js.map +1 -1
  221. package/dist/video/native-runway.d.ts.map +1 -1
  222. package/dist/video/native-runway.js +57 -13
  223. package/dist/video/native-runway.js.map +1 -1
  224. package/dist/video/native-veo.d.ts.map +1 -1
  225. package/dist/video/native-veo.js +23 -3
  226. package/dist/video/native-veo.js.map +1 -1
  227. package/dist/video/optical-register.d.ts +27 -0
  228. package/dist/video/optical-register.d.ts.map +1 -0
  229. package/dist/video/optical-register.js +66 -0
  230. package/dist/video/optical-register.js.map +1 -0
  231. package/dist/video/preview-portal/shared-assets.d.ts +1 -1
  232. package/dist/video/preview-portal/shared-assets.d.ts.map +1 -1
  233. package/dist/video/preview-portal/shared-assets.js +1 -1
  234. package/dist/video/prompt-lint.d.ts +1 -1
  235. package/dist/video/prompt-lint.d.ts.map +1 -1
  236. package/dist/video/prompt-lint.js +34 -0
  237. package/dist/video/prompt-lint.js.map +1 -1
  238. package/dist/video/prompt-quality.d.ts +20 -1
  239. package/dist/video/prompt-quality.d.ts.map +1 -1
  240. package/dist/video/prompt-quality.js +51 -5
  241. package/dist/video/prompt-quality.js.map +1 -1
  242. package/dist/video/prompt-rules.d.ts +10 -0
  243. package/dist/video/prompt-rules.d.ts.map +1 -1
  244. package/dist/video/prompt-rules.js +21 -0
  245. package/dist/video/prompt-rules.js.map +1 -1
  246. package/dist/video/provider-platform/route-capabilities.d.ts.map +1 -1
  247. package/dist/video/provider-platform/route-capabilities.js +7 -2
  248. package/dist/video/provider-platform/route-capabilities.js.map +1 -1
  249. package/dist/video/provider-status.d.ts.map +1 -1
  250. package/dist/video/provider-status.js +14 -2
  251. package/dist/video/provider-status.js.map +1 -1
  252. package/dist/video/providers/dreamina-useapi.d.ts +18 -1
  253. package/dist/video/providers/dreamina-useapi.d.ts.map +1 -1
  254. package/dist/video/providers/dreamina-useapi.js +10 -0
  255. package/dist/video/providers/dreamina-useapi.js.map +1 -1
  256. package/dist/video/providers/google-flow.d.ts +15 -0
  257. package/dist/video/providers/google-flow.d.ts.map +1 -1
  258. package/dist/video/providers/google-flow.js +18 -2
  259. package/dist/video/providers/google-flow.js.map +1 -1
  260. package/dist/video/providers/runway-useapi.d.ts +5 -4
  261. package/dist/video/providers/runway-useapi.d.ts.map +1 -1
  262. package/dist/video/providers/runway-useapi.js.map +1 -1
  263. package/dist/video/providers/xskill.d.ts +6 -3
  264. package/dist/video/providers/xskill.d.ts.map +1 -1
  265. package/dist/video/providers/xskill.js +7 -4
  266. package/dist/video/providers/xskill.js.map +1 -1
  267. package/dist/video/readiness.d.ts +14 -1
  268. package/dist/video/readiness.d.ts.map +1 -1
  269. package/dist/video/readiness.js +14 -2
  270. package/dist/video/readiness.js.map +1 -1
  271. package/dist/video/review-ui-media-proxy.d.ts +15 -0
  272. package/dist/video/review-ui-media-proxy.d.ts.map +1 -0
  273. package/dist/video/review-ui-media-proxy.js +184 -0
  274. package/dist/video/review-ui-media-proxy.js.map +1 -0
  275. package/dist/video/review-ui-server.d.ts +35 -0
  276. package/dist/video/review-ui-server.d.ts.map +1 -0
  277. package/dist/video/review-ui-server.js +272 -0
  278. package/dist/video/review-ui-server.js.map +1 -0
  279. package/dist/video/review-ui.d.ts +9 -0
  280. package/dist/video/review-ui.d.ts.map +1 -1
  281. package/dist/video/review-ui.js +20 -262
  282. package/dist/video/review-ui.js.map +1 -1
  283. package/dist/video/scene-headcount.d.ts +52 -0
  284. package/dist/video/scene-headcount.d.ts.map +1 -0
  285. package/dist/video/scene-headcount.js +122 -0
  286. package/dist/video/scene-headcount.js.map +1 -0
  287. package/dist/video/scene-selection.d.ts +19 -0
  288. package/dist/video/scene-selection.d.ts.map +1 -1
  289. package/dist/video/scene-selection.js +38 -0
  290. package/dist/video/scene-selection.js.map +1 -1
  291. package/dist/video/seedance-content-filter.d.ts.map +1 -1
  292. package/dist/video/seedance-content-filter.js +63 -4
  293. package/dist/video/seedance-content-filter.js.map +1 -1
  294. package/dist/video/sfx.d.ts.map +1 -1
  295. package/dist/video/sfx.js +6 -1
  296. package/dist/video/sfx.js.map +1 -1
  297. package/dist/video/show-preflight.d.ts.map +1 -1
  298. package/dist/video/show-preflight.js +18 -1
  299. package/dist/video/show-preflight.js.map +1 -1
  300. package/dist/video/soundtrack.d.ts.map +1 -1
  301. package/dist/video/soundtrack.js +8 -1
  302. package/dist/video/soundtrack.js.map +1 -1
  303. package/dist/video/style-register.d.ts +82 -0
  304. package/dist/video/style-register.d.ts.map +1 -0
  305. package/dist/video/style-register.js +509 -0
  306. package/dist/video/style-register.js.map +1 -0
  307. package/dist/video/vocal-map.d.ts +18 -0
  308. package/dist/video/vocal-map.d.ts.map +1 -1
  309. package/dist/video/vocal-map.js +22 -1
  310. package/dist/video/vocal-map.js.map +1 -1
  311. package/dist/video/workspace.d.ts +12 -0
  312. package/dist/video/workspace.d.ts.map +1 -1
  313. package/dist/video/workspace.js +24 -0
  314. package/dist/video/workspace.js.map +1 -1
  315. package/docs/ASSEMBLE.md +9 -0
  316. package/docs/CAPABILITIES.md +279 -0
  317. package/docs/CLI_REFERENCE.md +340 -9
  318. package/docs/CONCIERGE_PROMPT.md +12 -4
  319. package/docs/MOGRAPH.md +200 -0
  320. package/docs/OPERATIONS.md +40 -0
  321. package/docs/PRODUCTION_WORKFLOW.md +19 -0
  322. package/docs/RELEASE_READINESS.md +16 -0
  323. package/docs/SKILLS.md +36 -0
  324. package/package.json +18 -6
  325. package/references/video/multi-shot-framework.md +84 -3
  326. package/references/video/seedance-transport-payloads.md +93 -3
  327. package/schemas/video/artifacts/clip-qc.schema.json +73 -0
  328. package/schemas/video/artifacts/keyframe-qc.schema.json +82 -0
  329. package/schemas/video/artifacts/motion-pack.schema.json +74 -0
  330. package/schemas/video/artifacts/motion-sheet.schema.json +99 -0
  331. package/schemas/video/artifacts/shot-table.schema.json +313 -0
  332. package/schemas/video/artifacts/storyboard.schema.json +4 -0
  333. package/schemas/video/errors.json +13 -1
  334. package/skills/3d-animation-short/SKILL.md +315 -0
  335. package/skills/README.md +24 -0
  336. package/skills/ai-filmmaking/SKILL.md +82 -5
  337. package/skills/brand-explainer/SKILL.md +125 -0
  338. package/skills/catalog.json +53 -10
  339. package/skills/concierge/SKILL.md +12 -4
  340. package/skills/garden-days/SKILL.md +258 -0
  341. package/skills/mograph/SKILL.md +202 -0
  342. package/skills/multi-shot-prompt/SKILL.md +15 -5
  343. package/skills/rap-avatar-mv/SKILL.md +690 -0
  344. package/skills/rhyme-factory/SKILL.md +157 -0
  345. package/skills/seedance-prompts/SKILL.md +105 -0
  346. package/skills/story-bible-builder/SKILL.md +120 -0
  347. package/src/video/artifacts.ts +8 -0
  348. package/src/video/assemble/assemble.ts +205 -29
  349. package/src/video/assemble/media-qc.ts +227 -8
  350. package/src/video/assemble/pdf.ts +0 -1
  351. package/src/video/assemble/stitch.ts +281 -17
  352. package/src/video/assemble/title-card.ts +1 -1
  353. package/src/video/assemble/types.ts +59 -0
  354. package/src/video/audio-platform/measure.ts +63 -0
  355. package/src/video/category-registry.ts +10 -1
  356. package/src/video/character-auto-create.ts +107 -52
  357. package/src/video/cinematography.ts +136 -0
  358. package/src/video/cli-schema.ts +97 -11
  359. package/src/video/clip-qc.ts +349 -0
  360. package/src/video/dialogue.ts +8 -1
  361. package/src/video/environment-auto-create.ts +27 -5
  362. package/src/video/errors.ts +24 -0
  363. package/src/video/execute.ts +4 -0
  364. package/src/video/execution-adapter.ts +185 -0
  365. package/src/video/execution-character-locks.ts +56 -0
  366. package/src/video/execution-plan.ts +14 -2
  367. package/src/video/execution-profile.ts +43 -10
  368. package/src/video/execution-runtime.ts +140 -365
  369. package/src/video/execution-status.ts +76 -13
  370. package/src/video/filmmaking-prompts.ts +89 -78
  371. package/src/video/final-media.ts +33 -7
  372. package/src/video/flow-media-url.ts +241 -0
  373. package/src/video/gen-image-flow.ts +21 -8
  374. package/src/video/keyframe-qc.ts +548 -0
  375. package/src/video/lip-sync.ts +288 -0
  376. package/src/video/mograph/beats.ts +189 -0
  377. package/src/video/mograph/execute.ts +127 -0
  378. package/src/video/mograph/logos.ts +97 -0
  379. package/src/video/mograph/pack.ts +476 -0
  380. package/src/video/mograph/plan.ts +213 -0
  381. package/src/video/mograph/sheet.ts +234 -0
  382. package/src/video/mograph/style-families.ts +185 -0
  383. package/src/video/mograph/types.ts +156 -0
  384. package/src/video/motion-overlay/v2v-transport.ts +36 -6
  385. package/src/video/multi-shot-prompt.ts +164 -16
  386. package/src/video/music-video.ts +53 -1
  387. package/src/video/narrate.ts +12 -3
  388. package/src/video/native-dreamina.ts +99 -24
  389. package/src/video/native-flow-r2v.ts +63 -6
  390. package/src/video/native-runway.ts +65 -10
  391. package/src/video/native-veo.ts +23 -3
  392. package/src/video/optical-register.ts +86 -0
  393. package/src/video/preview-portal/shared-assets.ts +1 -1
  394. package/src/video/prompt-lint.ts +44 -1
  395. package/src/video/prompt-quality.ts +56 -6
  396. package/src/video/prompt-rules.ts +20 -0
  397. package/src/video/provider-platform/route-capabilities.ts +7 -2
  398. package/src/video/provider-status.ts +15 -2
  399. package/src/video/providers/dreamina-useapi.ts +21 -1
  400. package/src/video/providers/google-flow.ts +38 -3
  401. package/src/video/providers/runway-useapi.ts +7 -4
  402. package/src/video/providers/xskill.ts +8 -5
  403. package/src/video/readiness.ts +28 -1
  404. package/src/video/review-ui-media-proxy.ts +189 -0
  405. package/src/video/review-ui-server.ts +306 -0
  406. package/src/video/review-ui.ts +48 -287
  407. package/src/video/scene-headcount.ts +163 -0
  408. package/src/video/scene-selection.ts +48 -0
  409. package/src/video/seedance-content-filter.ts +64 -4
  410. package/src/video/sfx.ts +7 -1
  411. package/src/video/show-preflight.ts +22 -1
  412. package/src/video/soundtrack.ts +8 -1
  413. package/src/video/style-register.ts +684 -0
  414. package/src/video/vocal-map.ts +36 -1
  415. package/src/video/workspace.ts +29 -0
  416. package/docs/assets/vclaw-review-ui-desktop-after-stage-gate.png +0 -0
  417. package/docs/assets/vclaw-review-ui-mobile-after-stage-gate.png +0 -0
  418. package/src/video/assemble/.omc/state/sessions/3a741ceb-9c9f-4c48-a46f-a33edb5dcdc1/pre-tool-advisory-throttle.json +0 -14
  419. package/src/video/preview-portal/.omc/state/sessions/2fdd28da-2e8b-4462-a451-750b206c53e1/pre-tool-advisory-throttle.json +0 -18
package/CLAUDE.md CHANGED
@@ -110,12 +110,25 @@ setup, or review surface — and before creating a new command — work through
110
110
  live job exists (`execute-status` → `live-submitted` + a candidate + a
111
111
  `.vclaw-jobs/*.json` file), and then the actual output downloaded + QC'd (frame
112
112
  + whisper). If you tell the user something is happening, prove it (a job id /
113
- status / a frame) — do not assert progress you have not checked. Corollary —
114
- **clear stale outputs before any re-render:** a changed scene prompt plus an old
115
- `outputs/scene-N.mp4` makes the resumable driver SKIP that scene and you verify
116
- the wrong/old clip. Delete stale outputs (and re-select winners that the
117
- restructure orphaned) first; a `scene-selection-missing` block silently refuses
118
- every produce.
113
+ status / a frame) — do not assert progress you have not checked.
114
+
115
+ **QC the whole clip, not one frame.** A single mid-frame grab is not
116
+ verification: it passed 8 clips whose defect (extra figures walking in from the
117
+ frame edges) only began around the four-second mark, and the operator found it
118
+ on screen after delivery. Use `vclaw video clip-qc`, or a filmstrip —
119
+ `ffmpeg -i clip.mp4 -vf "fps=1,scale=200:-1,tile=8x1" strip.jpg` renders every
120
+ second in one pass. `consistency-audit` (one mid-frame, identity) and
121
+ `motion-qc` (nine frames, morph/vanish) are advisory and never block, so read
122
+ their findings rather than treating silence as clean.
123
+
124
+ **Re-render corollary — deleting the clip does NOT force a re-render.** The
125
+ resumable drivers resume from the **scene-selection artifact**, never from
126
+ disk, so a changed prompt plus a deleted `outputs/scene-N.mp4` yields
127
+ `skipped, attempts=0` and no provider call at all. Clear the selection with
128
+ `vclaw video reroll-scene --project <slug> --scene <i> --void` (it voids all
129
+ four stores atomically). After any re-render read the **per-scene statuses**,
130
+ not the file count — a silent no-op looks exactly like success from the
131
+ outside.
119
132
 
120
133
  When in doubt, the on-disk project and its artifacts win over anything you
121
134
  remember.
@@ -248,7 +261,7 @@ Adapters receive JSON on stdin and must return JSON on stdout (`externalJobId` f
248
261
 
249
262
  For `seedance-direct`, `veo-useapi`, `runway-useapi`, and `dreamina-useapi`, `vclaw` ships a built-in adapter binary (`dist/cli/provider-adapter.js`) used automatically unless the full `..._ADAPTER` override is set. The built-in adapters read route-specific `..._SUBMIT_CMD` / `..._POLL_CMD` / `..._CANCEL_CMD` command shims. Routes also have native in-process transports: `native-seedance.ts` (uses `SUTUI_API_KEY`), `native-veo.ts` (drives the local `vclaw-cli` Bun package), `native-runway.ts` (pure Node fetch + fs, UseAPI bearer auth), `native-dreamina.ts` (pure Node fetch + fs, UseAPI bearer auth).
250
263
 
251
- **`dreamina-useapi` = Seedance 2.0 / Dreamina via useapi.net.** Dreamina (CapCut/ByteDance Seed) exposes the Seedance family (`seedance-2.0` default, `-2.0-fast`, `-2.0-mini`, `-1.5-pro`, `-1.0-pro`, `-1.0-mini`, `-1.0-fast`) and `sora2` through useapi.net; CA-region accounts unlock 1080p Seedance 2.0 (and 4k on `seedance-2.0` as of 2026-06-26 — opted into route-locally via `VCLAW_DREAMINA_RESOLUTION=4k`, since the shared execution profile only expresses 720p/1080p; the transport clamps 4k→1080p on non-seedance-2.0 models and →720p on the 720p-only ones). `-2.0-fast`/`-2.0-mini`/`sora2` are 720p-only. `native-dreamina.ts` reuses the **same `USEAPI_API_TOKEN`** as runway-useapi (no new token) and reads the account from `VCLAW_DREAMINA_ACCOUNT` (e.g. `CA:ai@example.com`), region from `VCLAW_DREAMINA_REGION` (default `CA`), and model from `VCLAW_DREAMINA_MODEL` (default `seedance-2.0`); the route adapter override is `VCLAW_DREAMINA_USEAPI_ADAPTER`. The account is registered server-side out-of-band (`POST /accounts` with `{email,password,region,maxJobs}`), so submit only needs the account id + token. For image-to-video, the first image reference is uploaded via `POST /dreamina/assets/<account>` to obtain an `assetRef`, which is passed as `firstFrameRef` on `POST /dreamina/videos` (first_frame mode auto-detects aspect ratio from the image); poll uses `GET /dreamina/videos/<jobid>` (`status: created → completed|failed`) and downloads `response.videoUrl`. Like runway-useapi, real human faces are rejected by Seedance moderation — describe stylized characters by visual descriptor.
264
+ **`dreamina-useapi` = Seedance 2.0 / Dreamina via useapi.net.** Dreamina (CapCut/ByteDance Seed) exposes the Seedance family (`seedance-2.0` default, `-2.0-fast`, `-2.0-mini`, `-1.5-pro`, `-1.0-pro`, `-1.0-mini`, `-1.0-fast`) and `sora2` through useapi.net; CA-region accounts unlock 1080p Seedance 2.0 (and 4k on `seedance-2.0` as of 2026-06-26 — opted into route-locally via `VCLAW_DREAMINA_RESOLUTION=4k`, since the shared execution profile only expresses 720p/1080p; the transport clamps 4k→1080p on non-seedance-2.0 models and →720p on the 720p-only ones). `-2.0-fast`/`-2.0-mini`/`sora2` are 720p-only. `native-dreamina.ts` reuses the **same `USEAPI_API_TOKEN`** as runway-useapi (no new token) and reads the account from `VCLAW_DREAMINA_ACCOUNT` (e.g. `CA:ai@example.com`), region from `VCLAW_DREAMINA_REGION` (default `CA`), and model from `VCLAW_DREAMINA_MODEL` (default `seedance-2.0`); the route adapter override is `VCLAW_DREAMINA_USEAPI_ADAPTER`. The account is registered server-side out-of-band (`POST /accounts` with `{email,password,region,maxJobs}`), so submit only needs the account id + token. For image-to-video, the first image reference is uploaded via `POST /dreamina/assets/<account>` to obtain an `assetRef`, which is passed as `firstFrameRef` on `POST /dreamina/videos` (first_frame mode auto-detects aspect ratio from the image); a scene's `endKeyframePath` (the same field the runway route uses) uploads a second frame passed as `endFrameRef` alongside `firstFrameRef` → **end_frame mode**, where the clip animates first→end (two stills → one continuous shot); poll uses `GET /dreamina/videos/<jobid>` (`status: created → completed|failed`) and downloads `response.videoUrl`. Like runway-useapi, real human faces are rejected by Seedance moderation — describe stylized characters by visual descriptor.
252
265
 
253
266
  **Seedance character consistency = the Asset Library, not raw URLs.** `ark/seedance-2.0` (the official Volcengine Ark Seedance 2.0, Standard = 1080p) locks character identity via managed **Asset Library avatars** (`Asset://` URIs), NOT raw photoreal image URLs (those trip the "real person" content filter and don't lock identity). `src/video/seedance-asset-library.ts` (`vclaw video seedance-register-assets`) registers character images as Assets, waits for international-profile sync, and writes `artifacts/seedance-assets.json` (canonical schema `schemas/video/artifacts/seedance-assets.schema.json`; shape `{ schemaVersion, projectSlug, groupName, generatedAt, assets:[{name, assetId, assetUri, intlAssetUri}] }`); `readSeedanceAssets(workspaceRoot, slug)` reads it back into a name→`Asset://`-URI map (graceful when absent). On the `seedance-direct` route only, `buildExecutionPayload` (`execution-runtime.ts`) auto-resolves each scene's `referencePaths` from that artifact by matching `scene.characters` names → their `Asset://` URIs (a project without the artifact behaves as before); `native-seedance.ts`'s `seedanceReferenceParams` then routes `Asset://` references into `reference_images`. References are capped at ≤9 image / ≤3 video / ≤3 audio per submission via `assertReferenceBudget`, preflighted across the whole payload in `submitSeedanceDirectNative` before any submit (fail-fast, no partial submission). Describe characters by visual descriptor (not proper names) in prompts — names don't survive across generations. (Validated 2026-05-29 against the same Ark endpoint the user's production project uses.) `@Name` tags in scene prompts (`resolveAssetTags` in `prompt-rules.ts`, lookup via `asset-tag-lookup.ts` `buildAssetTagLookup`) resolve at `buildExecutionPayload` time to the character's visual descriptor (text) + its saved reference (`Asset://`/image), merged through `resolveSceneReferencePaths`; unresolved tags strip the `@` and warn (never fatal), `@imageN` positional bindings are reserved, and it runs before `stripProperNames`. `@location` tags resolve via locked environment plates: `vclaw video environment-auto-create` (`src/video/environment-auto-create.ts`, mirrors `character-auto-create`) generates seamless no-people location plates and writes `artifacts/environment-assets.json` (own schema, like seedance-assets); `readEnvironmentAssets` (`environment-assets.ts`) feeds `buildAssetTagLookup`'s `environmentsByName` so `@tokyo-alley` resolves to the plate descriptor + ref (absent → graceful no-op).
254
267
 
@@ -270,6 +283,10 @@ The repeatable cartoon-SHOW production system (from the Jack-Vs-AI workflow). `v
270
283
 
271
284
  `vclaw video motion-overlay --input <video>` turns an existing talking-head video into a reel with speech-synced motion-graphics overlays. Pipeline: ingest → transcribe (Gemini STT) → slice into ≤10s takes → compose overlay prompts (retention principles + concept→animation metaphor map live as deterministic code, not markdown) → render via one of four layouts (`split|overlay|motion-only|avatar-host`). Render transports: Omni Flash V2V (moderation-prone on person footage), **local** per-frame render (`render-local.ts`/`animate*.ts` — word reveal, count-up, gauge fill), and `avatar-host` (locked go-bananas character via `--gb-character <Name:ID>`, pin+chain identity). Plan/dry by default; spend requires `--execute --confirm-spend`; retry/resume self-heals probabilistic Flow moderation. See `docs/MOTION_OVERLAY.md`.
272
285
 
286
+ ### Mograph — style-locked motion graphics (`src/video/mograph/`)
287
+
288
+ `vclaw video mograph-sheet` / `mograph-pack` / `mograph-render` / `mograph-logos` generate fleets of motion-graphics clips that share ONE look: a **motion sheet** (`artifacts/motion-sheet.json` — master style-board image + ≤120-word style lock carrying the do-NOT-copy-the-sheet-layout guard + a negative ending in the five audio bans) locks the style once, and a **motion pack** (`artifacts/motion-pack.json` — coverage map + action-only `B###` blocks, P1/P2/P3, `t2v|ref2v|v2v-*` modes) carries pure choreography. `mograph-pack --check` is the anti-drift gate (style words/hex codes banned from actions, quoted on-screen text ≤4 words, SFX-never-music, coverage integrity); `mograph-render` is PLAN-ONLY — it assembles `style lock + SHOT + AUDIO + AVOID` per block and `--emit-batch` compiles a batch-queue manifest for the existing `batch-submit`/`batch-monitor` machinery (refs ride in `characterRefs`, the REFERENCE slot; v2v blocks are set aside for omni-flash or prompt-only, never dropped silently). Creative authoring lives in `skills/mograph/SKILL.md`; contract in `docs/MOGRAPH.md`; design spec in `docs/design/specs/2026-07-13-mograph-native-port.md`. Native port of a licensed external skill's concepts — original wording only, the purchased pack is never committed.
289
+
273
290
  ### Audio platform (`src/video/audio-platform/`)
274
291
 
275
292
  `narrate`, `dialogue`, `sfx`, and `soundtrack` are backend-pluggable audio commands over a backend registry (`registry.ts`): TTS via `gemini-tts`/`elevenlabs-tts`, SFX via ElevenLabs, music via `lyria` (Vertex), `lyria3` (Gemini API, key-based), `flowmusic` (Lyria 3 Pro vocals via useapi.net), and Suno. All spend-gated: without `--confirm-spend` they exit 3 with `spend_confirmation_required` (`--dry-run` to plan). `assemble` consumes their outputs via the mix-plan (dialogue + SFX mixed at stitch; `assemble/narration-fit.ts` handles TTS-vs-video timing).
@@ -303,13 +320,34 @@ Two handler families cover the finishing lane. `handlers/media-production.ts`: `
303
320
  - `check:skill-frontdoor` deliberately ignores `skills/seedance-prompts/SKILL.md` and the three presenter skills (`bunty`, `davendra-presenter`, `nex-presenter`) because their docs legitimately reference the legacy Python pipeline scripts. Don't "fix" the ignore list — it's load-bearing.
304
321
  - Do not commit secrets, `.env.local`, provider cookies, or `.omx/` state (already gitignored).
305
322
 
323
+ ## Start in your own worktree
324
+
325
+ Sessions share this repo's `.git`. Two in the MAIN checkout also share its
326
+ working tree, index, HEAD and `dist/` — which on 2026-08-01 absorbed one
327
+ session's uncommitted work into another's commit, wiped `dist/` mid-test-run
328
+ (322 phantom failures), and switched the branch under an in-flight commit. A
329
+ worktree gives a session its own copy of all four.
330
+
331
+ Run `scripts/new-session.sh <name> [branch]` before doing anything else. It
332
+ builds `.claude/worktrees/<name>` off a freshly fetched `origin/main`, links
333
+ `node_modules`, proves the link resolves, and prints the `cd`. Stage explicit
334
+ paths when committing, so a commit holds only what you touched.
335
+
336
+ Working in the main checkout is fine when you are certain you are the only
337
+ session. When you are not certain, you are not.
338
+
339
+ `scripts/hooks/install.sh` activates a `pre-commit` guard: it blocks a commit
340
+ made directly on `main`, and warns when you commit from the main checkout while
341
+ another worktree holds uncommitted work. Both are advisory-on-error and skippable
342
+ with `VCLAW_SKIP_GUARD=1` — a guard that wrongly blocks just gets deleted.
343
+
306
344
  ## Autonomy directive (from AGENTS.md)
307
345
 
308
346
  Proceed by default on obvious next steps. Keep work scoped to this repository and its generated `projects/<slug>/` folders. If a blocker is local and solvable, solve it; if it's external, note it and continue with the next meaningful lane rather than pausing for confirmation.
309
347
 
310
348
  ## Recommended reading order
311
349
 
312
- `docs/ARCHITECTURE.md` → `docs/CLI_REFERENCE.md` → `docs/STUDIO.md` → `docs/ASSEMBLE.md` → `docs/PRODUCTION_WORKFLOW.md` → `docs/REVIEW_UI_STORYBOARD_WORKFLOW.md` → `docs/preview-portal-audit.md` → `docs/STORY_BIBLE.md` → `docs/DIRECTOR_BLUEPRINT.md` → `docs/MOTION_OVERLAY.md` → `docs/REFERENCE_SHEETS.md` → `docs/SCENE_CANDIDATES.md` → `docs/OPERATIONS.md` → `docs/GENERATION_TELEMETRY.md` → `docs/OBSIDIAN.md` → `docs/TEMPLATES.md` → `docs/MIGRATION.md` → `docs/DEPRECATION.md` → `docs/RELEASE_READINESS.md` → `docs/MASTER_PLAN_ALIGNMENT.md` → `docs/DIAGRAMS_SOURCE.md`.
350
+ `docs/ARCHITECTURE.md` → `docs/CLI_REFERENCE.md` → `docs/STUDIO.md` → `docs/ASSEMBLE.md` → `docs/PRODUCTION_WORKFLOW.md` → `docs/REVIEW_UI_STORYBOARD_WORKFLOW.md` → `docs/preview-portal-audit.md` → `docs/STORY_BIBLE.md` → `docs/DIRECTOR_BLUEPRINT.md` → `docs/MOTION_OVERLAY.md` → `docs/MOGRAPH.md` → `docs/REFERENCE_SHEETS.md` → `docs/SCENE_CANDIDATES.md` → `docs/OPERATIONS.md` → `docs/GENERATION_TELEMETRY.md` → `docs/OBSIDIAN.md` → `docs/TEMPLATES.md` → `docs/MIGRATION.md` → `docs/DEPRECATION.md` → `docs/RELEASE_READINESS.md` → `docs/MASTER_PLAN_ALIGNMENT.md` → `docs/DIAGRAMS_SOURCE.md`.
313
351
 
314
352
  Architecture decision records live in `docs/adr/` (no-silent-fallback across routes, on-disk project as source of truth, Seedance identity via Asset Library, director-mode approval gate) — consult them before relitigating those decisions.
315
353
 
package/README.md CHANGED
@@ -21,6 +21,8 @@ A command-line tool (`vclaw`) that takes a plain-English idea like *"a 15-second
21
21
  The complete, idiot-proof **and** agent-ready docs: an [interactive guide](https://videoclaw-docs.vercel.app/guide/), a page for [**every feature**](https://videoclaw-docs.vercel.app/features/) (30+), a [recipe book](https://videoclaw-docs.vercel.app/guide/what-videos) of what you can make, the [skills catalog](https://videoclaw-docs.vercel.app/skills/), and all the deep [reference docs](https://videoclaw-docs.vercel.app/reference/) — with diagrams throughout.
22
22
 
23
23
  > **New here?** The easiest path is to **[drive it by talking to Claude Code](https://videoclaw-docs.vercel.app/guide/with-claude-code)** (or any agent host); there's a dedicated [how-it-works page for agents](https://videoclaw-docs.vercel.app/for-agents/) too.
24
+ >
25
+ > **Agents working in this repo:** read [`docs/CAPABILITIES.md`](docs/CAPABILITIES.md) (or [`llms.txt`](llms.txt)) — a one-read capability manifest: what videoclaw can produce, the provider routes, the spend-safety model, and the full command index. Run `vclaw schema --json` for exact flags.
24
26
  > Once you're in Claude Code in this repo, just type **`/concierge`** (or **`/clawbot`**) — or say *"make me a video"* — and **Clawbot**, VideoClaw's mascot and concierge, walks you from idea to finished film, with a preview and your approval before anything costs money.
25
27
 
26
28
  <a href="https://videoclaw-docs.vercel.app/"><img src="./docs/assets/docsite-preview.png" alt="videoclaw documentation site — make AI videos by just talking" width="100%" /></a>
@@ -152,6 +154,7 @@ No global install? Run it on demand with `npx -p videoclaw@alpha vclaw video pro
152
154
  ```bash
153
155
  git clone https://github.com/davendra/videoclaw-v3 && cd videoclaw-v3
154
156
  npm install # Node 20+
157
+ python3 -m pip install -r requirements-test.txt # Python 3.9+ test helpers
155
158
  npm run build # compile the CLI
156
159
  npm test # run the full test suite
157
160
  node dist/cli/vclaw.js video providers # show which AI providers are ready
@@ -436,7 +439,9 @@ workflow documented in
436
439
  [`docs/REFERENCE_VIDEO_SEEDANCE_MOTION_DESIGN_WORKFLOW.md`](https://videoclaw-docs.vercel.app/reference/REFERENCE_VIDEO_SEEDANCE_MOTION_DESIGN_WORKFLOW).
437
440
  Use its director defaults to save a production ledger that follows the
438
441
  still-frame-first, start/end-frame, bridge-pose, variant-pass, and post-retiming
439
- recipe.
442
+ recipe. It binds to loopback by default and uses a one-time launch token plus an
443
+ HttpOnly session cookie; non-loopback hosts require an explicit `--allow-remote`,
444
+ and wildcard binds are refused. Treat the printed launch URL as a credential.
440
445
 
441
446
  `review-autopilot` lets the agent do that handoff without manual clicks once
442
447
  storyboard still candidates exist. It locks the best available stills, promotes
@@ -460,12 +465,16 @@ regenerated automatically on every `produce`/`execute` and `execute-status` poll
460
465
  `analyze` · `analyze-template` · `template-create` · `template-save` · `template-list` · `template-show` · `template-validate` · `clone-plan` · `clone-init` · `clone-ad` · `clone-execute` · `storyboard-from-clone` · `storyboard-template-list` · `storyboard-template-show`
461
466
 
462
467
  ### Character subsystem
463
- `character-add` · `character-list` · `character-show` · `character-consistency` · `consistency-audit` · `motion-qc` · `character-auto-create` · `environment-auto-create` · `character-import-library` · `find-library` · `library find` · `library clean` · `list-library` · `seedance-register-assets` · `flow-register-characters` · `flow-register-voices` · `voice-clone` · `show-bible` · `show-preflight`
468
+ `character-add` · `character-list` · `character-show` · `character-consistency` · `consistency-audit` · `motion-qc` · `clip-qc` · `keyframe-qc` · `character-auto-create` · `environment-auto-create` · `character-import-library` · `find-library` · `library find` · `library clean` · `list-library` · `seedance-register-assets` · `flow-register-characters` · `flow-register-voices` · `voice-clone` · `show-bible` · `show-preflight`
464
469
 
465
470
  `consistency-audit` is the **automated character identity/costume vision audit**: for each rendered scene it extracts a representative mid-frame and asks an (injectable, Gemini-backed) vision client whether each registered scene character still matches its locked reference face/hair AND costume/colours, plus a deterministic dark-border check and an extra-figure flag — catching wardrobe/identity drift (a dhoti rendering crimson in one scene and tan in another) BEFORE a render is presented as done. It writes `consistency-audit.json` and also runs advisory/non-fatal at the end of a real `produce`/`execute` run when a Gemini key is configured.
466
471
 
467
472
  `motion-qc` is its sibling for **rendering artifacts a still-frame QC pass is blind to**: it samples K dense frames per rendered clip (default 9) and runs a per-frame lane (breath-vapour condensation puffs, film grain rendering as drifting fog over dark regions) plus an adjacent-pair lane (objects/faces **morphing** between moments, solid props **vanishing** mid-clip — anchored on the scene keyframe when bound). Conservative prompts, advisory on transport failure, `clipChecked:false` for image-only/unrendered scenes. Writes `motion-artifact-qc.json`; requires a Gemini vision key. See `docs/CLI_REFERENCE.md`.
468
473
 
474
+ `clip-qc` is the third lane: a **per-second headcount** over every rendered clip. `consistency-audit` samples one mid-frame and `motion-qc` looks for morph/vanish artefacts — neither counts people, so invented, duplicated, or edge-entering cast is invisible to both (eight clips of a 37-shot film shipped that way). Flags `headcount-variance` (the count changes mid-clip) and `headcount-exceeds-cast` (more people than the scene names), and writes a filmstrip contact sheet per clip to `projects/<slug>/qc/` — that lane needs no vision key. Writes `clip-qc.json`. See `docs/CLI_REFERENCE.md`.
475
+
476
+ `keyframe-qc` is the **fail-fast PRE-render keyframe readiness gate** — deterministic and offline (pure Node PNG IHDR header parse; no vision model, no spend). Given the storyboard's scene count it verifies every scene has `references/scene<i>-keyframe.png`, that each is a readable PNG, and that all keyframes share the dominant WxH; a missing storyboard, missing/unreadable keyframe, or dimension mismatch fails the gate (exit 3, GATE) so an `&&` chain halts BEFORE `produce` spends on drifted keyframes. A uniform-but-non-1280x720 set passes with an advisory. Writes `keyframe-qc.json`.
477
+
469
478
  ### Portfolio · ops · reporting
470
479
  `list` · `index` · `metrics` · `workload` · `next-actions` · `dependencies` · `status` · `doctor-project` · `doctor-portfolio` · `report` · `report-snapshot` · `report-history` · `report-diff` · `trends` · `export-csv` · `artifact-history` · `verify-env` · `cost-estimate`
471
480
 
@@ -485,6 +494,9 @@ regenerated automatically on every `produce`/`execute` and `execute-status` poll
485
494
  ### Multi-shot prompt
486
495
  `multi-shot` — scaffold / validate / Gemini-author timecoded multi-shot cinematic prompts, with preset discovery, storyboard scene hydration, provider-shaped defaults, and parsed shot artifacts ([docs](https://videoclaw-docs.vercel.app/reference/CLI_REFERENCE))
487
496
 
497
+ ### Motion graphics (style-locked)
498
+ `mograph-sheet` · `mograph-pack` · `mograph-render` · `mograph-logos` — lock a motion-graphics look ONCE in a motion sheet (master style board + ≤120-word style lock), turn the VO into a coverage-mapped pack of action-only P1/P2/P3 blocks, lint them against style drift, and compile batch-eligible blocks into a batch-queue manifest for overnight rendering ([docs](https://videoclaw-docs.vercel.app/reference/MOGRAPH))
499
+
488
500
  ### Director & brand layer
489
501
  `director-blueprint` — validate + persist the project visual bible (`artifacts/project-blueprint.json`); `filmmaking-prompts` auto-appends a prose `DIRECTOR` addendum when present ([docs](https://videoclaw-docs.vercel.app/reference/DIRECTOR_BLUEPRINT)) · `brand-definition` — validate + persist the locked brand system (`artifacts/brand-definition.json`: palette/voice/typography/theme map, strict `#RRGGBB` hex validation); `filmmaking-prompts` auto-appends a prose `BRAND` line when present ([docs](https://videoclaw-docs.vercel.app/reference/BRAND_AGENCY))
490
502
 
@@ -507,6 +519,7 @@ Two recent additions are worth calling out because they fix the two things that
507
519
  - **Diegetic stills** (`vclaw video gen-image`) — generate an in-world **prop**, on-screen **screen** (UI/dashboard), or **overlay** graphic (e.g. a "SYSTEM COMPROMISED" alert) into `assets/props/`. Three backends via `--backend`: **gobananas** (default, `GO_BANANAS_API_KEY`, no OpenAI key), **openai** (gpt-image), and **flow** — Google Flow via useapi.net (`USEAPI_API_TOKEN` + `USEAPI_ACCOUNT_EMAIL`): `imagen-4` / `nano-banana` / `nano-banana-pro` auto-selected by reference count, repeated `--ref` (`reference_1..10`, local paths upload first) + `--character` (`character_1..7`, names resolve via `flow-characters.json`) slots, `--count`/`--seed`, and inline `@reference_N`/`@character_N` prompt markers validated **before any upload or spend**. Per-kind render directives (screens/overlays keep text, props suppress it); `--dry-run` prints the composed request with no spend. Composite it onto footage with the assemble overlay builders. Full guide: [`docs/CLI_REFERENCE.md`](https://videoclaw-docs.vercel.app/reference/CLI_REFERENCE).
508
520
  - **Motion-graphics overlays** (`vclaw video overlay`) — composite a graphic onto a clip (time-gated, faded, positioned — pairs with `gen-image` to drop a generated screen/alert onto footage, **font-free + real-render validated**), or burn a pulsing `--alert` / boxed `--lower-third` caption (FFmpeg `drawtext`, needs a libfreetype build). `--dry-run` prints the planned ffmpeg command. Full guide: [`docs/CLI_REFERENCE.md`](https://videoclaw-docs.vercel.app/reference/CLI_REFERENCE).
509
521
  - **Motion-overlay reels** (`vclaw video motion-overlay`) — turn an existing **talking-head video** into a reel with **motion-graphics overlays synced to the speech** via Google Flow's **Omni Flash V2V** (kinetic typography / icons / metaphors painted on the footage, original voice preserved). Plan/dry by default — ingest → Gemini STT (or `--transcript`) → sentence-boundary slice into ≤10s takes → per-take overlay-prompt composition → work folder + manifest + `--preview` review surface, **no spend**. `--execute --confirm-spend` renders each take (V2V → audio-restore → clip-stitch). Four layouts (`split` / `overlay` / `motion-only` / `avatar-host`); the `avatar-host` layout fills the frame with an **identity-locked character host** (go-bananas `generate_with_character` → Veo I2V) and needs `--gb-character <Name:ID>`. Full guide: [`docs/MOTION_OVERLAY.md`](https://videoclaw-docs.vercel.app/reference/MOTION_OVERLAY).
522
+ - **Style-locked motion graphics** (`vclaw video mograph-sheet` / `mograph-pack` / `mograph-render` / `mograph-logos`) — generate **fleets of explainer B-roll clips that share one look with zero drift**. A **motion sheet** (master style-board image + ≤120-word style lock, persisted as `artifacts/motion-sheet.json`) locks the visual system ONCE; a **motion pack** turns the VO into time-coded, **action-only** blocks tagged P1/P2/P3, gated by an anti-drift lint (style words and hex codes are banned from choreography). `mograph-render` is plan-only — it assembles `style lock + SHOT + AUDIO + AVOID` per block and compiles a **batch-queue manifest** for `batch-submit`/`batch-monitor` (free explore lane by default); v2v modes route to omni-flash. Clips carry **sound design only** (never music/VO — they sit under your own narration). Full guide: [`docs/MOGRAPH.md`](https://videoclaw-docs.vercel.app/reference/MOGRAPH).
510
523
 
511
524
  - **Music videos** (`vclaw video music-video`) — the **vocal-synced, beat-exact assembler**. From a hand-authored config (song + clip registry + B-roll pools + an explicit vocal map *or* a transcript it auto-classifies into rap / hook / instrumental / outro by **word density**), it pins each performer to **their own vocal** time-aligned across B-roll cutaways (lips stay locked to the muxed song), cuts every segment **frame-exact** (`-frames:v`, never `-t`, so there is **zero cumulative drift**), then concats + applies one grade pass + muxes the song. **Fully local — ffmpeg only, no provider, no spend.** Plan/dry by default; `--execute` renders and asserts the built master matches the plan within one frame. Full guide: [`docs/CLI_REFERENCE.md`](https://videoclaw-docs.vercel.app/reference/CLI_REFERENCE).
512
525
 
@@ -635,6 +648,7 @@ Every stage writes a canonical JSON artifact under `projects/<slug>/artifacts/`.
635
648
  - **character consistency** → `character-consistency.json`
636
649
  - **consistency audit** → `consistency-audit.json`
637
650
  - **motion-artifact QC** → `motion-artifact-qc.json`
651
+ - **keyframe QC** → `keyframe-qc.json`
638
652
 
639
653
  Artifacts are append-only via `artifacts/history/` and every write emits a machine-readable event to `events/events.jsonl`.
640
654
 
@@ -647,6 +661,10 @@ Unit + CLI contract tests run via `node:test`:
647
661
  ```bash
648
662
  npm test # build + full suite
649
663
  npm run test:node # rerun compiled tests only
664
+ npm run test:coverage # critical security/execution coverage gate
665
+ npm run lint # source safety/style checks
666
+ npm run check:module-size # prevent oversized-module growth
667
+ npm run check:test-python # verify Pillow/fonttools test prerequisites
650
668
  node --test dist/tests/cli-full-flow.test.js # single test file
651
669
  ```
652
670
 
@@ -1655,7 +1655,13 @@
1655
1655
  const asset = (path) => {
1656
1656
  const raw = String(path || "");
1657
1657
  if (!raw) return "";
1658
- if (/^https?:\/\//.test(raw)) return `/api/media-proxy?url=${encodeURIComponent(raw)}`;
1658
+ if (/^https?:\/\//.test(raw)) {
1659
+ const canonical = new URL(raw).href;
1660
+ const mediaId = inventory.remoteMediaIds?.[canonical];
1661
+ if (!mediaId) return "";
1662
+ const project = new URLSearchParams(window.location.search).get("project") || "";
1663
+ return `/api/media-proxy?project=${encodeURIComponent(project)}&id=${encodeURIComponent(mediaId)}`;
1664
+ }
1659
1665
  let normalized = raw;
1660
1666
  if (inventory.root && normalized.startsWith(inventory.root)) {
1661
1667
  normalized = normalized.slice(inventory.root.length).replace(/^\/+/, "");
@@ -1706,6 +1712,7 @@
1706
1712
 
1707
1713
  const inventory = {
1708
1714
  root: "",
1715
+ remoteMediaIds: {},
1709
1716
  projects: [
1710
1717
  { id: "fresh-proof", name: "fresh-proof", path: "projects/fresh-proof", status: "empty scaffold" }
1711
1718
  ],
@@ -1848,6 +1855,9 @@
1848
1855
  next.mediaAssets = Array.isArray(api.mediaAssets)
1849
1856
  ? api.mediaAssets.map((item) => item.path)
1850
1857
  : inventory.mediaAssets;
1858
+ next.remoteMediaIds = api.remoteMediaIds && typeof api.remoteMediaIds === "object"
1859
+ ? api.remoteMediaIds
1860
+ : {};
1851
1861
  next.referenceSheets = api.referenceSheets || { sheets: [] };
1852
1862
  next.sceneCandidates = api.sceneCandidates || { scenes: [] };
1853
1863
  next.sceneSelection = api.sceneSelection || { scenes: [] };
package/dist/cli/args.js CHANGED
@@ -146,12 +146,12 @@ export function parseSceneCharacters(args) {
146
146
  for (const assignment of assignments) {
147
147
  const separatorIndex = assignment.indexOf(':');
148
148
  if (separatorIndex < 0) {
149
- throw new Error(`Invalid --scene-character value: "${assignment}". Expected sceneIndex:name`);
149
+ throw new VclawError('invalid_flag_value', `Invalid --scene-character value: "${assignment}". Expected sceneIndex:name`, { flag: '--scene-character', value: assignment });
150
150
  }
151
151
  const sceneIndex = Number(assignment.slice(0, separatorIndex));
152
152
  const name = assignment.slice(separatorIndex + 1).trim();
153
153
  if (!Number.isInteger(sceneIndex) || sceneIndex < 0 || !name) {
154
- throw new Error(`Invalid --scene-character value: "${assignment}". Expected sceneIndex:name`);
154
+ throw new VclawError('invalid_flag_value', `Invalid --scene-character value: "${assignment}". Expected sceneIndex:name`, { flag: '--scene-character', value: assignment });
155
155
  }
156
156
  const current = charactersByScene.get(sceneIndex) ?? [];
157
157
  current.push(name);
@@ -174,10 +174,10 @@ export function parseSceneColorStates(args) {
174
174
  const sceneIndex = separatorIndex >= 0 ? Number(assignment.slice(0, separatorIndex)) : NaN;
175
175
  const gradeId = separatorIndex >= 0 ? assignment.slice(separatorIndex + 1).trim() : '';
176
176
  if (!Number.isInteger(sceneIndex) || sceneIndex < 0 || !gradeId) {
177
- throw new Error(`Invalid --scene-color value: "${assignment}". Expected sceneIndex:gradeId`);
177
+ throw new VclawError('invalid_flag_value', `Invalid --scene-color value: "${assignment}". Expected sceneIndex:gradeId`, { flag: '--scene-color', value: assignment });
178
178
  }
179
179
  if (!GRADE_FILTER_IDS.includes(gradeId)) {
180
- throw new Error(`Invalid --scene-color grade "${gradeId}". Known grades: ${GRADE_FILTER_IDS.join(', ')}`);
180
+ throw new VclawError('invalid_flag_value', `Invalid --scene-color grade "${gradeId}". Known grades: ${GRADE_FILTER_IDS.join(', ')}`, { flag: '--scene-color', value: assignment });
181
181
  }
182
182
  colorByScene.set(sceneIndex, gradeId);
183
183
  }
@@ -196,7 +196,7 @@ export function parseSceneVoicePresets(args) {
196
196
  const sceneIndex = separatorIndex >= 0 ? Number(assignment.slice(0, separatorIndex)) : NaN;
197
197
  const preset = separatorIndex >= 0 ? assignment.slice(separatorIndex + 1).trim() : '';
198
198
  if (!Number.isInteger(sceneIndex) || sceneIndex < 0 || !preset) {
199
- throw new Error(`Invalid --scene-voice value: "${assignment}". Expected sceneIndex:preset`);
199
+ throw new VclawError('invalid_flag_value', `Invalid --scene-voice value: "${assignment}". Expected sceneIndex:preset`, { flag: '--scene-voice', value: assignment });
200
200
  }
201
201
  voiceByScene.set(sceneIndex, preset);
202
202
  }
@@ -216,7 +216,7 @@ export function parseSceneRefVideos(args) {
216
216
  const sceneIndex = separatorIndex >= 0 ? Number(assignment.slice(0, separatorIndex)) : NaN;
217
217
  const mediaId = separatorIndex >= 0 ? assignment.slice(separatorIndex + 1).trim() : '';
218
218
  if (!Number.isInteger(sceneIndex) || sceneIndex < 0 || !mediaId) {
219
- throw new Error(`Invalid --scene-ref-video value: "${assignment}". Expected sceneIndex:mediaId`);
219
+ throw new VclawError('invalid_flag_value', `Invalid --scene-ref-video value: "${assignment}". Expected sceneIndex:mediaId`, { flag: '--scene-ref-video', value: assignment });
220
220
  }
221
221
  refVideoByScene.set(sceneIndex, mediaId);
222
222
  }
@@ -235,7 +235,7 @@ export function parseSceneFirstFrames(args) {
235
235
  for (const token of assignment.split(',')) {
236
236
  const sceneIndex = Number(token.trim());
237
237
  if (!Number.isInteger(sceneIndex) || sceneIndex < 0) {
238
- throw new Error(`Invalid --scene-first-frame value: "${assignment}". Expected sceneIndex or sceneIndex,sceneIndex`);
238
+ throw new VclawError('invalid_flag_value', `Invalid --scene-first-frame value: "${assignment}". Expected sceneIndex or sceneIndex,sceneIndex`, { flag: '--scene-first-frame', value: assignment });
239
239
  }
240
240
  firstFrameScenes.add(sceneIndex);
241
241
  }
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"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"}
@@ -18,4 +18,28 @@ export declare function handleVideoConsistencyAudit(args: string[]): Promise<voi
18
18
  * operator knows the audit could not actually look at the frames.
19
19
  */
20
20
  export declare function handleVideoMotionQc(args: string[]): Promise<void>;
21
+ /**
22
+ * `vclaw video keyframe-qc` — fail-fast pre-render keyframe readiness gate.
23
+ * Deterministic and offline (pure Node fs, PNG IHDR header parse — no vision
24
+ * model, no spend): given the storyboard's scene count it verifies every scene
25
+ * has `references/scene<i>-keyframe.png`, that each is a readable PNG, and that
26
+ * all keyframes share the dominant WxH. Persists `artifacts/keyframe-qc.json`
27
+ * and exits `ExitCode.GATE` (3) on status 'fail' so an `&&` chain or driver
28
+ * halts BEFORE `produce` spends on drifted/missing keyframes. A uniform but
29
+ * non-1280x720 set is advisory-only ('pass'). `--json` keeps the same
30
+ * machine-readable output (it always emits JSON).
31
+ */
32
+ export declare function handleVideoKeyframeQc(args: string[]): Promise<void>;
33
+ /**
34
+ * `vclaw video clip-qc` — per-second headcount over every rendered clip.
35
+ *
36
+ * The gap it fills: `consistency-audit` samples ONE mid-frame (identity) and
37
+ * `motion-qc` samples nine looking for morph/vanish artefacts. Neither counts
38
+ * people, so a figure walking into frame at t≈4s is invisible to both — and to
39
+ * the single-frame grabs an operator does by hand. Eight clips shipped that way.
40
+ *
41
+ * The filmstrip lane runs WITHOUT a vision key, because the contact sheet is
42
+ * what a human actually reads and is what exposed the original defect.
43
+ */
44
+ export declare function handleVideoClipQc(args: string[]): Promise<void>;
21
45
  //# sourceMappingURL=analysis.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/analysis.ts"],"names":[],"mappings":"AA6BA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEtE;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3E;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/E;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CvE"}
1
+ {"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/analysis.ts"],"names":[],"mappings":"AAgCA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuEtE;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB3E;AAED;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/E;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CvE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BzE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsHrE"}
@@ -20,6 +20,8 @@ import { appendVideoContextChangelog } from '../../video/video-context.js';
20
20
  import { scrapeSite, runBrandExtraction, createBrandDnaArtifact, writeBrandDnaArtifact, } from '../../video/brand-dna.js';
21
21
  import { auditProjectConsistency, hasVisionKey } from '../../video/consistency-audit.js';
22
22
  import { auditMotionArtifacts, DEFAULT_MOTION_QC_SAMPLE_COUNT } from '../../video/motion-artifact-qc.js';
23
+ import { runKeyframeQc } from '../../video/keyframe-qc.js';
24
+ import { ExitCode } from '../../video/cli-output.js';
23
25
  export async function handleVideoAnalyze(args) {
24
26
  const slug = parseProjectSlugFlag(args);
25
27
  const source = parseFlagValue(args, '--source');
@@ -178,4 +180,165 @@ export async function handleVideoMotionQc(args) {
178
180
  await appendVideoContextChangelog(root, `${report.generatedAt} motion-qc: ${report.ok ? 'ok' : `${report.findings.length} finding(s)`} for project ${slug}.`);
179
181
  process.stdout.write(`${JSON.stringify({ workspace, artifactPath, report }, null, 2)}\n`);
180
182
  }
183
+ /**
184
+ * `vclaw video keyframe-qc` — fail-fast pre-render keyframe readiness gate.
185
+ * Deterministic and offline (pure Node fs, PNG IHDR header parse — no vision
186
+ * model, no spend): given the storyboard's scene count it verifies every scene
187
+ * has `references/scene<i>-keyframe.png`, that each is a readable PNG, and that
188
+ * all keyframes share the dominant WxH. Persists `artifacts/keyframe-qc.json`
189
+ * and exits `ExitCode.GATE` (3) on status 'fail' so an `&&` chain or driver
190
+ * halts BEFORE `produce` spends on drifted/missing keyframes. A uniform but
191
+ * non-1280x720 set is advisory-only ('pass'). `--json` keeps the same
192
+ * machine-readable output (it always emits JSON).
193
+ */
194
+ export async function handleVideoKeyframeQc(args) {
195
+ const slug = parseProjectSlugFlag(args);
196
+ if (!slug) {
197
+ throw new VclawError('missing_required_flag', 'video keyframe-qc requires --project <slug>', { missing: ['--project'] });
198
+ }
199
+ const root = resolveWorkspaceRoot(args);
200
+ const workspace = await ensureProjectWorkspace(slug, root);
201
+ // --cast adds the vision pass: is every character a shot LISTS actually in
202
+ // that shot's keyframe? Opt-in because it costs one call per character per
203
+ // scene, while the rest of this gate is deterministic and free.
204
+ const report = await runKeyframeQc(root, slug, args.includes('--cast') ? { checkCast: true } : {});
205
+ const artifactPath = join(workspace.artifactsDir, 'keyframe-qc.json');
206
+ await writeTextFileAtomic(artifactPath, `${JSON.stringify(report, null, 2)}\n`);
207
+ await appendProjectEvent(workspace, {
208
+ type: 'artifact.keyframe-qc.written',
209
+ recordedAt: report.generatedAt,
210
+ payload: { artifactPath, status: report.status, findings: report.findings.length },
211
+ });
212
+ await appendVideoContextChangelog(root, `${report.generatedAt} keyframe-qc: ${report.status === 'pass' ? 'pass' : `${report.findings.length} finding(s)`} for project ${slug}.`);
213
+ process.stdout.write(`${JSON.stringify({ workspace, artifactPath, report }, null, 2)}\n`);
214
+ if (report.status === 'fail') {
215
+ process.exitCode = ExitCode.GATE;
216
+ }
217
+ }
218
+ /**
219
+ * `vclaw video clip-qc` — per-second headcount over every rendered clip.
220
+ *
221
+ * The gap it fills: `consistency-audit` samples ONE mid-frame (identity) and
222
+ * `motion-qc` samples nine looking for morph/vanish artefacts. Neither counts
223
+ * people, so a figure walking into frame at t≈4s is invisible to both — and to
224
+ * the single-frame grabs an operator does by hand. Eight clips shipped that way.
225
+ *
226
+ * The filmstrip lane runs WITHOUT a vision key, because the contact sheet is
227
+ * what a human actually reads and is what exposed the original defect.
228
+ */
229
+ export async function handleVideoClipQc(args) {
230
+ const slug = parseProjectSlugFlag(args);
231
+ if (!slug) {
232
+ throw new VclawError('missing_required_flag', 'video clip-qc requires --project <slug>', {
233
+ missing: ['--project'],
234
+ });
235
+ }
236
+ const root = resolveWorkspaceRoot(args);
237
+ const samplesFlag = parseFlagValue(args, '--samples');
238
+ let sampleCount = 8;
239
+ if (samplesFlag !== undefined) {
240
+ const parsed = Number(samplesFlag);
241
+ if (!Number.isInteger(parsed) || parsed < 2 || parsed > 24) {
242
+ throw new VclawError('invalid_flag_value', 'video clip-qc --samples must be an integer between 2 and 24', {
243
+ flag: '--samples',
244
+ value: samplesFlag,
245
+ });
246
+ }
247
+ sampleCount = parsed;
248
+ }
249
+ const workspace = await ensureProjectWorkspace(slug, root);
250
+ const { readFile: readFileAsync, mkdir, mkdtemp, rm } = await import('node:fs/promises');
251
+ const { existsSync } = await import('node:fs');
252
+ const { tmpdir } = await import('node:os');
253
+ const { extractFrames } = await import('../../video/motion-overlay/ingest.js');
254
+ const { auditClipHeadcount, createDefaultClipQcFrameClient } = await import('../../video/clip-qc.js');
255
+ const { extractAssetTagNames } = await import('../../video/prompt-rules.js');
256
+ const { listCharacterProfiles } = await import('../../video/characters.js');
257
+ // Expected cast per scene: the storyboard's `characters` field UNION the
258
+ // @tags that resolve to a registered character (a `--scene`-authored
259
+ // storyboard carries no characters field at all, so tags are the common case).
260
+ const storyboardPath = join(workspace.artifactsDir, 'storyboard.json');
261
+ const knownNames = new Set((await listCharacterProfiles(workspace)).map((profile) => profile.name.toLowerCase()));
262
+ const expectedBySceneIndex = new Map();
263
+ if (existsSync(storyboardPath)) {
264
+ const storyboard = JSON.parse(await readFileAsync(storyboardPath, 'utf-8'));
265
+ for (const [index, scene] of (storyboard.scenes ?? []).entries()) {
266
+ const sceneIndex = scene.sceneIndex ?? index;
267
+ const named = new Set();
268
+ for (const name of scene.characters ?? [])
269
+ named.add(name.trim().toLowerCase());
270
+ for (const tag of extractAssetTagNames(scene.description ?? '')) {
271
+ if (knownNames.has(tag.toLowerCase()))
272
+ named.add(tag.toLowerCase());
273
+ }
274
+ if (named.size > 0)
275
+ expectedBySceneIndex.set(sceneIndex, named.size);
276
+ }
277
+ }
278
+ const outputsDir = join(workspace.projectDir, 'outputs');
279
+ const qcDir = join(workspace.projectDir, 'qc');
280
+ const clips = [];
281
+ for (let sceneIndex = 0; sceneIndex < 500; sceneIndex++) {
282
+ const clipPath = join(outputsDir, `scene-${sceneIndex}.mp4`);
283
+ if (existsSync(clipPath))
284
+ clips.push({ sceneIndex, clipPath });
285
+ }
286
+ if (clips.length === 0) {
287
+ process.stdout.write(`${JSON.stringify({ slug, status: 'skipped', reason: 'no rendered scene clips found', outputsDir }, null, 2)}\n`);
288
+ return;
289
+ }
290
+ await mkdir(qcDir, { recursive: true });
291
+ const visionAvailable = hasVisionKey();
292
+ const frameDir = await mkdtemp(join(tmpdir(), 'vclaw-clip-qc-'));
293
+ try {
294
+ const sources = [];
295
+ for (const clip of clips) {
296
+ let framePaths = [];
297
+ if (visionAvailable) {
298
+ const sceneFrameDir = join(frameDir, `scene-${clip.sceneIndex}`);
299
+ await mkdir(sceneFrameDir, { recursive: true });
300
+ // 8s is the standard clip length; extractFrames only needs it to pick fps.
301
+ const names = await extractFrames(clip.clipPath, sceneFrameDir, 8, sampleCount);
302
+ framePaths = names.map((name) => join(sceneFrameDir, name)).filter((path) => existsSync(path));
303
+ }
304
+ sources.push({
305
+ sceneIndex: clip.sceneIndex,
306
+ clipPath: clip.clipPath,
307
+ filmstripPath: join(qcDir, `scene-${clip.sceneIndex}-filmstrip.jpg`),
308
+ ...(expectedBySceneIndex.has(clip.sceneIndex)
309
+ ? { expectedCast: expectedBySceneIndex.get(clip.sceneIndex) }
310
+ : {}),
311
+ framePaths,
312
+ });
313
+ }
314
+ const { runFfmpeg } = await import('../../video/assemble/ffmpeg.js');
315
+ const report = await auditClipHeadcount(slug, sources, {
316
+ sampleCount,
317
+ ...(visionAvailable ? { frameClient: createDefaultClipQcFrameClient() } : {}),
318
+ runFfmpeg: async (ffmpegArgs) => {
319
+ await runFfmpeg(ffmpegArgs);
320
+ },
321
+ });
322
+ const artifactPath = join(workspace.artifactsDir, 'clip-qc.json');
323
+ await writeTextFileAtomic(artifactPath, `${JSON.stringify(report, null, 2)}\n`);
324
+ await appendProjectEvent(workspace, {
325
+ type: 'artifact.clip-qc.written',
326
+ recordedAt: report.generatedAt,
327
+ payload: { artifactPath, ok: report.ok, findings: report.findings.length },
328
+ });
329
+ process.stdout.write(`${JSON.stringify({
330
+ artifactPath,
331
+ qcDir,
332
+ headcountLane: visionAvailable ? 'on' : 'off (no Gemini vision key — filmstrips only)',
333
+ ...report,
334
+ }, null, 2)}\n`);
335
+ // Headcount findings are advisory, so a clean exit here is correct: this
336
+ // command triages (which filmstrips to open), it does not gate a build.
337
+ if (!report.ok)
338
+ process.exitCode = ExitCode.GATE;
339
+ }
340
+ finally {
341
+ await rm(frameDir, { recursive: true, force: true });
342
+ }
343
+ }
181
344
  //# sourceMappingURL=analysis.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../src/cli/handlers/analysis.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../src/cli/handlers/analysis.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAC7G,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAIrD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAc;IACrD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAChD,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,oEAAoE,CAAC,CAAC;IACtH,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAClE,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,CAA0C,CAAC;IACtG,MAAM,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,SAAS,CAA8D,CAAC;IAC5H,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACrD,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,IAAI;QACnB,CAAC,CAAC,MAAM,+BAA+B,CAAC;YACpC,MAAM;YACN,KAAK;YACL,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/D,CAAC;QACJ,CAAC,CAAC,mBAAmB,CAAC;YAClB,SAAS,EAAE;gBACT,MAAM;gBACN,KAAK;gBACL,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;aAC/D;YACD,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM;gBACb,KAAK,EAAE,EAAE;aACV;YACD,SAAS,EAAE;gBACT,KAAK;aACN;YACD,oBAAoB,EAAE;gBACpB,WAAW,EAAE,MAAM;gBACnB,KAAK,EAAE,EAAE;aACV;YACD,IAAI;YACJ,MAAM;YACN,iBAAiB;SAClB,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAChF,MAAM,oBAAoB,CAAC,SAAS,EAAE;QACpC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE;YACT,gBAAgB,EAAE,YAAY;SAC/B;QACD,OAAO,EAAE,uCAAuC;QAChD,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,+DAA+D;KAC5E,CAAC,CAAC;IACH,MAAM,kBAAkB,CAAC,SAAS,EAAE;QAClC,IAAI,EAAE,iCAAiC;QACvC,UAAU,EAAE,QAAQ,CAAC,WAAW;QAChC,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;KAClC,CAAC,CAAC;IACH,MAAM,0BAA0B,CAAC,SAAS,EAAE;QAC1C,SAAS,EAAE,QAAQ,CAAC,WAAW;QAC/B,YAAY,EAAE,YAAY;QAC1B,kBAAkB,EAAE,OAAO;QAC3B,oBAAoB,EAAE,WAAW;KAClC,CAAC,CAAC;IACH,MAAM,2BAA2B,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,WAAW,iCAAiC,KAAK,iBAAiB,IAAI,GAAG,CAAC,CAAC;IAC/H,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,IAAc;IAC1D,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,IAAI,UAAU,CAClB,uBAAuB,EACvB,mEAAmE,EACnE,EAAE,OAAO,EAAE,CACZ,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,SAAS,CAAC;IACxE,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACzF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACtE,MAAM,2BAA2B,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,SAAS,kDAAkD,IAAI,SAAS,GAAG,GAAG,CAAC,CAAC;IACpI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,IAAc;IAC9D,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAClB,uBAAuB,EACvB,mDAAmD,EACnD,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAClB,iBAAiB,EACjB,wHAAwH,EACxH,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,CAC/C,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IAC5E,MAAM,mBAAmB,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,kBAAkB,CAAC,SAAS,EAAE;QAClC,IAAI,EAAE,oCAAoC;QAC1C,UAAU,EAAE,MAAM,CAAC,WAAW;QAC9B,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;KAC3E,CAAC,CAAC;IACH,MAAM,2BAA2B,CAC/B,IAAI,EACJ,GAAG,MAAM,CAAC,WAAW,uBAAuB,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa,gBAAgB,IAAI,GAAG,CAC7H,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAAc;IACtD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAClB,uBAAuB,EACvB,2CAA2C,EAC3C,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAClB,iBAAiB,EACjB,+GAA+G,EAC/G,EAAE,GAAG,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,EAAE,CAC/C,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACtD,IAAI,WAAW,GAAG,8BAA8B,CAAC;IACjD,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,UAAU,CAClB,oBAAoB,EACpB,+DAA+D,EAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,CAC1C,CAAC;QACJ,CAAC;QACD,WAAW,GAAG,MAAM,CAAC;IACvB,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,yBAAyB,CAAC,CAAC;IAC7E,MAAM,mBAAmB,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,kBAAkB,CAAC,SAAS,EAAE;QAClC,IAAI,EAAE,qCAAqC;QAC3C,UAAU,EAAE,MAAM,CAAC,WAAW;QAC9B,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;KAC3E,CAAC,CAAC;IACH,MAAM,2BAA2B,CAC/B,IAAI,EACJ,GAAG,MAAM,CAAC,WAAW,eAAe,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa,gBAAgB,IAAI,GAAG,CACrH,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,IAAc;IACxD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAClB,uBAAuB,EACvB,6CAA6C,EAC7C,EAAE,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAC3B,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,2EAA2E;IAC3E,2EAA2E;IAC3E,gEAAgE;IAChE,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACnG,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACtE,MAAM,mBAAmB,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,MAAM,kBAAkB,CAAC,SAAS,EAAE;QAClC,IAAI,EAAE,8BAA8B;QACpC,UAAU,EAAE,MAAM,CAAC,WAAW;QAC9B,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;KACnF,CAAC,CAAC;IACH,MAAM,2BAA2B,CAC/B,IAAI,EACJ,GAAG,MAAM,CAAC,WAAW,iBAAiB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa,gBAAgB,IAAI,GAAG,CACxI,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1F,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAc;IACpD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,UAAU,CAAC,uBAAuB,EAAE,yCAAyC,EAAE;YACvF,OAAO,EAAE,CAAC,WAAW,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACtD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;YAC3D,MAAM,IAAI,UAAU,CAAC,oBAAoB,EAAE,6DAA6D,EAAE;gBACxG,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,WAAW;aACnB,CAAC,CAAC;QACL,CAAC;QACD,WAAW,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3D,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzF,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,sCAAsC,CAAC,CAAC;IAC/E,MAAM,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACtG,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;IAC7E,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAE5E,yEAAyE;IACzE,qEAAqE;IACrE,+EAA+E;IAC/E,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,CAAC,MAAM,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACtF,CAAC;IACF,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvD,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,aAAa,CAAC,cAAc,EAAE,OAAO,CAAC,CAEzE,CAAC;QACF,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACjE,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,IAAI,EAAE;gBAAE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAChF,KAAK,MAAM,GAAG,IAAI,oBAAoB,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;gBAChE,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;oBAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;gBAAE,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAoD,EAAE,CAAC;IAClE,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,GAAG,EAAE,UAAU,EAAE,EAAE,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,UAAU,MAAM,CAAC,CAAC;QAC7D,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,+BAA+B,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACvI,OAAO;IACT,CAAC;IAED,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,MAAM,eAAe,GAAG,YAAY,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,UAAU,GAAa,EAAE,CAAC;YAC9B,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACjE,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAChD,2EAA2E;gBAC3E,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;gBAChF,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,aAAa,EAAE,IAAI,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,UAAU,gBAAgB,CAAC;gBACpE,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;oBAC3C,CAAC,CAAC,EAAE,YAAY,EAAE,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAE,EAAE;oBAC9D,CAAC,CAAC,EAAE,CAAC;gBACP,UAAU;aACX,CAAC,CAAC;QACL,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QACrE,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE;YACrD,WAAW;YACX,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,SAAS,EAAE,KAAK,EAAE,UAAoB,EAAE,EAAE;gBACxC,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;QAClE,MAAM,mBAAmB,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAChF,MAAM,kBAAkB,CAAC,SAAS,EAAE;YAClC,IAAI,EAAE,0BAA0B;YAChC,UAAU,EAAE,MAAM,CAAC,WAAW;YAC9B,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;SAC3E,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACrC,YAAY;YACZ,KAAK;YACL,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,8CAA8C;YACtF,GAAG,MAAM;SACV,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,yEAAyE;QACzE,wEAAwE;QACxE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC"}