videoclaw 3.0.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1452) hide show
  1. package/AGENTS.md +165 -0
  2. package/CLAUDE.md +232 -0
  3. package/LICENSE +36 -0
  4. package/README.md +737 -0
  5. package/dist/cli/args.d.ts +59 -0
  6. package/dist/cli/args.d.ts.map +1 -0
  7. package/dist/cli/args.js +279 -0
  8. package/dist/cli/args.js.map +1 -0
  9. package/dist/cli/handlers/analysis.d.ts +3 -0
  10. package/dist/cli/handlers/analysis.d.ts.map +1 -0
  11. package/dist/cli/handlers/analysis.js +111 -0
  12. package/dist/cli/handlers/analysis.js.map +1 -0
  13. package/dist/cli/handlers/audio.d.ts +25 -0
  14. package/dist/cli/handlers/audio.d.ts.map +1 -0
  15. package/dist/cli/handlers/audio.js +321 -0
  16. package/dist/cli/handlers/audio.js.map +1 -0
  17. package/dist/cli/handlers/batch.d.ts +4 -0
  18. package/dist/cli/handlers/batch.d.ts.map +1 -0
  19. package/dist/cli/handlers/batch.js +424 -0
  20. package/dist/cli/handlers/batch.js.map +1 -0
  21. package/dist/cli/handlers/candidates.d.ts +10 -0
  22. package/dist/cli/handlers/candidates.d.ts.map +1 -0
  23. package/dist/cli/handlers/candidates.js +389 -0
  24. package/dist/cli/handlers/candidates.js.map +1 -0
  25. package/dist/cli/handlers/character.d.ts +8 -0
  26. package/dist/cli/handlers/character.d.ts.map +1 -0
  27. package/dist/cli/handlers/character.js +202 -0
  28. package/dist/cli/handlers/character.js.map +1 -0
  29. package/dist/cli/handlers/clone.d.ts +5 -0
  30. package/dist/cli/handlers/clone.d.ts.map +1 -0
  31. package/dist/cli/handlers/clone.js +303 -0
  32. package/dist/cli/handlers/clone.js.map +1 -0
  33. package/dist/cli/handlers/create.d.ts +5 -0
  34. package/dist/cli/handlers/create.d.ts.map +1 -0
  35. package/dist/cli/handlers/create.js +635 -0
  36. package/dist/cli/handlers/create.js.map +1 -0
  37. package/dist/cli/handlers/execution.d.ts +5 -0
  38. package/dist/cli/handlers/execution.d.ts.map +1 -0
  39. package/dist/cli/handlers/execution.js +132 -0
  40. package/dist/cli/handlers/execution.js.map +1 -0
  41. package/dist/cli/handlers/library.d.ts +8 -0
  42. package/dist/cli/handlers/library.d.ts.map +1 -0
  43. package/dist/cli/handlers/library.js +77 -0
  44. package/dist/cli/handlers/library.js.map +1 -0
  45. package/dist/cli/handlers/media-ops.d.ts +7 -0
  46. package/dist/cli/handlers/media-ops.d.ts.map +1 -0
  47. package/dist/cli/handlers/media-ops.js +120 -0
  48. package/dist/cli/handlers/media-ops.js.map +1 -0
  49. package/dist/cli/handlers/media-production.d.ts +56 -0
  50. package/dist/cli/handlers/media-production.d.ts.map +1 -0
  51. package/dist/cli/handlers/media-production.js +673 -0
  52. package/dist/cli/handlers/media-production.js.map +1 -0
  53. package/dist/cli/handlers/motion-overlay.d.ts +10 -0
  54. package/dist/cli/handlers/motion-overlay.d.ts.map +1 -0
  55. package/dist/cli/handlers/motion-overlay.js +651 -0
  56. package/dist/cli/handlers/motion-overlay.js.map +1 -0
  57. package/dist/cli/handlers/multi-shot.d.ts +2 -0
  58. package/dist/cli/handlers/multi-shot.d.ts.map +1 -0
  59. package/dist/cli/handlers/multi-shot.js +424 -0
  60. package/dist/cli/handlers/multi-shot.js.map +1 -0
  61. package/dist/cli/handlers/project-ops.d.ts +14 -0
  62. package/dist/cli/handlers/project-ops.d.ts.map +1 -0
  63. package/dist/cli/handlers/project-ops.js +241 -0
  64. package/dist/cli/handlers/project-ops.js.map +1 -0
  65. package/dist/cli/handlers/prompt-craft.d.ts +8 -0
  66. package/dist/cli/handlers/prompt-craft.d.ts.map +1 -0
  67. package/dist/cli/handlers/prompt-craft.js +397 -0
  68. package/dist/cli/handlers/prompt-craft.js.map +1 -0
  69. package/dist/cli/handlers/provider-registration.d.ts +29 -0
  70. package/dist/cli/handlers/provider-registration.d.ts.map +1 -0
  71. package/dist/cli/handlers/provider-registration.js +225 -0
  72. package/dist/cli/handlers/provider-registration.js.map +1 -0
  73. package/dist/cli/handlers/reference-sheets.d.ts +6 -0
  74. package/dist/cli/handlers/reference-sheets.d.ts.map +1 -0
  75. package/dist/cli/handlers/reference-sheets.js +181 -0
  76. package/dist/cli/handlers/reference-sheets.js.map +1 -0
  77. package/dist/cli/handlers/reporting.d.ts +18 -0
  78. package/dist/cli/handlers/reporting.d.ts.map +1 -0
  79. package/dist/cli/handlers/reporting.js +155 -0
  80. package/dist/cli/handlers/reporting.js.map +1 -0
  81. package/dist/cli/handlers/review-portal.d.ts +8 -0
  82. package/dist/cli/handlers/review-portal.d.ts.map +1 -0
  83. package/dist/cli/handlers/review-portal.js +276 -0
  84. package/dist/cli/handlers/review-portal.js.map +1 -0
  85. package/dist/cli/handlers/show.d.ts +11 -0
  86. package/dist/cli/handlers/show.d.ts.map +1 -0
  87. package/dist/cli/handlers/show.js +136 -0
  88. package/dist/cli/handlers/show.js.map +1 -0
  89. package/dist/cli/handlers/stages.d.ts +6 -0
  90. package/dist/cli/handlers/stages.d.ts.map +1 -0
  91. package/dist/cli/handlers/stages.js +333 -0
  92. package/dist/cli/handlers/stages.js.map +1 -0
  93. package/dist/cli/handlers/studio.d.ts +2 -0
  94. package/dist/cli/handlers/studio.d.ts.map +1 -0
  95. package/dist/cli/handlers/studio.js +159 -0
  96. package/dist/cli/handlers/studio.js.map +1 -0
  97. package/dist/cli/handlers/templates.d.ts +7 -0
  98. package/dist/cli/handlers/templates.d.ts.map +1 -0
  99. package/dist/cli/handlers/templates.js +61 -0
  100. package/dist/cli/handlers/templates.js.map +1 -0
  101. package/dist/cli/provider-adapter.d.ts +3 -0
  102. package/dist/cli/provider-adapter.d.ts.map +1 -0
  103. package/dist/cli/provider-adapter.js +96 -0
  104. package/dist/cli/provider-adapter.js.map +1 -0
  105. package/dist/cli/vclaw.d.ts +15 -0
  106. package/dist/cli/vclaw.d.ts.map +1 -0
  107. package/dist/cli/vclaw.js +318 -0
  108. package/dist/cli/vclaw.js.map +1 -0
  109. package/dist/index.d.ts +79 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +68 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/mcp/index.d.ts +3 -0
  114. package/dist/mcp/index.d.ts.map +1 -0
  115. package/dist/mcp/index.js +3 -0
  116. package/dist/mcp/index.js.map +1 -0
  117. package/dist/mcp/server.d.ts +27 -0
  118. package/dist/mcp/server.d.ts.map +1 -0
  119. package/dist/mcp/server.js +168 -0
  120. package/dist/mcp/server.js.map +1 -0
  121. package/dist/mcp/tools.d.ts +55 -0
  122. package/dist/mcp/tools.d.ts.map +1 -0
  123. package/dist/mcp/tools.js +80 -0
  124. package/dist/mcp/tools.js.map +1 -0
  125. package/dist/video/analyze-output.d.ts +5 -0
  126. package/dist/video/analyze-output.d.ts.map +1 -0
  127. package/dist/video/analyze-output.js +7 -0
  128. package/dist/video/analyze-output.js.map +1 -0
  129. package/dist/video/archive-project.d.ts +14 -0
  130. package/dist/video/archive-project.d.ts.map +1 -0
  131. package/dist/video/archive-project.js +41 -0
  132. package/dist/video/archive-project.js.map +1 -0
  133. package/dist/video/artifact-history.d.ts +8 -0
  134. package/dist/video/artifact-history.d.ts.map +1 -0
  135. package/dist/video/artifact-history.js +12 -0
  136. package/dist/video/artifact-history.js.map +1 -0
  137. package/dist/video/artifact-store.d.ts +8 -0
  138. package/dist/video/artifact-store.d.ts.map +1 -0
  139. package/dist/video/artifact-store.js +37 -0
  140. package/dist/video/artifact-store.js.map +1 -0
  141. package/dist/video/artifact-validation.d.ts +15 -0
  142. package/dist/video/artifact-validation.d.ts.map +1 -0
  143. package/dist/video/artifact-validation.js +287 -0
  144. package/dist/video/artifact-validation.js.map +1 -0
  145. package/dist/video/artifacts.d.ts +112 -0
  146. package/dist/video/artifacts.d.ts.map +1 -0
  147. package/dist/video/artifacts.js +31 -0
  148. package/dist/video/artifacts.js.map +1 -0
  149. package/dist/video/assemble/animate-slides.d.ts +108 -0
  150. package/dist/video/assemble/animate-slides.d.ts.map +1 -0
  151. package/dist/video/assemble/animate-slides.js +152 -0
  152. package/dist/video/assemble/animate-slides.js.map +1 -0
  153. package/dist/video/assemble/animation-styles.d.ts +21 -0
  154. package/dist/video/assemble/animation-styles.d.ts.map +1 -0
  155. package/dist/video/assemble/animation-styles.js +32 -0
  156. package/dist/video/assemble/animation-styles.js.map +1 -0
  157. package/dist/video/assemble/animation-styles.json +97 -0
  158. package/dist/video/assemble/assemble.d.ts +24 -0
  159. package/dist/video/assemble/assemble.d.ts.map +1 -0
  160. package/dist/video/assemble/assemble.js +457 -0
  161. package/dist/video/assemble/assemble.js.map +1 -0
  162. package/dist/video/assemble/audio-concat.d.ts +61 -0
  163. package/dist/video/assemble/audio-concat.d.ts.map +1 -0
  164. package/dist/video/assemble/audio-concat.js +108 -0
  165. package/dist/video/assemble/audio-concat.js.map +1 -0
  166. package/dist/video/assemble/audio-mix-plan.d.ts +84 -0
  167. package/dist/video/assemble/audio-mix-plan.d.ts.map +1 -0
  168. package/dist/video/assemble/audio-mix-plan.js +74 -0
  169. package/dist/video/assemble/audio-mix-plan.js.map +1 -0
  170. package/dist/video/assemble/audio-utils.d.ts +32 -0
  171. package/dist/video/assemble/audio-utils.d.ts.map +1 -0
  172. package/dist/video/assemble/audio-utils.js +91 -0
  173. package/dist/video/assemble/audio-utils.js.map +1 -0
  174. package/dist/video/assemble/cut-segment.d.ts +40 -0
  175. package/dist/video/assemble/cut-segment.d.ts.map +1 -0
  176. package/dist/video/assemble/cut-segment.js +77 -0
  177. package/dist/video/assemble/cut-segment.js.map +1 -0
  178. package/dist/video/assemble/ffmpeg.d.ts +91 -0
  179. package/dist/video/assemble/ffmpeg.d.ts.map +1 -0
  180. package/dist/video/assemble/ffmpeg.js +251 -0
  181. package/dist/video/assemble/ffmpeg.js.map +1 -0
  182. package/dist/video/assemble/gemini-vision-classify.d.ts +37 -0
  183. package/dist/video/assemble/gemini-vision-classify.d.ts.map +1 -0
  184. package/dist/video/assemble/gemini-vision-classify.js +123 -0
  185. package/dist/video/assemble/gemini-vision-classify.js.map +1 -0
  186. package/dist/video/assemble/index.d.ts +47 -0
  187. package/dist/video/assemble/index.d.ts.map +1 -0
  188. package/dist/video/assemble/index.js +40 -0
  189. package/dist/video/assemble/index.js.map +1 -0
  190. package/dist/video/assemble/media-qc.d.ts +44 -0
  191. package/dist/video/assemble/media-qc.d.ts.map +1 -0
  192. package/dist/video/assemble/media-qc.js +181 -0
  193. package/dist/video/assemble/media-qc.js.map +1 -0
  194. package/dist/video/assemble/music.d.ts +51 -0
  195. package/dist/video/assemble/music.d.ts.map +1 -0
  196. package/dist/video/assemble/music.js +171 -0
  197. package/dist/video/assemble/music.js.map +1 -0
  198. package/dist/video/assemble/narration-fit.d.ts +32 -0
  199. package/dist/video/assemble/narration-fit.d.ts.map +1 -0
  200. package/dist/video/assemble/narration-fit.js +59 -0
  201. package/dist/video/assemble/narration-fit.js.map +1 -0
  202. package/dist/video/assemble/overlay.d.ts +81 -0
  203. package/dist/video/assemble/overlay.d.ts.map +1 -0
  204. package/dist/video/assemble/overlay.js +141 -0
  205. package/dist/video/assemble/overlay.js.map +1 -0
  206. package/dist/video/assemble/pdf.d.ts +46 -0
  207. package/dist/video/assemble/pdf.d.ts.map +1 -0
  208. package/dist/video/assemble/pdf.js +111 -0
  209. package/dist/video/assemble/pdf.js.map +1 -0
  210. package/dist/video/assemble/qa-dialogue-lint.d.ts +56 -0
  211. package/dist/video/assemble/qa-dialogue-lint.d.ts.map +1 -0
  212. package/dist/video/assemble/qa-dialogue-lint.js +85 -0
  213. package/dist/video/assemble/qa-dialogue-lint.js.map +1 -0
  214. package/dist/video/assemble/qa-image-filter.d.ts +52 -0
  215. package/dist/video/assemble/qa-image-filter.d.ts.map +1 -0
  216. package/dist/video/assemble/qa-image-filter.js +102 -0
  217. package/dist/video/assemble/qa-image-filter.js.map +1 -0
  218. package/dist/video/assemble/qa-image-vision.d.ts +57 -0
  219. package/dist/video/assemble/qa-image-vision.d.ts.map +1 -0
  220. package/dist/video/assemble/qa-image-vision.js +96 -0
  221. package/dist/video/assemble/qa-image-vision.js.map +1 -0
  222. package/dist/video/assemble/qa-narration-vision.d.ts +53 -0
  223. package/dist/video/assemble/qa-narration-vision.d.ts.map +1 -0
  224. package/dist/video/assemble/qa-narration-vision.js +87 -0
  225. package/dist/video/assemble/qa-narration-vision.js.map +1 -0
  226. package/dist/video/assemble/qa-narration.d.ts +53 -0
  227. package/dist/video/assemble/qa-narration.d.ts.map +1 -0
  228. package/dist/video/assemble/qa-narration.js +85 -0
  229. package/dist/video/assemble/qa-narration.js.map +1 -0
  230. package/dist/video/assemble/stitch-ad.d.ts +88 -0
  231. package/dist/video/assemble/stitch-ad.d.ts.map +1 -0
  232. package/dist/video/assemble/stitch-ad.js +161 -0
  233. package/dist/video/assemble/stitch-ad.js.map +1 -0
  234. package/dist/video/assemble/stitch.d.ts +341 -0
  235. package/dist/video/assemble/stitch.d.ts.map +1 -0
  236. package/dist/video/assemble/stitch.js +607 -0
  237. package/dist/video/assemble/stitch.js.map +1 -0
  238. package/dist/video/assemble/text-card.d.ts +78 -0
  239. package/dist/video/assemble/text-card.d.ts.map +1 -0
  240. package/dist/video/assemble/text-card.js +210 -0
  241. package/dist/video/assemble/text-card.js.map +1 -0
  242. package/dist/video/assemble/title-card.d.ts +39 -0
  243. package/dist/video/assemble/title-card.d.ts.map +1 -0
  244. package/dist/video/assemble/title-card.js +127 -0
  245. package/dist/video/assemble/title-card.js.map +1 -0
  246. package/dist/video/assemble/transcript.d.ts +66 -0
  247. package/dist/video/assemble/transcript.d.ts.map +1 -0
  248. package/dist/video/assemble/transcript.js +200 -0
  249. package/dist/video/assemble/transcript.js.map +1 -0
  250. package/dist/video/assemble/tts-elevenlabs.d.ts +52 -0
  251. package/dist/video/assemble/tts-elevenlabs.d.ts.map +1 -0
  252. package/dist/video/assemble/tts-elevenlabs.js +118 -0
  253. package/dist/video/assemble/tts-elevenlabs.js.map +1 -0
  254. package/dist/video/assemble/tts.d.ts +79 -0
  255. package/dist/video/assemble/tts.d.ts.map +1 -0
  256. package/dist/video/assemble/tts.js +131 -0
  257. package/dist/video/assemble/tts.js.map +1 -0
  258. package/dist/video/assemble/types.d.ts +43 -0
  259. package/dist/video/assemble/types.d.ts.map +1 -0
  260. package/dist/video/assemble/types.js +2 -0
  261. package/dist/video/assemble/types.js.map +1 -0
  262. package/dist/video/assemble/upscale.d.ts +43 -0
  263. package/dist/video/assemble/upscale.d.ts.map +1 -0
  264. package/dist/video/assemble/upscale.js +52 -0
  265. package/dist/video/assemble/upscale.js.map +1 -0
  266. package/dist/video/asset-spec.d.ts +15 -0
  267. package/dist/video/asset-spec.d.ts.map +1 -0
  268. package/dist/video/asset-spec.js +43 -0
  269. package/dist/video/asset-spec.js.map +1 -0
  270. package/dist/video/asset-tag-lookup.d.ts +31 -0
  271. package/dist/video/asset-tag-lookup.d.ts.map +1 -0
  272. package/dist/video/asset-tag-lookup.js +45 -0
  273. package/dist/video/asset-tag-lookup.js.map +1 -0
  274. package/dist/video/atomic-write.d.ts +2 -0
  275. package/dist/video/atomic-write.d.ts.map +1 -0
  276. package/dist/video/atomic-write.js +7 -0
  277. package/dist/video/atomic-write.js.map +1 -0
  278. package/dist/video/audio-platform/native-elevenlabs-sfx.d.ts +29 -0
  279. package/dist/video/audio-platform/native-elevenlabs-sfx.d.ts.map +1 -0
  280. package/dist/video/audio-platform/native-elevenlabs-sfx.js +95 -0
  281. package/dist/video/audio-platform/native-elevenlabs-sfx.js.map +1 -0
  282. package/dist/video/audio-platform/native-elevenlabs-tts.d.ts +30 -0
  283. package/dist/video/audio-platform/native-elevenlabs-tts.d.ts.map +1 -0
  284. package/dist/video/audio-platform/native-elevenlabs-tts.js +95 -0
  285. package/dist/video/audio-platform/native-elevenlabs-tts.js.map +1 -0
  286. package/dist/video/audio-platform/native-flowmusic.d.ts +21 -0
  287. package/dist/video/audio-platform/native-flowmusic.d.ts.map +1 -0
  288. package/dist/video/audio-platform/native-flowmusic.js +137 -0
  289. package/dist/video/audio-platform/native-flowmusic.js.map +1 -0
  290. package/dist/video/audio-platform/native-gemini-tts.d.ts +26 -0
  291. package/dist/video/audio-platform/native-gemini-tts.d.ts.map +1 -0
  292. package/dist/video/audio-platform/native-gemini-tts.js +202 -0
  293. package/dist/video/audio-platform/native-gemini-tts.js.map +1 -0
  294. package/dist/video/audio-platform/native-lyria.d.ts +35 -0
  295. package/dist/video/audio-platform/native-lyria.d.ts.map +1 -0
  296. package/dist/video/audio-platform/native-lyria.js +189 -0
  297. package/dist/video/audio-platform/native-lyria.js.map +1 -0
  298. package/dist/video/audio-platform/native-lyria3.d.ts +36 -0
  299. package/dist/video/audio-platform/native-lyria3.d.ts.map +1 -0
  300. package/dist/video/audio-platform/native-lyria3.js +210 -0
  301. package/dist/video/audio-platform/native-lyria3.js.map +1 -0
  302. package/dist/video/audio-platform/registry.d.ts +82 -0
  303. package/dist/video/audio-platform/registry.d.ts.map +1 -0
  304. package/dist/video/audio-platform/registry.js +189 -0
  305. package/dist/video/audio-platform/registry.js.map +1 -0
  306. package/dist/video/audio-platform/suno-backend.d.ts +11 -0
  307. package/dist/video/audio-platform/suno-backend.d.ts.map +1 -0
  308. package/dist/video/audio-platform/suno-backend.js +33 -0
  309. package/dist/video/audio-platform/suno-backend.js.map +1 -0
  310. package/dist/video/audio-platform/types.d.ts +128 -0
  311. package/dist/video/audio-platform/types.d.ts.map +1 -0
  312. package/dist/video/audio-platform/types.js +9 -0
  313. package/dist/video/audio-platform/types.js.map +1 -0
  314. package/dist/video/batch-queue.d.ts +276 -0
  315. package/dist/video/batch-queue.d.ts.map +1 -0
  316. package/dist/video/batch-queue.js +519 -0
  317. package/dist/video/batch-queue.js.map +1 -0
  318. package/dist/video/blueprint-prompt.d.ts +37 -0
  319. package/dist/video/blueprint-prompt.d.ts.map +1 -0
  320. package/dist/video/blueprint-prompt.js +107 -0
  321. package/dist/video/blueprint-prompt.js.map +1 -0
  322. package/dist/video/brand-definition.d.ts +97 -0
  323. package/dist/video/brand-definition.d.ts.map +1 -0
  324. package/dist/video/brand-definition.js +206 -0
  325. package/dist/video/brand-definition.js.map +1 -0
  326. package/dist/video/brand-dna.d.ts +101 -0
  327. package/dist/video/brand-dna.d.ts.map +1 -0
  328. package/dist/video/brand-dna.js +370 -0
  329. package/dist/video/brand-dna.js.map +1 -0
  330. package/dist/video/brand-prompt.d.ts +13 -0
  331. package/dist/video/brand-prompt.d.ts.map +1 -0
  332. package/dist/video/brand-prompt.js +26 -0
  333. package/dist/video/brand-prompt.js.map +1 -0
  334. package/dist/video/candidate-migrate.d.ts +27 -0
  335. package/dist/video/candidate-migrate.d.ts.map +1 -0
  336. package/dist/video/candidate-migrate.js +119 -0
  337. package/dist/video/candidate-migrate.js.map +1 -0
  338. package/dist/video/category-registry.d.ts +38 -0
  339. package/dist/video/category-registry.d.ts.map +1 -0
  340. package/dist/video/category-registry.js +188 -0
  341. package/dist/video/category-registry.js.map +1 -0
  342. package/dist/video/chain-fallback.d.ts +39 -0
  343. package/dist/video/chain-fallback.d.ts.map +1 -0
  344. package/dist/video/chain-fallback.js +43 -0
  345. package/dist/video/chain-fallback.js.map +1 -0
  346. package/dist/video/character-auto-create.d.ts +72 -0
  347. package/dist/video/character-auto-create.d.ts.map +1 -0
  348. package/dist/video/character-auto-create.js +392 -0
  349. package/dist/video/character-auto-create.js.map +1 -0
  350. package/dist/video/character-consistency.d.ts +3 -0
  351. package/dist/video/character-consistency.d.ts.map +1 -0
  352. package/dist/video/character-consistency.js +69 -0
  353. package/dist/video/character-consistency.js.map +1 -0
  354. package/dist/video/characters.d.ts +44 -0
  355. package/dist/video/characters.d.ts.map +1 -0
  356. package/dist/video/characters.js +96 -0
  357. package/dist/video/characters.js.map +1 -0
  358. package/dist/video/checkpoints.d.ts +16 -0
  359. package/dist/video/checkpoints.d.ts.map +1 -0
  360. package/dist/video/checkpoints.js +29 -0
  361. package/dist/video/checkpoints.js.map +1 -0
  362. package/dist/video/cinema-profile.d.ts +57 -0
  363. package/dist/video/cinema-profile.d.ts.map +1 -0
  364. package/dist/video/cinema-profile.js +89 -0
  365. package/dist/video/cinema-profile.js.map +1 -0
  366. package/dist/video/cinematography.d.ts +299 -0
  367. package/dist/video/cinematography.d.ts.map +1 -0
  368. package/dist/video/cinematography.js +914 -0
  369. package/dist/video/cinematography.js.map +1 -0
  370. package/dist/video/cli-output.d.ts +52 -0
  371. package/dist/video/cli-output.d.ts.map +1 -0
  372. package/dist/video/cli-output.js +81 -0
  373. package/dist/video/cli-output.js.map +1 -0
  374. package/dist/video/cli-schema.d.ts +40 -0
  375. package/dist/video/cli-schema.d.ts.map +1 -0
  376. package/dist/video/cli-schema.js +447 -0
  377. package/dist/video/cli-schema.js.map +1 -0
  378. package/dist/video/cost-estimate.d.ts +37 -0
  379. package/dist/video/cost-estimate.d.ts.map +1 -0
  380. package/dist/video/cost-estimate.js +103 -0
  381. package/dist/video/cost-estimate.js.map +1 -0
  382. package/dist/video/csv-export.d.ts +8 -0
  383. package/dist/video/csv-export.d.ts.map +1 -0
  384. package/dist/video/csv-export.js +133 -0
  385. package/dist/video/csv-export.js.map +1 -0
  386. package/dist/video/dependencies.d.ts +23 -0
  387. package/dist/video/dependencies.d.ts.map +1 -0
  388. package/dist/video/dependencies.js +36 -0
  389. package/dist/video/dependencies.js.map +1 -0
  390. package/dist/video/dialogue-fit.d.ts +23 -0
  391. package/dist/video/dialogue-fit.d.ts.map +1 -0
  392. package/dist/video/dialogue-fit.js +38 -0
  393. package/dist/video/dialogue-fit.js.map +1 -0
  394. package/dist/video/dialogue.d.ts +77 -0
  395. package/dist/video/dialogue.d.ts.map +1 -0
  396. package/dist/video/dialogue.js +143 -0
  397. package/dist/video/dialogue.js.map +1 -0
  398. package/dist/video/director-defaults.d.ts +37 -0
  399. package/dist/video/director-defaults.d.ts.map +1 -0
  400. package/dist/video/director-defaults.js +383 -0
  401. package/dist/video/director-defaults.js.map +1 -0
  402. package/dist/video/director-preflight.d.ts +53 -0
  403. package/dist/video/director-preflight.d.ts.map +1 -0
  404. package/dist/video/director-preflight.js +462 -0
  405. package/dist/video/director-preflight.js.map +1 -0
  406. package/dist/video/doctor-portfolio.d.ts +43 -0
  407. package/dist/video/doctor-portfolio.d.ts.map +1 -0
  408. package/dist/video/doctor-portfolio.js +137 -0
  409. package/dist/video/doctor-portfolio.js.map +1 -0
  410. package/dist/video/doctor.d.ts +13 -0
  411. package/dist/video/doctor.d.ts.map +1 -0
  412. package/dist/video/doctor.js +449 -0
  413. package/dist/video/doctor.js.map +1 -0
  414. package/dist/video/emotion-cues.d.ts +15 -0
  415. package/dist/video/emotion-cues.d.ts.map +1 -0
  416. package/dist/video/emotion-cues.js +37 -0
  417. package/dist/video/emotion-cues.js.map +1 -0
  418. package/dist/video/environment-assets.d.ts +28 -0
  419. package/dist/video/environment-assets.d.ts.map +1 -0
  420. package/dist/video/environment-assets.js +43 -0
  421. package/dist/video/environment-assets.js.map +1 -0
  422. package/dist/video/environment-auto-create.d.ts +20 -0
  423. package/dist/video/environment-auto-create.d.ts.map +1 -0
  424. package/dist/video/environment-auto-create.js +88 -0
  425. package/dist/video/environment-auto-create.js.map +1 -0
  426. package/dist/video/errors.d.ts +35 -0
  427. package/dist/video/errors.d.ts.map +1 -0
  428. package/dist/video/errors.js +117 -0
  429. package/dist/video/errors.js.map +1 -0
  430. package/dist/video/events.d.ts +11 -0
  431. package/dist/video/events.d.ts.map +1 -0
  432. package/dist/video/events.js +32 -0
  433. package/dist/video/events.js.map +1 -0
  434. package/dist/video/execute-autochain.d.ts +65 -0
  435. package/dist/video/execute-autochain.d.ts.map +1 -0
  436. package/dist/video/execute-autochain.js +165 -0
  437. package/dist/video/execute-autochain.js.map +1 -0
  438. package/dist/video/execute.d.ts +27 -0
  439. package/dist/video/execute.d.ts.map +1 -0
  440. package/dist/video/execute.js +477 -0
  441. package/dist/video/execute.js.map +1 -0
  442. package/dist/video/execution-cancel.d.ts +11 -0
  443. package/dist/video/execution-cancel.d.ts.map +1 -0
  444. package/dist/video/execution-cancel.js +85 -0
  445. package/dist/video/execution-cancel.js.map +1 -0
  446. package/dist/video/execution-plan.d.ts +5 -0
  447. package/dist/video/execution-plan.d.ts.map +1 -0
  448. package/dist/video/execution-plan.js +145 -0
  449. package/dist/video/execution-plan.js.map +1 -0
  450. package/dist/video/execution-profile.d.ts +25 -0
  451. package/dist/video/execution-profile.d.ts.map +1 -0
  452. package/dist/video/execution-profile.js +124 -0
  453. package/dist/video/execution-profile.js.map +1 -0
  454. package/dist/video/execution-runtime.d.ts +104 -0
  455. package/dist/video/execution-runtime.d.ts.map +1 -0
  456. package/dist/video/execution-runtime.js +750 -0
  457. package/dist/video/execution-runtime.js.map +1 -0
  458. package/dist/video/execution-seed.d.ts +14 -0
  459. package/dist/video/execution-seed.d.ts.map +1 -0
  460. package/dist/video/execution-seed.js +29 -0
  461. package/dist/video/execution-seed.js.map +1 -0
  462. package/dist/video/execution-status.d.ts +12 -0
  463. package/dist/video/execution-status.d.ts.map +1 -0
  464. package/dist/video/execution-status.js +666 -0
  465. package/dist/video/execution-status.js.map +1 -0
  466. package/dist/video/filmmaking-prompts.d.ts +356 -0
  467. package/dist/video/filmmaking-prompts.d.ts.map +1 -0
  468. package/dist/video/filmmaking-prompts.js +1212 -0
  469. package/dist/video/filmmaking-prompts.js.map +1 -0
  470. package/dist/video/final-media.d.ts +17 -0
  471. package/dist/video/final-media.d.ts.map +1 -0
  472. package/dist/video/final-media.js +78 -0
  473. package/dist/video/final-media.js.map +1 -0
  474. package/dist/video/finish.d.ts +99 -0
  475. package/dist/video/finish.d.ts.map +1 -0
  476. package/dist/video/finish.js +159 -0
  477. package/dist/video/finish.js.map +1 -0
  478. package/dist/video/flow-character-library.d.ts +143 -0
  479. package/dist/video/flow-character-library.d.ts.map +1 -0
  480. package/dist/video/flow-character-library.js +211 -0
  481. package/dist/video/flow-character-library.js.map +1 -0
  482. package/dist/video/flow-markers.d.ts +107 -0
  483. package/dist/video/flow-markers.d.ts.map +1 -0
  484. package/dist/video/flow-markers.js +278 -0
  485. package/dist/video/flow-markers.js.map +1 -0
  486. package/dist/video/gemini-analyze.d.ts +44 -0
  487. package/dist/video/gemini-analyze.d.ts.map +1 -0
  488. package/dist/video/gemini-analyze.js +323 -0
  489. package/dist/video/gemini-analyze.js.map +1 -0
  490. package/dist/video/gemini-continuity.d.ts +40 -0
  491. package/dist/video/gemini-continuity.d.ts.map +1 -0
  492. package/dist/video/gemini-continuity.js +145 -0
  493. package/dist/video/gemini-continuity.js.map +1 -0
  494. package/dist/video/gemini-judge.d.ts +33 -0
  495. package/dist/video/gemini-judge.d.ts.map +1 -0
  496. package/dist/video/gemini-judge.js +218 -0
  497. package/dist/video/gemini-judge.js.map +1 -0
  498. package/dist/video/gemini-key-pool.d.ts +23 -0
  499. package/dist/video/gemini-key-pool.d.ts.map +1 -0
  500. package/dist/video/gemini-key-pool.js +107 -0
  501. package/dist/video/gemini-key-pool.js.map +1 -0
  502. package/dist/video/gen-image-flow.d.ts +187 -0
  503. package/dist/video/gen-image-flow.d.ts.map +1 -0
  504. package/dist/video/gen-image-flow.js +331 -0
  505. package/dist/video/gen-image-flow.js.map +1 -0
  506. package/dist/video/gen-image.d.ts +153 -0
  507. package/dist/video/gen-image.d.ts.map +1 -0
  508. package/dist/video/gen-image.js +263 -0
  509. package/dist/video/gen-image.js.map +1 -0
  510. package/dist/video/generation-telemetry.d.ts +60 -0
  511. package/dist/video/generation-telemetry.d.ts.map +1 -0
  512. package/dist/video/generation-telemetry.js +214 -0
  513. package/dist/video/generation-telemetry.js.map +1 -0
  514. package/dist/video/http-error-safety.d.ts +9 -0
  515. package/dist/video/http-error-safety.d.ts.map +1 -0
  516. package/dist/video/http-error-safety.js +14 -0
  517. package/dist/video/http-error-safety.js.map +1 -0
  518. package/dist/video/image-dimensions.d.ts +7 -0
  519. package/dist/video/image-dimensions.d.ts.map +1 -0
  520. package/dist/video/image-dimensions.js +54 -0
  521. package/dist/video/image-dimensions.js.map +1 -0
  522. package/dist/video/legacy-import.d.ts +11 -0
  523. package/dist/video/legacy-import.d.ts.map +1 -0
  524. package/dist/video/legacy-import.js +181 -0
  525. package/dist/video/legacy-import.js.map +1 -0
  526. package/dist/video/library-clean.d.ts +34 -0
  527. package/dist/video/library-clean.d.ts.map +1 -0
  528. package/dist/video/library-clean.js +340 -0
  529. package/dist/video/library-clean.js.map +1 -0
  530. package/dist/video/lipsync.d.ts +72 -0
  531. package/dist/video/lipsync.d.ts.map +1 -0
  532. package/dist/video/lipsync.js +136 -0
  533. package/dist/video/lipsync.js.map +1 -0
  534. package/dist/video/media-host.d.ts +41 -0
  535. package/dist/video/media-host.d.ts.map +1 -0
  536. package/dist/video/media-host.js +106 -0
  537. package/dist/video/media-host.js.map +1 -0
  538. package/dist/video/metrics.d.ts +30 -0
  539. package/dist/video/metrics.d.ts.map +1 -0
  540. package/dist/video/metrics.js +81 -0
  541. package/dist/video/metrics.js.map +1 -0
  542. package/dist/video/motion-overlay/analyze-reel.d.ts +38 -0
  543. package/dist/video/motion-overlay/analyze-reel.d.ts.map +1 -0
  544. package/dist/video/motion-overlay/analyze-reel.js +185 -0
  545. package/dist/video/motion-overlay/analyze-reel.js.map +1 -0
  546. package/dist/video/motion-overlay/animate-render.d.ts +63 -0
  547. package/dist/video/motion-overlay/animate-render.d.ts.map +1 -0
  548. package/dist/video/motion-overlay/animate-render.js +128 -0
  549. package/dist/video/motion-overlay/animate-render.js.map +1 -0
  550. package/dist/video/motion-overlay/animate.d.ts +37 -0
  551. package/dist/video/motion-overlay/animate.d.ts.map +1 -0
  552. package/dist/video/motion-overlay/animate.js +97 -0
  553. package/dist/video/motion-overlay/animate.js.map +1 -0
  554. package/dist/video/motion-overlay/avatar-host-transport.d.ts +161 -0
  555. package/dist/video/motion-overlay/avatar-host-transport.d.ts.map +1 -0
  556. package/dist/video/motion-overlay/avatar-host-transport.js +325 -0
  557. package/dist/video/motion-overlay/avatar-host-transport.js.map +1 -0
  558. package/dist/video/motion-overlay/avatar-host.d.ts +131 -0
  559. package/dist/video/motion-overlay/avatar-host.d.ts.map +1 -0
  560. package/dist/video/motion-overlay/avatar-host.js +131 -0
  561. package/dist/video/motion-overlay/avatar-host.js.map +1 -0
  562. package/dist/video/motion-overlay/compose-prompt.d.ts +48 -0
  563. package/dist/video/motion-overlay/compose-prompt.d.ts.map +1 -0
  564. package/dist/video/motion-overlay/compose-prompt.js +217 -0
  565. package/dist/video/motion-overlay/compose-prompt.js.map +1 -0
  566. package/dist/video/motion-overlay/execute.d.ts +190 -0
  567. package/dist/video/motion-overlay/execute.d.ts.map +1 -0
  568. package/dist/video/motion-overlay/execute.js +205 -0
  569. package/dist/video/motion-overlay/execute.js.map +1 -0
  570. package/dist/video/motion-overlay/flow-pack.d.ts +65 -0
  571. package/dist/video/motion-overlay/flow-pack.d.ts.map +1 -0
  572. package/dist/video/motion-overlay/flow-pack.js +178 -0
  573. package/dist/video/motion-overlay/flow-pack.js.map +1 -0
  574. package/dist/video/motion-overlay/ingest.d.ts +74 -0
  575. package/dist/video/motion-overlay/ingest.d.ts.map +1 -0
  576. package/dist/video/motion-overlay/ingest.js +172 -0
  577. package/dist/video/motion-overlay/ingest.js.map +1 -0
  578. package/dist/video/motion-overlay/motifs.d.ts +63 -0
  579. package/dist/video/motion-overlay/motifs.d.ts.map +1 -0
  580. package/dist/video/motion-overlay/motifs.js +192 -0
  581. package/dist/video/motion-overlay/motifs.js.map +1 -0
  582. package/dist/video/motion-overlay/motion-style.d.ts +56 -0
  583. package/dist/video/motion-overlay/motion-style.d.ts.map +1 -0
  584. package/dist/video/motion-overlay/motion-style.js +130 -0
  585. package/dist/video/motion-overlay/motion-style.js.map +1 -0
  586. package/dist/video/motion-overlay/plan.d.ts +49 -0
  587. package/dist/video/motion-overlay/plan.d.ts.map +1 -0
  588. package/dist/video/motion-overlay/plan.js +79 -0
  589. package/dist/video/motion-overlay/plan.js.map +1 -0
  590. package/dist/video/motion-overlay/preview.d.ts +36 -0
  591. package/dist/video/motion-overlay/preview.d.ts.map +1 -0
  592. package/dist/video/motion-overlay/preview.js +169 -0
  593. package/dist/video/motion-overlay/preview.js.map +1 -0
  594. package/dist/video/motion-overlay/render-local.d.ts +118 -0
  595. package/dist/video/motion-overlay/render-local.d.ts.map +1 -0
  596. package/dist/video/motion-overlay/render-local.js +298 -0
  597. package/dist/video/motion-overlay/render-local.js.map +1 -0
  598. package/dist/video/motion-overlay/run.d.ts +58 -0
  599. package/dist/video/motion-overlay/run.d.ts.map +1 -0
  600. package/dist/video/motion-overlay/run.js +147 -0
  601. package/dist/video/motion-overlay/run.js.map +1 -0
  602. package/dist/video/motion-overlay/slice.d.ts +29 -0
  603. package/dist/video/motion-overlay/slice.d.ts.map +1 -0
  604. package/dist/video/motion-overlay/slice.js +88 -0
  605. package/dist/video/motion-overlay/slice.js.map +1 -0
  606. package/dist/video/motion-overlay/transcribe.d.ts +49 -0
  607. package/dist/video/motion-overlay/transcribe.d.ts.map +1 -0
  608. package/dist/video/motion-overlay/transcribe.js +180 -0
  609. package/dist/video/motion-overlay/transcribe.js.map +1 -0
  610. package/dist/video/motion-overlay/types.d.ts +82 -0
  611. package/dist/video/motion-overlay/types.d.ts.map +1 -0
  612. package/dist/video/motion-overlay/types.js +12 -0
  613. package/dist/video/motion-overlay/types.js.map +1 -0
  614. package/dist/video/motion-overlay/v2v-transport.d.ts +37 -0
  615. package/dist/video/motion-overlay/v2v-transport.d.ts.map +1 -0
  616. package/dist/video/motion-overlay/v2v-transport.js +178 -0
  617. package/dist/video/motion-overlay/v2v-transport.js.map +1 -0
  618. package/dist/video/motion-overlay/write.d.ts +40 -0
  619. package/dist/video/motion-overlay/write.d.ts.map +1 -0
  620. package/dist/video/motion-overlay/write.js +113 -0
  621. package/dist/video/motion-overlay/write.js.map +1 -0
  622. package/dist/video/multi-shot-artifact.d.ts +19 -0
  623. package/dist/video/multi-shot-artifact.d.ts.map +1 -0
  624. package/dist/video/multi-shot-artifact.js +44 -0
  625. package/dist/video/multi-shot-artifact.js.map +1 -0
  626. package/dist/video/multi-shot-prompt.d.ts +99 -0
  627. package/dist/video/multi-shot-prompt.d.ts.map +1 -0
  628. package/dist/video/multi-shot-prompt.js +466 -0
  629. package/dist/video/multi-shot-prompt.js.map +1 -0
  630. package/dist/video/music-video.d.ts +110 -0
  631. package/dist/video/music-video.d.ts.map +1 -0
  632. package/dist/video/music-video.js +190 -0
  633. package/dist/video/music-video.js.map +1 -0
  634. package/dist/video/narrate.d.ts +58 -0
  635. package/dist/video/narrate.d.ts.map +1 -0
  636. package/dist/video/narrate.js +145 -0
  637. package/dist/video/narrate.js.map +1 -0
  638. package/dist/video/native-dreamina.d.ts +35 -0
  639. package/dist/video/native-dreamina.d.ts.map +1 -0
  640. package/dist/video/native-dreamina.js +532 -0
  641. package/dist/video/native-dreamina.js.map +1 -0
  642. package/dist/video/native-flow-r2v.d.ts +113 -0
  643. package/dist/video/native-flow-r2v.d.ts.map +1 -0
  644. package/dist/video/native-flow-r2v.js +223 -0
  645. package/dist/video/native-flow-r2v.js.map +1 -0
  646. package/dist/video/native-runway.d.ts +41 -0
  647. package/dist/video/native-runway.d.ts.map +1 -0
  648. package/dist/video/native-runway.js +523 -0
  649. package/dist/video/native-runway.js.map +1 -0
  650. package/dist/video/native-seedance.d.ts +74 -0
  651. package/dist/video/native-seedance.d.ts.map +1 -0
  652. package/dist/video/native-seedance.js +461 -0
  653. package/dist/video/native-seedance.js.map +1 -0
  654. package/dist/video/native-veo.d.ts +20 -0
  655. package/dist/video/native-veo.d.ts.map +1 -0
  656. package/dist/video/native-veo.js +390 -0
  657. package/dist/video/native-veo.js.map +1 -0
  658. package/dist/video/next-actions.d.ts +27 -0
  659. package/dist/video/next-actions.d.ts.map +1 -0
  660. package/dist/video/next-actions.js +201 -0
  661. package/dist/video/next-actions.js.map +1 -0
  662. package/dist/video/obsidian-export.d.ts +12 -0
  663. package/dist/video/obsidian-export.d.ts.map +1 -0
  664. package/dist/video/obsidian-export.js +285 -0
  665. package/dist/video/obsidian-export.js.map +1 -0
  666. package/dist/video/obsidian-sync.d.ts +13 -0
  667. package/dist/video/obsidian-sync.d.ts.map +1 -0
  668. package/dist/video/obsidian-sync.js +479 -0
  669. package/dist/video/obsidian-sync.js.map +1 -0
  670. package/dist/video/obsidian-vault.d.ts +8 -0
  671. package/dist/video/obsidian-vault.d.ts.map +1 -0
  672. package/dist/video/obsidian-vault.js +81 -0
  673. package/dist/video/obsidian-vault.js.map +1 -0
  674. package/dist/video/outfit-prompts.d.ts +10 -0
  675. package/dist/video/outfit-prompts.d.ts.map +1 -0
  676. package/dist/video/outfit-prompts.js +14 -0
  677. package/dist/video/outfit-prompts.js.map +1 -0
  678. package/dist/video/outpaint-keyframe.d.ts +95 -0
  679. package/dist/video/outpaint-keyframe.d.ts.map +1 -0
  680. package/dist/video/outpaint-keyframe.js +244 -0
  681. package/dist/video/outpaint-keyframe.js.map +1 -0
  682. package/dist/video/pipeline-manifest.d.ts +4 -0
  683. package/dist/video/pipeline-manifest.d.ts.map +1 -0
  684. package/dist/video/pipeline-manifest.js +13 -0
  685. package/dist/video/pipeline-manifest.js.map +1 -0
  686. package/dist/video/pipeline-manifests/director.json +46 -0
  687. package/dist/video/pipeline-manifests/storyboard.json +46 -0
  688. package/dist/video/platform-specs.d.ts +26 -0
  689. package/dist/video/platform-specs.d.ts.map +1 -0
  690. package/dist/video/platform-specs.js +34 -0
  691. package/dist/video/platform-specs.js.map +1 -0
  692. package/dist/video/playbooks.d.ts +11 -0
  693. package/dist/video/playbooks.d.ts.map +1 -0
  694. package/dist/video/playbooks.js +22 -0
  695. package/dist/video/playbooks.js.map +1 -0
  696. package/dist/video/post-production.d.ts +57 -0
  697. package/dist/video/post-production.d.ts.map +1 -0
  698. package/dist/video/post-production.js +210 -0
  699. package/dist/video/post-production.js.map +1 -0
  700. package/dist/video/preview-portal/audit.d.ts +4 -0
  701. package/dist/video/preview-portal/audit.d.ts.map +1 -0
  702. package/dist/video/preview-portal/audit.js +16 -0
  703. package/dist/video/preview-portal/audit.js.map +1 -0
  704. package/dist/video/preview-portal/discovery.d.ts +23 -0
  705. package/dist/video/preview-portal/discovery.d.ts.map +1 -0
  706. package/dist/video/preview-portal/discovery.js +733 -0
  707. package/dist/video/preview-portal/discovery.js.map +1 -0
  708. package/dist/video/preview-portal/generate.d.ts +42 -0
  709. package/dist/video/preview-portal/generate.d.ts.map +1 -0
  710. package/dist/video/preview-portal/generate.js +101 -0
  711. package/dist/video/preview-portal/generate.js.map +1 -0
  712. package/dist/video/preview-portal/index.d.ts +12 -0
  713. package/dist/video/preview-portal/index.d.ts.map +1 -0
  714. package/dist/video/preview-portal/index.js +8 -0
  715. package/dist/video/preview-portal/index.js.map +1 -0
  716. package/dist/video/preview-portal/publish.d.ts +48 -0
  717. package/dist/video/preview-portal/publish.d.ts.map +1 -0
  718. package/dist/video/preview-portal/publish.js +169 -0
  719. package/dist/video/preview-portal/publish.js.map +1 -0
  720. package/dist/video/preview-portal/render.d.ts +4 -0
  721. package/dist/video/preview-portal/render.d.ts.map +1 -0
  722. package/dist/video/preview-portal/render.js +822 -0
  723. package/dist/video/preview-portal/render.js.map +1 -0
  724. package/dist/video/preview-portal/shared-assets.d.ts +6 -0
  725. package/dist/video/preview-portal/shared-assets.d.ts.map +1 -0
  726. package/dist/video/preview-portal/shared-assets.js +452 -0
  727. package/dist/video/preview-portal/shared-assets.js.map +1 -0
  728. package/dist/video/preview-portal/templates.d.ts +4 -0
  729. package/dist/video/preview-portal/templates.d.ts.map +1 -0
  730. package/dist/video/preview-portal/templates.js +109 -0
  731. package/dist/video/preview-portal/templates.js.map +1 -0
  732. package/dist/video/preview-portal/types.d.ts +246 -0
  733. package/dist/video/preview-portal/types.d.ts.map +1 -0
  734. package/dist/video/preview-portal/types.js +28 -0
  735. package/dist/video/preview-portal/types.js.map +1 -0
  736. package/dist/video/product-references.d.ts +21 -0
  737. package/dist/video/product-references.d.ts.map +1 -0
  738. package/dist/video/product-references.js +25 -0
  739. package/dist/video/product-references.js.map +1 -0
  740. package/dist/video/project-blueprint.d.ts +178 -0
  741. package/dist/video/project-blueprint.d.ts.map +1 -0
  742. package/dist/video/project-blueprint.js +286 -0
  743. package/dist/video/project-blueprint.js.map +1 -0
  744. package/dist/video/project-index.d.ts +82 -0
  745. package/dist/video/project-index.d.ts.map +1 -0
  746. package/dist/video/project-index.js +89 -0
  747. package/dist/video/project-index.js.map +1 -0
  748. package/dist/video/projects.d.ts +3 -0
  749. package/dist/video/projects.d.ts.map +1 -0
  750. package/dist/video/projects.js +18 -0
  751. package/dist/video/projects.js.map +1 -0
  752. package/dist/video/prompt-guidance.d.ts +14 -0
  753. package/dist/video/prompt-guidance.d.ts.map +1 -0
  754. package/dist/video/prompt-guidance.js +44 -0
  755. package/dist/video/prompt-guidance.js.map +1 -0
  756. package/dist/video/prompt-library.d.ts +11 -0
  757. package/dist/video/prompt-library.d.ts.map +1 -0
  758. package/dist/video/prompt-library.js +85 -0
  759. package/dist/video/prompt-library.js.map +1 -0
  760. package/dist/video/prompt-lint.d.ts +146 -0
  761. package/dist/video/prompt-lint.d.ts.map +1 -0
  762. package/dist/video/prompt-lint.js +433 -0
  763. package/dist/video/prompt-lint.js.map +1 -0
  764. package/dist/video/prompt-quality.d.ts +29 -0
  765. package/dist/video/prompt-quality.d.ts.map +1 -0
  766. package/dist/video/prompt-quality.js +532 -0
  767. package/dist/video/prompt-quality.js.map +1 -0
  768. package/dist/video/prompt-rules.d.ts +94 -0
  769. package/dist/video/prompt-rules.d.ts.map +1 -0
  770. package/dist/video/prompt-rules.js +169 -0
  771. package/dist/video/prompt-rules.js.map +1 -0
  772. package/dist/video/provider-adapter-runner.d.ts +5 -0
  773. package/dist/video/provider-adapter-runner.d.ts.map +1 -0
  774. package/dist/video/provider-adapter-runner.js +92 -0
  775. package/dist/video/provider-adapter-runner.js.map +1 -0
  776. package/dist/video/provider-platform/index.d.ts +6 -0
  777. package/dist/video/provider-platform/index.d.ts.map +1 -0
  778. package/dist/video/provider-platform/index.js +6 -0
  779. package/dist/video/provider-platform/index.js.map +1 -0
  780. package/dist/video/provider-platform/registry.d.ts +5 -0
  781. package/dist/video/provider-platform/registry.d.ts.map +1 -0
  782. package/dist/video/provider-platform/registry.js +279 -0
  783. package/dist/video/provider-platform/registry.js.map +1 -0
  784. package/dist/video/provider-platform/route-capabilities.d.ts +133 -0
  785. package/dist/video/provider-platform/route-capabilities.d.ts.map +1 -0
  786. package/dist/video/provider-platform/route-capabilities.js +192 -0
  787. package/dist/video/provider-platform/route-capabilities.js.map +1 -0
  788. package/dist/video/provider-platform/router.d.ts +7 -0
  789. package/dist/video/provider-platform/router.d.ts.map +1 -0
  790. package/dist/video/provider-platform/router.js +150 -0
  791. package/dist/video/provider-platform/router.js.map +1 -0
  792. package/dist/video/provider-platform/security.d.ts +8 -0
  793. package/dist/video/provider-platform/security.d.ts.map +1 -0
  794. package/dist/video/provider-platform/security.js +21 -0
  795. package/dist/video/provider-platform/security.js.map +1 -0
  796. package/dist/video/provider-platform/telemetry.d.ts +24 -0
  797. package/dist/video/provider-platform/telemetry.d.ts.map +1 -0
  798. package/dist/video/provider-platform/telemetry.js +88 -0
  799. package/dist/video/provider-platform/telemetry.js.map +1 -0
  800. package/dist/video/provider-platform/types.d.ts +139 -0
  801. package/dist/video/provider-platform/types.d.ts.map +1 -0
  802. package/dist/video/provider-platform/types.js +17 -0
  803. package/dist/video/provider-platform/types.js.map +1 -0
  804. package/dist/video/provider-status.d.ts +12 -0
  805. package/dist/video/provider-status.d.ts.map +1 -0
  806. package/dist/video/provider-status.js +169 -0
  807. package/dist/video/provider-status.js.map +1 -0
  808. package/dist/video/providers/dreamina-useapi.d.ts +170 -0
  809. package/dist/video/providers/dreamina-useapi.d.ts.map +1 -0
  810. package/dist/video/providers/dreamina-useapi.js +176 -0
  811. package/dist/video/providers/dreamina-useapi.js.map +1 -0
  812. package/dist/video/providers/flowmusic-useapi.d.ts +114 -0
  813. package/dist/video/providers/flowmusic-useapi.d.ts.map +1 -0
  814. package/dist/video/providers/flowmusic-useapi.js +159 -0
  815. package/dist/video/providers/flowmusic-useapi.js.map +1 -0
  816. package/dist/video/providers/google-flow.d.ts +57 -0
  817. package/dist/video/providers/google-flow.d.ts.map +1 -0
  818. package/dist/video/providers/google-flow.js +63 -0
  819. package/dist/video/providers/google-flow.js.map +1 -0
  820. package/dist/video/providers/public-host.d.ts +40 -0
  821. package/dist/video/providers/public-host.d.ts.map +1 -0
  822. package/dist/video/providers/public-host.js +91 -0
  823. package/dist/video/providers/public-host.js.map +1 -0
  824. package/dist/video/providers/runway-useapi.d.ts +159 -0
  825. package/dist/video/providers/runway-useapi.d.ts.map +1 -0
  826. package/dist/video/providers/runway-useapi.js +200 -0
  827. package/dist/video/providers/runway-useapi.js.map +1 -0
  828. package/dist/video/providers/xskill.d.ts +108 -0
  829. package/dist/video/providers/xskill.d.ts.map +1 -0
  830. package/dist/video/providers/xskill.js +233 -0
  831. package/dist/video/providers/xskill.js.map +1 -0
  832. package/dist/video/readiness.d.ts +18 -0
  833. package/dist/video/readiness.d.ts.map +1 -0
  834. package/dist/video/readiness.js +221 -0
  835. package/dist/video/readiness.js.map +1 -0
  836. package/dist/video/reference-sheet-store.d.ts +5 -0
  837. package/dist/video/reference-sheet-store.d.ts.map +1 -0
  838. package/dist/video/reference-sheet-store.js +28 -0
  839. package/dist/video/reference-sheet-store.js.map +1 -0
  840. package/dist/video/reference-sheets.d.ts +40 -0
  841. package/dist/video/reference-sheets.d.ts.map +1 -0
  842. package/dist/video/reference-sheets.js +160 -0
  843. package/dist/video/reference-sheets.js.map +1 -0
  844. package/dist/video/remix-narrated.d.ts +12 -0
  845. package/dist/video/remix-narrated.d.ts.map +1 -0
  846. package/dist/video/remix-narrated.js +73 -0
  847. package/dist/video/remix-narrated.js.map +1 -0
  848. package/dist/video/report-diff.d.ts +89 -0
  849. package/dist/video/report-diff.d.ts.map +1 -0
  850. package/dist/video/report-diff.js +176 -0
  851. package/dist/video/report-diff.js.map +1 -0
  852. package/dist/video/report-history.d.ts +40 -0
  853. package/dist/video/report-history.d.ts.map +1 -0
  854. package/dist/video/report-history.js +74 -0
  855. package/dist/video/report-history.js.map +1 -0
  856. package/dist/video/report.d.ts +15 -0
  857. package/dist/video/report.d.ts.map +1 -0
  858. package/dist/video/report.js +21 -0
  859. package/dist/video/report.js.map +1 -0
  860. package/dist/video/review-ui.d.ts +180 -0
  861. package/dist/video/review-ui.d.ts.map +1 -0
  862. package/dist/video/review-ui.js +2008 -0
  863. package/dist/video/review-ui.js.map +1 -0
  864. package/dist/video/scene-candidate-store.d.ts +12 -0
  865. package/dist/video/scene-candidate-store.d.ts.map +1 -0
  866. package/dist/video/scene-candidate-store.js +134 -0
  867. package/dist/video/scene-candidate-store.js.map +1 -0
  868. package/dist/video/scene-candidates.d.ts +57 -0
  869. package/dist/video/scene-candidates.d.ts.map +1 -0
  870. package/dist/video/scene-candidates.js +149 -0
  871. package/dist/video/scene-candidates.js.map +1 -0
  872. package/dist/video/scene-selection-store.d.ts +5 -0
  873. package/dist/video/scene-selection-store.d.ts.map +1 -0
  874. package/dist/video/scene-selection-store.js +22 -0
  875. package/dist/video/scene-selection-store.js.map +1 -0
  876. package/dist/video/scene-selection.d.ts +83 -0
  877. package/dist/video/scene-selection.d.ts.map +1 -0
  878. package/dist/video/scene-selection.js +225 -0
  879. package/dist/video/scene-selection.js.map +1 -0
  880. package/dist/video/scheduling.d.ts +3 -0
  881. package/dist/video/scheduling.d.ts.map +1 -0
  882. package/dist/video/scheduling.js +16 -0
  883. package/dist/video/scheduling.js.map +1 -0
  884. package/dist/video/scorecard.d.ts +12 -0
  885. package/dist/video/scorecard.d.ts.map +1 -0
  886. package/dist/video/scorecard.js +68 -0
  887. package/dist/video/scorecard.js.map +1 -0
  888. package/dist/video/seedance-asset-library.d.ts +82 -0
  889. package/dist/video/seedance-asset-library.d.ts.map +1 -0
  890. package/dist/video/seedance-asset-library.js +146 -0
  891. package/dist/video/seedance-asset-library.js.map +1 -0
  892. package/dist/video/seedance-blocks.d.ts +56 -0
  893. package/dist/video/seedance-blocks.d.ts.map +1 -0
  894. package/dist/video/seedance-blocks.js +97 -0
  895. package/dist/video/seedance-blocks.js.map +1 -0
  896. package/dist/video/seedance-chain-host.d.ts +42 -0
  897. package/dist/video/seedance-chain-host.d.ts.map +1 -0
  898. package/dist/video/seedance-chain-host.js +128 -0
  899. package/dist/video/seedance-chain-host.js.map +1 -0
  900. package/dist/video/seedance-content-filter.d.ts +80 -0
  901. package/dist/video/seedance-content-filter.d.ts.map +1 -0
  902. package/dist/video/seedance-content-filter.js +293 -0
  903. package/dist/video/seedance-content-filter.js.map +1 -0
  904. package/dist/video/seedance-skill-loader.d.ts +40 -0
  905. package/dist/video/seedance-skill-loader.d.ts.map +1 -0
  906. package/dist/video/seedance-skill-loader.js +53 -0
  907. package/dist/video/seedance-skill-loader.js.map +1 -0
  908. package/dist/video/sfx.d.ts +49 -0
  909. package/dist/video/sfx.d.ts.map +1 -0
  910. package/dist/video/sfx.js +104 -0
  911. package/dist/video/sfx.js.map +1 -0
  912. package/dist/video/shot-grammar.d.ts +103 -0
  913. package/dist/video/shot-grammar.d.ts.map +1 -0
  914. package/dist/video/shot-grammar.js +286 -0
  915. package/dist/video/shot-grammar.js.map +1 -0
  916. package/dist/video/show-bible.d.ts +113 -0
  917. package/dist/video/show-bible.d.ts.map +1 -0
  918. package/dist/video/show-bible.js +140 -0
  919. package/dist/video/show-bible.js.map +1 -0
  920. package/dist/video/soundtrack.d.ts +72 -0
  921. package/dist/video/soundtrack.d.ts.map +1 -0
  922. package/dist/video/soundtrack.js +171 -0
  923. package/dist/video/soundtrack.js.map +1 -0
  924. package/dist/video/stage-guards.d.ts +4 -0
  925. package/dist/video/stage-guards.d.ts.map +1 -0
  926. package/dist/video/stage-guards.js +94 -0
  927. package/dist/video/stage-guards.js.map +1 -0
  928. package/dist/video/status.d.ts +69 -0
  929. package/dist/video/status.d.ts.map +1 -0
  930. package/dist/video/status.js +245 -0
  931. package/dist/video/status.js.map +1 -0
  932. package/dist/video/story-bible.d.ts +70 -0
  933. package/dist/video/story-bible.d.ts.map +1 -0
  934. package/dist/video/story-bible.js +181 -0
  935. package/dist/video/story-bible.js.map +1 -0
  936. package/dist/video/storyboard-grid.d.ts +28 -0
  937. package/dist/video/storyboard-grid.d.ts.map +1 -0
  938. package/dist/video/storyboard-grid.js +231 -0
  939. package/dist/video/storyboard-grid.js.map +1 -0
  940. package/dist/video/storyboard-markdown.d.ts +62 -0
  941. package/dist/video/storyboard-markdown.d.ts.map +1 -0
  942. package/dist/video/storyboard-markdown.js +332 -0
  943. package/dist/video/storyboard-markdown.js.map +1 -0
  944. package/dist/video/storyboard-still-candidates.d.ts +31 -0
  945. package/dist/video/storyboard-still-candidates.d.ts.map +1 -0
  946. package/dist/video/storyboard-still-candidates.js +57 -0
  947. package/dist/video/storyboard-still-candidates.js.map +1 -0
  948. package/dist/video/storyboard-templates.d.ts +28 -0
  949. package/dist/video/storyboard-templates.d.ts.map +1 -0
  950. package/dist/video/storyboard-templates.js +215 -0
  951. package/dist/video/storyboard-templates.js.map +1 -0
  952. package/dist/video/studio/execute.d.ts +142 -0
  953. package/dist/video/studio/execute.d.ts.map +1 -0
  954. package/dist/video/studio/execute.js +270 -0
  955. package/dist/video/studio/execute.js.map +1 -0
  956. package/dist/video/studio/planner.d.ts +3 -0
  957. package/dist/video/studio/planner.d.ts.map +1 -0
  958. package/dist/video/studio/planner.js +110 -0
  959. package/dist/video/studio/planner.js.map +1 -0
  960. package/dist/video/studio/project-context.d.ts +4 -0
  961. package/dist/video/studio/project-context.d.ts.map +1 -0
  962. package/dist/video/studio/project-context.js +20 -0
  963. package/dist/video/studio/project-context.js.map +1 -0
  964. package/dist/video/studio/recipes.d.ts +4 -0
  965. package/dist/video/studio/recipes.d.ts.map +1 -0
  966. package/dist/video/studio/recipes.js +343 -0
  967. package/dist/video/studio/recipes.js.map +1 -0
  968. package/dist/video/studio/session.d.ts +8 -0
  969. package/dist/video/studio/session.d.ts.map +1 -0
  970. package/dist/video/studio/session.js +17 -0
  971. package/dist/video/studio/session.js.map +1 -0
  972. package/dist/video/studio/types.d.ts +59 -0
  973. package/dist/video/studio/types.d.ts.map +1 -0
  974. package/dist/video/studio/types.js +2 -0
  975. package/dist/video/studio/types.js.map +1 -0
  976. package/dist/video/template-store.d.ts +65 -0
  977. package/dist/video/template-store.d.ts.map +1 -0
  978. package/dist/video/template-store.js +168 -0
  979. package/dist/video/template-store.js.map +1 -0
  980. package/dist/video/timeline.d.ts +8 -0
  981. package/dist/video/timeline.d.ts.map +1 -0
  982. package/dist/video/timeline.js +21 -0
  983. package/dist/video/timeline.js.map +1 -0
  984. package/dist/video/title-overlay.d.ts +85 -0
  985. package/dist/video/title-overlay.d.ts.map +1 -0
  986. package/dist/video/title-overlay.js +163 -0
  987. package/dist/video/title-overlay.js.map +1 -0
  988. package/dist/video/types.d.ts +403 -0
  989. package/dist/video/types.d.ts.map +1 -0
  990. package/dist/video/types.js +2 -0
  991. package/dist/video/types.js.map +1 -0
  992. package/dist/video/veo-subprocess.d.ts +27 -0
  993. package/dist/video/veo-subprocess.d.ts.map +1 -0
  994. package/dist/video/veo-subprocess.js +52 -0
  995. package/dist/video/veo-subprocess.js.map +1 -0
  996. package/dist/video/verify-env.d.ts +43 -0
  997. package/dist/video/verify-env.d.ts.map +1 -0
  998. package/dist/video/verify-env.js +156 -0
  999. package/dist/video/verify-env.js.map +1 -0
  1000. package/dist/video/verify-final.d.ts +20 -0
  1001. package/dist/video/verify-final.d.ts.map +1 -0
  1002. package/dist/video/verify-final.js +39 -0
  1003. package/dist/video/verify-final.js.map +1 -0
  1004. package/dist/video/video-context.d.ts +10 -0
  1005. package/dist/video/video-context.d.ts.map +1 -0
  1006. package/dist/video/video-context.js +74 -0
  1007. package/dist/video/video-context.js.map +1 -0
  1008. package/dist/video/vocal-map.d.ts +55 -0
  1009. package/dist/video/vocal-map.d.ts.map +1 -0
  1010. package/dist/video/vocal-map.js +107 -0
  1011. package/dist/video/vocal-map.js.map +1 -0
  1012. package/dist/video/vocal-sync-plan.d.ts +76 -0
  1013. package/dist/video/vocal-sync-plan.d.ts.map +1 -0
  1014. package/dist/video/vocal-sync-plan.js +166 -0
  1015. package/dist/video/vocal-sync-plan.js.map +1 -0
  1016. package/dist/video/voice-clone.d.ts +152 -0
  1017. package/dist/video/voice-clone.d.ts.map +1 -0
  1018. package/dist/video/voice-clone.js +267 -0
  1019. package/dist/video/voice-clone.js.map +1 -0
  1020. package/dist/video/with-retry.d.ts +67 -0
  1021. package/dist/video/with-retry.d.ts.map +1 -0
  1022. package/dist/video/with-retry.js +105 -0
  1023. package/dist/video/with-retry.js.map +1 -0
  1024. package/dist/video/workload.d.ts +20 -0
  1025. package/dist/video/workload.d.ts.map +1 -0
  1026. package/dist/video/workload.js +55 -0
  1027. package/dist/video/workload.js.map +1 -0
  1028. package/dist/video/workspace.d.ts +109 -0
  1029. package/dist/video/workspace.d.ts.map +1 -0
  1030. package/dist/video/workspace.js +132 -0
  1031. package/dist/video/workspace.js.map +1 -0
  1032. package/docs/AGENT_INTEGRATION_RESEARCH.md +123 -0
  1033. package/docs/AI_FILMMAKING_PROMPTS.md +195 -0
  1034. package/docs/ARCHITECTURE.md +257 -0
  1035. package/docs/ASSEMBLE.md +376 -0
  1036. package/docs/BRAND_AGENCY.md +63 -0
  1037. package/docs/CLAWBOT_COVERAGE_PROMPT.md +78 -0
  1038. package/docs/CLI_REFERENCE.md +2638 -0
  1039. package/docs/CONCIERGE_PROMPT.md +139 -0
  1040. package/docs/Claude Code + Higgsfield MCP = FULL Creative Agency.md +179 -0
  1041. package/docs/DEMO_RECORDING.md +61 -0
  1042. package/docs/DEPRECATION.md +79 -0
  1043. package/docs/DIAGRAMS_SOURCE.md +347 -0
  1044. package/docs/DIRECTOR_BLUEPRINT.md +94 -0
  1045. package/docs/GENERATION_TELEMETRY.md +81 -0
  1046. package/docs/IMPROVE_PROMPT.md +76 -0
  1047. package/docs/INFOGRAPHICS_PROMPT.md +83 -0
  1048. package/docs/MASTER_PLAN_ALIGNMENT.md +563 -0
  1049. package/docs/MIGRATION.md +213 -0
  1050. package/docs/MOTION_OVERLAY.md +355 -0
  1051. package/docs/OBSIDIAN.md +300 -0
  1052. package/docs/OPERATIONS.md +142 -0
  1053. package/docs/OPERATOR_HANDOFF.md +108 -0
  1054. package/docs/PRODUCTION_WORKFLOW.md +148 -0
  1055. package/docs/PROJECT_LAYOUT.md +262 -0
  1056. package/docs/PROMPT_QUALITY.md +214 -0
  1057. package/docs/PROVIDER_PLATFORM.md +195 -0
  1058. package/docs/PUBLISHING.md +175 -0
  1059. package/docs/PYTHON_PIPELINE.md +139 -0
  1060. package/docs/REFERENCE_SHEETS.md +469 -0
  1061. package/docs/REFERENCE_VIDEO_SEEDANCE_MOTION_DESIGN_WORKFLOW.md +465 -0
  1062. package/docs/RELEASE_READINESS.md +573 -0
  1063. package/docs/REVIEW_UI_STORYBOARD_WORKFLOW.md +200 -0
  1064. package/docs/SCENE_CANDIDATES.md +518 -0
  1065. package/docs/SKILLS.md +477 -0
  1066. package/docs/SKILL_COHESION_PROMPT.md +88 -0
  1067. package/docs/STORY_BIBLE.md +288 -0
  1068. package/docs/STUDIO.md +96 -0
  1069. package/docs/TEMPLATES.md +143 -0
  1070. package/docs/UNIFICATION_AUDIT.md +321 -0
  1071. package/docs/UPDATE_DOCS_PROMPT.md +78 -0
  1072. package/docs/assets/demo-quickstart.cast +13 -0
  1073. package/docs/assets/demo-quickstart.gif +0 -0
  1074. package/docs/assets/diagram-architecture.jpg +0 -0
  1075. package/docs/assets/diagram-assemble.jpg +0 -0
  1076. package/docs/assets/diagram-lifecycle.jpg +0 -0
  1077. package/docs/assets/diagram-obsidian-loop.jpg +0 -0
  1078. package/docs/assets/diagram-obsidian-vault.jpg +0 -0
  1079. package/docs/assets/diagram-routing.jpg +0 -0
  1080. package/docs/assets/diagram-skills-ecosystem.jpg +0 -0
  1081. package/docs/assets/diagram-story-bible.jpg +0 -0
  1082. package/docs/assets/diagram-studio-goals.jpg +0 -0
  1083. package/docs/assets/docsite-preview.png +0 -0
  1084. package/docs/assets/logo.jpg +0 -0
  1085. package/docs/assets/logo.png +0 -0
  1086. package/docs/preview-portal-audit.md +151 -0
  1087. package/package.json +119 -0
  1088. package/playbooks/seedance-ugc.json +32 -0
  1089. package/playbooks/veo-generic.json +26 -0
  1090. package/references/video/.fixtures/multi-shot-runway-10s.txt +9 -0
  1091. package/references/video/.fixtures/multi-shot-seedance-10s.txt +9 -0
  1092. package/references/video/.fixtures/multi-shot-valid.txt +13 -0
  1093. package/references/video/.fixtures/multi-shot-veo-8s.txt +9 -0
  1094. package/references/video/ai-director-blueprint.md +614 -0
  1095. package/references/video/camera-bible.md +294 -0
  1096. package/references/video/character-reference-sheet.md +14 -0
  1097. package/references/video/checkpoint-protocol.md +26 -0
  1098. package/references/video/clone-ad-template-workflow.md +14 -0
  1099. package/references/video/dialogue-duration-preflight.md +17 -0
  1100. package/references/video/generation-telemetry.md +18 -0
  1101. package/references/video/multi-shot-framework.md +455 -0
  1102. package/references/video/seedance-skills/01-cinematic.md +1329 -0
  1103. package/references/video/seedance-skills/02-3d-cgi.md +884 -0
  1104. package/references/video/seedance-skills/03-cartoon.md +1668 -0
  1105. package/references/video/seedance-skills/04-comic-to-video.md +1810 -0
  1106. package/references/video/seedance-skills/05-fight-scenes.md +741 -0
  1107. package/references/video/seedance-skills/06-motion-design-ad.md +1145 -0
  1108. package/references/video/seedance-skills/07-ecommerce-ad.md +928 -0
  1109. package/references/video/seedance-skills/08-anime-action.md +1145 -0
  1110. package/references/video/seedance-skills/09-product-360.md +988 -0
  1111. package/references/video/seedance-skills/10-music-video.md +1662 -0
  1112. package/references/video/seedance-skills/11-social-hook.md +1874 -0
  1113. package/references/video/seedance-skills/12-brand-story.md +1151 -0
  1114. package/references/video/seedance-skills/13-fashion-lookbook.md +1236 -0
  1115. package/references/video/seedance-skills/14-food-beverage.md +1110 -0
  1116. package/references/video/seedance-skills/15-real-estate.md +2344 -0
  1117. package/references/video/seedance-transport-payloads.md +144 -0
  1118. package/references/video/seedance-ugc-formulas.md +104 -0
  1119. package/references/video/stage-directors.md +47 -0
  1120. package/references/video/style-template-schema.md +40 -0
  1121. package/references/video/veo-prompting-guide.md +42 -0
  1122. package/schemas/video/artifacts/analyze-output.schema.json +60 -0
  1123. package/schemas/video/artifacts/assemble-report.schema.json +116 -0
  1124. package/schemas/video/artifacts/asset-manifest.schema.json +23 -0
  1125. package/schemas/video/artifacts/batch-queue-manifest.schema.json +59 -0
  1126. package/schemas/video/artifacts/brand-definition.schema.json +93 -0
  1127. package/schemas/video/artifacts/brand-dna.schema.json +55 -0
  1128. package/schemas/video/artifacts/brief.schema.json +13 -0
  1129. package/schemas/video/artifacts/clone-plan.schema.json +44 -0
  1130. package/schemas/video/artifacts/dialogue.schema.json +52 -0
  1131. package/schemas/video/artifacts/environment-assets.schema.json +30 -0
  1132. package/schemas/video/artifacts/execution-plan.schema.json +64 -0
  1133. package/schemas/video/artifacts/execution-report.schema.json +37 -0
  1134. package/schemas/video/artifacts/filmmaking-prompts.schema.json +129 -0
  1135. package/schemas/video/artifacts/flow-characters.schema.json +31 -0
  1136. package/schemas/video/artifacts/flow-voices.schema.json +30 -0
  1137. package/schemas/video/artifacts/motion-overlay-plan.schema.json +50 -0
  1138. package/schemas/video/artifacts/multi-shot-prompt.schema.json +90 -0
  1139. package/schemas/video/artifacts/music-video-config.schema.json +108 -0
  1140. package/schemas/video/artifacts/narration.schema.json +54 -0
  1141. package/schemas/video/artifacts/product-references.schema.json +29 -0
  1142. package/schemas/video/artifacts/project-blueprint.schema.json +236 -0
  1143. package/schemas/video/artifacts/publish-report.schema.json +12 -0
  1144. package/schemas/video/artifacts/reference-sheets.schema.json +85 -0
  1145. package/schemas/video/artifacts/review-report.schema.json +12 -0
  1146. package/schemas/video/artifacts/scene-candidates.schema.json +86 -0
  1147. package/schemas/video/artifacts/scene-selection.schema.json +50 -0
  1148. package/schemas/video/artifacts/seedance-assets.schema.json +31 -0
  1149. package/schemas/video/artifacts/sfx.schema.json +31 -0
  1150. package/schemas/video/artifacts/show-bible.schema.json +66 -0
  1151. package/schemas/video/artifacts/soundtrack.schema.json +39 -0
  1152. package/schemas/video/artifacts/story-bible.schema.json +131 -0
  1153. package/schemas/video/artifacts/storyboard.schema.json +58 -0
  1154. package/schemas/video/artifacts/voice-clones.schema.json +37 -0
  1155. package/schemas/video/brand-profile.schema.json +20 -0
  1156. package/schemas/video/errors.json +48 -0
  1157. package/schemas/video/pipeline-manifest.schema.json +51 -0
  1158. package/skills/README.md +113 -0
  1159. package/skills/ai-director/SKILL.md +140 -0
  1160. package/skills/ai-filmmaking/SKILL.md +239 -0
  1161. package/skills/ai-slop-cleaner/SKILL.md +114 -0
  1162. package/skills/brand-agency/SKILL.md +181 -0
  1163. package/skills/brand-presenter/SKILL.md +114 -0
  1164. package/skills/build-fix/SKILL.md +145 -0
  1165. package/skills/bunty/SKILL.md +41 -0
  1166. package/skills/catalog.json +326 -0
  1167. package/skills/character-ad/SKILL.md +154 -0
  1168. package/skills/character-creator/SKILL.md +303 -0
  1169. package/skills/character-library/README.md +12 -0
  1170. package/skills/character-library/SKILL.md +110 -0
  1171. package/skills/clawbot/SKILL.md +26 -0
  1172. package/skills/concierge/SKILL.md +183 -0
  1173. package/skills/configure-notifications/SKILL.md +286 -0
  1174. package/skills/davendra-presenter/SKILL.md +27 -0
  1175. package/skills/davendra-presenter/assets/davendra_intro_1.jpg +0 -0
  1176. package/skills/davendra-presenter/assets/davendra_intro_2.jpg +0 -0
  1177. package/skills/davendra-presenter/assets/davendra_outro_1.jpg +0 -0
  1178. package/skills/davendra-presenter/assets/davendra_outro_2.jpg +0 -0
  1179. package/skills/deep-interview/SKILL.md +358 -0
  1180. package/skills/deepsearch/SKILL.md +38 -0
  1181. package/skills/doctor/SKILL.md +200 -0
  1182. package/skills/graphify/SKILL.md +616 -0
  1183. package/skills/help/SKILL.md +200 -0
  1184. package/skills/higgsfield-generate/SKILL.md +171 -0
  1185. package/skills/improvement-run/SKILL.md +47 -0
  1186. package/skills/motion-reel/SKILL.md +102 -0
  1187. package/skills/movie-director/SKILL.md +338 -0
  1188. package/skills/multi-shot-prompt/SKILL.md +77 -0
  1189. package/skills/nex-presenter/SKILL.md +25 -0
  1190. package/skills/nex-presenter/assets/logo_manifest.json +26 -0
  1191. package/skills/nex-presenter/assets/logo_source.jpg +0 -0
  1192. package/skills/nex-presenter/assets/nex_brief_intro.mp4 +0 -0
  1193. package/skills/nex-presenter/assets/nex_intro_1.jpg +0 -0
  1194. package/skills/nex-presenter/assets/nex_intro_2.jpg +0 -0
  1195. package/skills/nex-presenter/assets/nex_outro_1.jpg +0 -0
  1196. package/skills/nex-presenter/assets/nex_outro_2.jpg +0 -0
  1197. package/skills/nex-presenter/assets/text_overlay.png +0 -0
  1198. package/skills/note/SKILL.md +62 -0
  1199. package/skills/pipeline/SKILL.md +86 -0
  1200. package/skills/review/SKILL.md +38 -0
  1201. package/skills/runway/SKILL.md +131 -0
  1202. package/skills/seedance-prompts/SKILL.md +194 -0
  1203. package/skills/skill/SKILL.md +835 -0
  1204. package/skills/skills-auditor/SKILL.md +73 -0
  1205. package/skills/studio-mode/SKILL.md +148 -0
  1206. package/skills/ugc/SKILL.md +386 -0
  1207. package/skills/ui-ux-pro-max/SKILL.md +386 -0
  1208. package/skills/video-analyze-template/SKILL.md +77 -0
  1209. package/skills/video-clone-ad/SKILL.md +67 -0
  1210. package/skills/video-framework/SKILL.md +201 -0
  1211. package/skills/video-portfolio-ops/SKILL.md +84 -0
  1212. package/skills/video-post/SKILL.md +97 -0
  1213. package/skills/video-production-handoff/SKILL.md +130 -0
  1214. package/skills/video-release-readiness/SKILL.md +93 -0
  1215. package/skills/video-replicator/SKILL.md +368 -0
  1216. package/skills/video-review-ui-qa/SKILL.md +103 -0
  1217. package/skills/video-storyboard/SKILL.md +71 -0
  1218. package/skills/video-thumbnail-lab/SKILL.md +67 -0
  1219. package/skills/web-clone/SKILL.md +366 -0
  1220. package/skills/worker/SKILL.md +106 -0
  1221. package/skills/youtube-audio/SKILL.md +114 -0
  1222. package/src/video/analyze-output.ts +10 -0
  1223. package/src/video/archive-project.ts +65 -0
  1224. package/src/video/artifact-history.ts +23 -0
  1225. package/src/video/artifact-store.ts +59 -0
  1226. package/src/video/artifact-validation.ts +268 -0
  1227. package/src/video/artifacts.ts +156 -0
  1228. package/src/video/assemble/animate-slides.ts +199 -0
  1229. package/src/video/assemble/animation-styles.json +97 -0
  1230. package/src/video/assemble/animation-styles.ts +54 -0
  1231. package/src/video/assemble/assemble.ts +547 -0
  1232. package/src/video/assemble/audio-concat.ts +165 -0
  1233. package/src/video/assemble/audio-mix-plan.ts +150 -0
  1234. package/src/video/assemble/audio-utils.ts +101 -0
  1235. package/src/video/assemble/cut-segment.ts +121 -0
  1236. package/src/video/assemble/ffmpeg.ts +333 -0
  1237. package/src/video/assemble/gemini-vision-classify.ts +153 -0
  1238. package/src/video/assemble/index.ts +247 -0
  1239. package/src/video/assemble/media-qc.ts +252 -0
  1240. package/src/video/assemble/music.ts +261 -0
  1241. package/src/video/assemble/narration-fit.ts +90 -0
  1242. package/src/video/assemble/overlay.ts +225 -0
  1243. package/src/video/assemble/pdf.ts +169 -0
  1244. package/src/video/assemble/qa-dialogue-lint.ts +129 -0
  1245. package/src/video/assemble/qa-image-filter.ts +147 -0
  1246. package/src/video/assemble/qa-image-vision.ts +154 -0
  1247. package/src/video/assemble/qa-narration-vision.ts +135 -0
  1248. package/src/video/assemble/qa-narration.ts +139 -0
  1249. package/src/video/assemble/stitch-ad.ts +222 -0
  1250. package/src/video/assemble/stitch.ts +918 -0
  1251. package/src/video/assemble/text-card.ts +285 -0
  1252. package/src/video/assemble/title-card.ts +186 -0
  1253. package/src/video/assemble/transcript.ts +240 -0
  1254. package/src/video/assemble/tts-elevenlabs.ts +182 -0
  1255. package/src/video/assemble/tts.ts +227 -0
  1256. package/src/video/assemble/types.ts +45 -0
  1257. package/src/video/assemble/upscale.ts +80 -0
  1258. package/src/video/asset-spec.ts +53 -0
  1259. package/src/video/asset-tag-lookup.ts +51 -0
  1260. package/src/video/atomic-write.ts +7 -0
  1261. package/src/video/audio-platform/native-elevenlabs-sfx.ts +128 -0
  1262. package/src/video/audio-platform/native-elevenlabs-tts.ts +119 -0
  1263. package/src/video/audio-platform/native-flowmusic.ts +167 -0
  1264. package/src/video/audio-platform/native-gemini-tts.ts +226 -0
  1265. package/src/video/audio-platform/native-lyria.ts +231 -0
  1266. package/src/video/audio-platform/native-lyria3.ts +244 -0
  1267. package/src/video/audio-platform/registry.ts +220 -0
  1268. package/src/video/audio-platform/suno-backend.ts +36 -0
  1269. package/src/video/audio-platform/types.ts +138 -0
  1270. package/src/video/batch-queue.ts +685 -0
  1271. package/src/video/blueprint-prompt.ts +118 -0
  1272. package/src/video/brand-definition.ts +287 -0
  1273. package/src/video/brand-dna.ts +478 -0
  1274. package/src/video/brand-prompt.ts +28 -0
  1275. package/src/video/candidate-migrate.ts +171 -0
  1276. package/src/video/category-registry.ts +224 -0
  1277. package/src/video/chain-fallback.ts +53 -0
  1278. package/src/video/character-auto-create.ts +547 -0
  1279. package/src/video/character-consistency.ts +85 -0
  1280. package/src/video/characters.ts +145 -0
  1281. package/src/video/checkpoints.ts +60 -0
  1282. package/src/video/cinema-profile.ts +120 -0
  1283. package/src/video/cinematography.ts +1229 -0
  1284. package/src/video/cli-output.ts +94 -0
  1285. package/src/video/cli-schema.ts +505 -0
  1286. package/src/video/cost-estimate.ts +150 -0
  1287. package/src/video/csv-export.ts +150 -0
  1288. package/src/video/dependencies.ts +64 -0
  1289. package/src/video/dialogue-fit.ts +62 -0
  1290. package/src/video/dialogue.ts +221 -0
  1291. package/src/video/director-defaults.ts +432 -0
  1292. package/src/video/director-preflight.ts +543 -0
  1293. package/src/video/doctor-portfolio.ts +197 -0
  1294. package/src/video/doctor.ts +499 -0
  1295. package/src/video/emotion-cues.ts +36 -0
  1296. package/src/video/environment-assets.ts +69 -0
  1297. package/src/video/environment-auto-create.ts +122 -0
  1298. package/src/video/errors.ts +133 -0
  1299. package/src/video/events.ts +42 -0
  1300. package/src/video/execute-autochain.ts +226 -0
  1301. package/src/video/execute.ts +569 -0
  1302. package/src/video/execution-cancel.ts +103 -0
  1303. package/src/video/execution-plan.ts +178 -0
  1304. package/src/video/execution-profile.ts +162 -0
  1305. package/src/video/execution-runtime.ts +975 -0
  1306. package/src/video/execution-seed.ts +46 -0
  1307. package/src/video/execution-status.ts +736 -0
  1308. package/src/video/filmmaking-prompts.ts +1789 -0
  1309. package/src/video/final-media.ts +118 -0
  1310. package/src/video/finish.ts +255 -0
  1311. package/src/video/flow-character-library.ts +342 -0
  1312. package/src/video/flow-markers.ts +330 -0
  1313. package/src/video/gemini-analyze.ts +387 -0
  1314. package/src/video/gemini-continuity.ts +186 -0
  1315. package/src/video/gemini-judge.ts +300 -0
  1316. package/src/video/gemini-key-pool.ts +153 -0
  1317. package/src/video/gen-image-flow.ts +491 -0
  1318. package/src/video/gen-image.ts +392 -0
  1319. package/src/video/generation-telemetry.ts +282 -0
  1320. package/src/video/http-error-safety.ts +13 -0
  1321. package/src/video/image-dimensions.ts +69 -0
  1322. package/src/video/legacy-import.ts +197 -0
  1323. package/src/video/library-clean.ts +399 -0
  1324. package/src/video/lipsync.ts +200 -0
  1325. package/src/video/media-host.ts +153 -0
  1326. package/src/video/metrics.ts +116 -0
  1327. package/src/video/motion-overlay/analyze-reel.ts +200 -0
  1328. package/src/video/motion-overlay/animate-render.ts +176 -0
  1329. package/src/video/motion-overlay/animate.ts +93 -0
  1330. package/src/video/motion-overlay/avatar-host-transport.ts +458 -0
  1331. package/src/video/motion-overlay/avatar-host.ts +238 -0
  1332. package/src/video/motion-overlay/compose-prompt.ts +247 -0
  1333. package/src/video/motion-overlay/execute.ts +355 -0
  1334. package/src/video/motion-overlay/flow-pack.ts +223 -0
  1335. package/src/video/motion-overlay/ingest.ts +210 -0
  1336. package/src/video/motion-overlay/motifs.ts +223 -0
  1337. package/src/video/motion-overlay/motion-style.ts +162 -0
  1338. package/src/video/motion-overlay/plan.ts +111 -0
  1339. package/src/video/motion-overlay/preview.ts +191 -0
  1340. package/src/video/motion-overlay/render-local.ts +441 -0
  1341. package/src/video/motion-overlay/run.ts +217 -0
  1342. package/src/video/motion-overlay/slice.ts +98 -0
  1343. package/src/video/motion-overlay/transcribe.ts +211 -0
  1344. package/src/video/motion-overlay/types.ts +89 -0
  1345. package/src/video/motion-overlay/v2v-transport.ts +209 -0
  1346. package/src/video/motion-overlay/write.ts +142 -0
  1347. package/src/video/multi-shot-artifact.ts +64 -0
  1348. package/src/video/multi-shot-prompt.ts +608 -0
  1349. package/src/video/music-video.ts +324 -0
  1350. package/src/video/narrate.ts +221 -0
  1351. package/src/video/native-dreamina.ts +638 -0
  1352. package/src/video/native-flow-r2v.ts +279 -0
  1353. package/src/video/native-runway.ts +647 -0
  1354. package/src/video/native-seedance.ts +615 -0
  1355. package/src/video/native-veo.ts +470 -0
  1356. package/src/video/next-actions.ts +247 -0
  1357. package/src/video/obsidian-export.ts +336 -0
  1358. package/src/video/obsidian-sync.ts +649 -0
  1359. package/src/video/obsidian-vault.ts +96 -0
  1360. package/src/video/outfit-prompts.ts +14 -0
  1361. package/src/video/outpaint-keyframe.ts +365 -0
  1362. package/src/video/pipeline-manifest.ts +16 -0
  1363. package/src/video/pipeline-manifests/director.json +46 -0
  1364. package/src/video/pipeline-manifests/storyboard.json +46 -0
  1365. package/src/video/platform-specs.ts +50 -0
  1366. package/src/video/playbooks.ts +34 -0
  1367. package/src/video/post-production.ts +277 -0
  1368. package/src/video/preview-portal/audit.ts +20 -0
  1369. package/src/video/preview-portal/discovery.ts +787 -0
  1370. package/src/video/preview-portal/generate.ts +138 -0
  1371. package/src/video/preview-portal/index.ts +41 -0
  1372. package/src/video/preview-portal/publish.ts +215 -0
  1373. package/src/video/preview-portal/render.ts +865 -0
  1374. package/src/video/preview-portal/shared-assets.ts +455 -0
  1375. package/src/video/preview-portal/templates.ts +112 -0
  1376. package/src/video/preview-portal/types.ts +288 -0
  1377. package/src/video/product-references.ts +43 -0
  1378. package/src/video/project-blueprint.ts +458 -0
  1379. package/src/video/project-index.ts +179 -0
  1380. package/src/video/projects.ts +18 -0
  1381. package/src/video/prompt-guidance.ts +64 -0
  1382. package/src/video/prompt-library.ts +96 -0
  1383. package/src/video/prompt-lint.ts +568 -0
  1384. package/src/video/prompt-quality.ts +635 -0
  1385. package/src/video/prompt-rules.ts +209 -0
  1386. package/src/video/provider-adapter-runner.ts +104 -0
  1387. package/src/video/provider-platform/index.ts +5 -0
  1388. package/src/video/provider-platform/registry.ts +286 -0
  1389. package/src/video/provider-platform/route-capabilities.ts +327 -0
  1390. package/src/video/provider-platform/router.ts +221 -0
  1391. package/src/video/provider-platform/security.ts +29 -0
  1392. package/src/video/provider-platform/telemetry.ts +116 -0
  1393. package/src/video/provider-platform/types.ts +192 -0
  1394. package/src/video/provider-status.ts +199 -0
  1395. package/src/video/providers/dreamina-useapi.ts +345 -0
  1396. package/src/video/providers/flowmusic-useapi.ts +252 -0
  1397. package/src/video/providers/google-flow.ts +110 -0
  1398. package/src/video/providers/public-host.ts +128 -0
  1399. package/src/video/providers/runway-useapi.ts +377 -0
  1400. package/src/video/providers/xskill.ts +304 -0
  1401. package/src/video/readiness.ts +284 -0
  1402. package/src/video/reference-sheet-store.ts +40 -0
  1403. package/src/video/reference-sheets.ts +224 -0
  1404. package/src/video/remix-narrated.ts +92 -0
  1405. package/src/video/report-diff.ts +299 -0
  1406. package/src/video/report-history.ts +122 -0
  1407. package/src/video/report.ts +35 -0
  1408. package/src/video/review-ui.ts +2495 -0
  1409. package/src/video/scene-candidate-store.ts +152 -0
  1410. package/src/video/scene-candidates.ts +195 -0
  1411. package/src/video/scene-selection-store.ts +36 -0
  1412. package/src/video/scene-selection.ts +306 -0
  1413. package/src/video/scheduling.ts +18 -0
  1414. package/src/video/scorecard.ts +90 -0
  1415. package/src/video/seedance-asset-library.ts +259 -0
  1416. package/src/video/seedance-blocks.ts +118 -0
  1417. package/src/video/seedance-chain-host.ts +152 -0
  1418. package/src/video/seedance-content-filter.ts +354 -0
  1419. package/src/video/seedance-skill-loader.ts +83 -0
  1420. package/src/video/sfx.ts +159 -0
  1421. package/src/video/shot-grammar.ts +349 -0
  1422. package/src/video/show-bible.ts +235 -0
  1423. package/src/video/soundtrack.ts +257 -0
  1424. package/src/video/stage-guards.ts +112 -0
  1425. package/src/video/status.ts +342 -0
  1426. package/src/video/story-bible.ts +302 -0
  1427. package/src/video/storyboard-grid.ts +320 -0
  1428. package/src/video/storyboard-markdown.ts +434 -0
  1429. package/src/video/storyboard-still-candidates.ts +82 -0
  1430. package/src/video/storyboard-templates.ts +249 -0
  1431. package/src/video/studio/execute.ts +401 -0
  1432. package/src/video/studio/planner.ts +114 -0
  1433. package/src/video/studio/project-context.ts +25 -0
  1434. package/src/video/studio/recipes.ts +346 -0
  1435. package/src/video/studio/session.ts +24 -0
  1436. package/src/video/studio/types.ts +76 -0
  1437. package/src/video/template-store.ts +241 -0
  1438. package/src/video/timeline.ts +32 -0
  1439. package/src/video/title-overlay.ts +234 -0
  1440. package/src/video/types.ts +465 -0
  1441. package/src/video/veo-subprocess.ts +77 -0
  1442. package/src/video/verify-env.ts +206 -0
  1443. package/src/video/verify-final.ts +65 -0
  1444. package/src/video/video-context.ts +92 -0
  1445. package/src/video/vocal-map.ts +155 -0
  1446. package/src/video/vocal-sync-plan.ts +224 -0
  1447. package/src/video/voice-clone.ts +410 -0
  1448. package/src/video/with-retry.ts +149 -0
  1449. package/src/video/workload.ts +87 -0
  1450. package/src/video/workspace.ts +255 -0
  1451. package/tmp/review-station/index.html +4194 -0
  1452. package/tsconfig.json +19 -0
@@ -0,0 +1,914 @@
1
+ /**
2
+ * Detail-leveled camera / lighting / grade emitters.
3
+ *
4
+ * Pure, deterministic prompt-fragment builders. No I/O, no network.
5
+ * Each emitter turns a structured spec into a human/provider-readable
6
+ * string whose density scales with the requested {@link DetailLevel}:
7
+ * - terse: evocative words only, no numbers
8
+ * - standard: key numeric anchors (lens, Kelvin, ratio)
9
+ * - rich: full numeric detail (velocity, fill/rim, hue/sat splits)
10
+ */
11
+ const DEFAULT_VELOCITY = {
12
+ 'push-in': 2,
13
+ 'pull-out': 2,
14
+ dolly: 3,
15
+ orbit: 4,
16
+ pan: 5,
17
+ tilt: 4,
18
+ track: 6,
19
+ handheld: 3,
20
+ 'locked-off': 0,
21
+ };
22
+ const MOVEMENT_QUALIFIER = {
23
+ 'push-in': 'slow push-in',
24
+ 'pull-out': 'slow pull-out',
25
+ dolly: 'smooth dolly',
26
+ orbit: 'steady orbit',
27
+ pan: 'controlled pan',
28
+ tilt: 'controlled tilt',
29
+ track: 'tracking move',
30
+ handheld: 'loose handheld',
31
+ 'locked-off': 'locked-off, no movement',
32
+ };
33
+ const LIGHTING = {
34
+ 'hard-dawn': { kelvin: 4200, keyDeg: 25, ratio: '4:1' },
35
+ 'golden-hour': { kelvin: 3200, keyDeg: 15, ratio: '3:1' },
36
+ 'neutral-studio': { kelvin: 5600, keyDeg: 45, ratio: '2:1' },
37
+ 'night-fire': { kelvin: 2000, keyDeg: 30, ratio: '8:1' },
38
+ moonlight: { kelvin: 7000, keyDeg: 35, ratio: '6:1' },
39
+ overcast: { kelvin: 6500, keyDeg: 60, ratio: '1.5:1' },
40
+ 'neon-split': { kelvin: 4500, keyDeg: 40, ratio: '3:1' },
41
+ chiaroscuro: { kelvin: 3400, keyDeg: 20, ratio: '12:1' },
42
+ silhouette: { kelvin: 5000, keyDeg: 10, ratio: '16:1' },
43
+ fluorescent: { kelvin: 4300, keyDeg: 70, ratio: '1.2:1' },
44
+ 'night-practical': { kelvin: 2800, keyDeg: 25, ratio: '7:1' },
45
+ 'night-urban-neon': { kelvin: 5200, keyDeg: 30, ratio: '5:1' },
46
+ 'rembrandt-gray': { kelvin: 5200, keyDeg: 40, ratio: '3:1' },
47
+ };
48
+ const LIGHTING_WORDS = {
49
+ 'hard-dawn': 'crisp directional dawn light, long raking shadows',
50
+ 'golden-hour': 'warm low golden-hour glow, soft long shadows',
51
+ 'neutral-studio': 'clean balanced studio light, even and neutral',
52
+ 'night-fire': 'flickering warm firelight against deep night shadow',
53
+ moonlight: 'cool blue moonlight, soft and directional with deep shadows',
54
+ overcast: 'flat soft overcast daylight, low contrast and even',
55
+ 'neon-split': 'split warm/cool neon key, magenta-and-cyan separation',
56
+ chiaroscuro: 'extreme chiaroscuro, a single hard source carving light from darkness',
57
+ silhouette: 'strong backlight rendering the subject as a near-silhouette',
58
+ fluorescent: 'flat green-tinged overhead fluorescent, institutional and even',
59
+ 'night-practical': 'warm practical pools against deep night, motivated sources only',
60
+ 'night-urban-neon': 'wet-street urban neon, mixed signage color spill at night',
61
+ 'rembrandt-gray': 'lean single-source Rembrandt close on a gray plate, matte and warm',
62
+ };
63
+ const GRADE = {
64
+ 'desaturated-earth': { shadowHue: 30, shadowSat: 18, highlightHue: 45, highlightSat: 22 },
65
+ 'teal-orange': { shadowHue: 190, shadowSat: 45, highlightHue: 30, highlightSat: 55 },
66
+ 'noir-bw': { shadowHue: 0, shadowSat: 0, highlightHue: 0, highlightSat: 0 },
67
+ 'warm-nostalgia': { shadowHue: 35, shadowSat: 25, highlightHue: 40, highlightSat: 30, gamma: 1.05 },
68
+ 'cool-isolation': { shadowHue: 210, shadowSat: 30, highlightHue: 205, highlightSat: 20 },
69
+ 'cyberpunk-neon': { shadowHue: 280, shadowSat: 60, highlightHue: 320, highlightSat: 65 },
70
+ 'bleach-bypass': { shadowHue: 0, shadowSat: 6, highlightHue: 0, highlightSat: 4, lift: 0.12, gamma: 1.1, gain: 0.92 },
71
+ 'mono-accent': { shadowHue: 0, shadowSat: 0, highlightHue: 0, highlightSat: 8 },
72
+ };
73
+ const GRADE_WORDS = {
74
+ 'desaturated-earth': 'muted earthy palette, dusty and restrained',
75
+ 'teal-orange': 'cinematic teal-and-orange contrast',
76
+ 'noir-bw': 'high-contrast monochrome noir',
77
+ 'warm-nostalgia': 'warm faded nostalgia, soft amber memory tone',
78
+ 'cool-isolation': 'cool desaturated isolation, blue-grey distance',
79
+ 'cyberpunk-neon': 'saturated magenta-and-cyan cyberpunk neon',
80
+ 'bleach-bypass': 'low-saturation high-density bleach-bypass with lifted blacks',
81
+ 'mono-accent': 'near-monochrome with a single restrained accent hue',
82
+ };
83
+ /**
84
+ * Build a camera-move prompt fragment at the requested detail level.
85
+ */
86
+ export function cameraSpec(m, d) {
87
+ const base = `${m.shot}, ${m.angle} angle, ${m.movement}`;
88
+ if (d === 'terse') {
89
+ return base;
90
+ }
91
+ if (d === 'standard') {
92
+ return `${m.shot}, ${m.angle} angle, ${m.lens}mm, ${MOVEMENT_QUALIFIER[m.movement]}`;
93
+ }
94
+ const velocity = m.velocityFtPerSec ?? DEFAULT_VELOCITY[m.movement];
95
+ return (`${m.shot}, ${m.angle} angle, ${m.lens}mm, ` +
96
+ `${m.movement} at ${velocity} ft/s, subtle lens breathing`);
97
+ }
98
+ /**
99
+ * Build a lighting prompt fragment at the requested detail level.
100
+ * Unknown ids fall back to a neutral string rather than throwing.
101
+ */
102
+ export function lightingSpec(id, d) {
103
+ const preset = LIGHTING[id];
104
+ if (!preset) {
105
+ if (d === 'terse') {
106
+ return 'soft neutral lighting';
107
+ }
108
+ return '5600K key at 45°, 2:1 ratio, neutral fill';
109
+ }
110
+ const words = LIGHTING_WORDS[id] ?? id;
111
+ if (d === 'terse') {
112
+ return words;
113
+ }
114
+ if (id === 'rembrandt-gray') {
115
+ const lean = 'one broad diffused source from camera-left and slightly above, a soft triangle of light on the shadow cheek, ' +
116
+ 'no hard shadow edges, no rim light, no hair light, no kicker; skin matte and velvety, warmth preserved and natural, never pale or cool-shifted';
117
+ return d === 'standard' ? '5200K key at 40°, 3:1 ratio' : `5200K key at 40°, 3:1 ratio, ${lean}`;
118
+ }
119
+ const core = `${preset.kelvin}K key at ${preset.keyDeg}°, ${preset.ratio} ratio`;
120
+ if (d === 'standard') {
121
+ return core;
122
+ }
123
+ return `${core}, gentle fill and crisp rim light, ${words}`;
124
+ }
125
+ /**
126
+ * The camera-bible "two-temperature technique": a warm key against a cool fill
127
+ * (or the reverse). Two temperatures in one shot read as depth, complexity, and
128
+ * dimension; a single temperature reads flat. Resolves the warm/cool Kelvin
129
+ * from the {@link LIGHTING} registry (unknown ids fall back to a warm
130
+ * golden-hour key / cool moonlight fill rather than throwing). Pure.
131
+ */
132
+ export function twoTemperatureClause(warmId, coolId, d) {
133
+ const warm = LIGHTING[warmId] ?? LIGHTING['golden-hour'];
134
+ const cool = LIGHTING[coolId] ?? LIGHTING.moonlight;
135
+ if (d === 'terse') {
136
+ return 'warm key against cool fill, two-temperature separation';
137
+ }
138
+ if (d === 'standard') {
139
+ return `warm key ~${warm.kelvin}K against cool fill ~${cool.kelvin}K`;
140
+ }
141
+ return (`two-temperature lighting: warm key ~${warm.kelvin}K (${warm.ratio}) against ` +
142
+ `cool fill ~${cool.kelvin}K — depth, complexity, dimension`);
143
+ }
144
+ /**
145
+ * Build a color-grade prompt fragment at the requested detail level.
146
+ * Unknown ids fall back to a neutral string rather than throwing.
147
+ */
148
+ export function gradeSpec(id, d) {
149
+ const preset = GRADE[id];
150
+ if (!preset) {
151
+ if (d === 'terse') {
152
+ return 'neutral grade';
153
+ }
154
+ if (d === 'standard') {
155
+ return 'balanced neutral grade, natural contrast';
156
+ }
157
+ return 'shadows 0° 0% neutral; highlights 0° 0% neutral, natural contrast';
158
+ }
159
+ const words = GRADE_WORDS[id] ?? id;
160
+ if (d === 'terse') {
161
+ return words;
162
+ }
163
+ if (d === 'standard') {
164
+ return `${words} grade`;
165
+ }
166
+ const richBase = `shadows ${preset.shadowHue}° ${preset.shadowSat}% tint; ` +
167
+ `highlights ${preset.highlightHue}° ${preset.highlightSat}% tint, ${words}`;
168
+ const curve = [
169
+ preset.lift !== undefined ? `lift ${preset.lift}` : '',
170
+ preset.gamma !== undefined ? `gamma ${preset.gamma}` : '',
171
+ preset.gain !== undefined ? `gain ${preset.gain}` : '',
172
+ ].filter(Boolean).join(', ');
173
+ return curve ? `${richBase}; ${curve}` : richBase;
174
+ }
175
+ /* ------------------------------------------------------------------------- *
176
+ * PROSE register — the Joey 2.0 "behavior-not-brand" emitters.
177
+ *
178
+ * The numeric register above (cameraSpec/lightingSpec/gradeSpec) stays for the
179
+ * provider numeric handoff and the storyboard-grid Style line. This PROSE
180
+ * register is the sibling Joey 2.0 wording: evocative *physical* phrasing that
181
+ * describes what the light/grade/lens DOES, with NO Kelvin, key-angle degrees,
182
+ * contrast ratio, hue°, sat°, or lift/gamma/gain numerals — but it KEEPS the
183
+ * real optical numerals (focal length mm, fps, shutter) that Joey 2.0 keeps,
184
+ * because those are genuine camera facts, not synthetic colour math.
185
+ *
186
+ * All emitters are pure/deterministic (no Date, no Math.random, no I/O).
187
+ * ------------------------------------------------------------------------- */
188
+ /**
189
+ * Joey 2.0 lighting *behaviour* descriptions, keyed by the same ids as
190
+ * {@link LIGHTING}. Each describes the source, the shadow shape, and what is
191
+ * deliberately absent (rim / hair light / kicker) — never a Kelvin or angle.
192
+ */
193
+ const LIGHTING_PROSE = {
194
+ 'rembrandt-gray': 'one broad diffused source from camera-left and slightly above, a soft triangle of light on the shadow cheek, ' +
195
+ 'gentle wrap, no rim, no hair light, no kicker',
196
+ 'hard-dawn': 'a single hard low source raking in from the side, long crisp shadows stretching across the frame, ' +
197
+ 'a clean edge where light meets dark',
198
+ 'golden-hour': 'warm low sun grazing the subject from behind and to the side, soft long shadows, a gentle amber wrap on the skin',
199
+ 'neutral-studio': 'one broad even diffused source filling the frame, soft balanced shadows, nothing harsh and nothing carved',
200
+ 'night-fire': 'a warm flickering source from below and to one side, deep shadow on the far cheek, light dancing across the face',
201
+ moonlight: 'a cool soft source from high and to the side, deep gentle shadows, a quiet blue wash with no warmth',
202
+ overcast: 'flat soft light from a wide grey sky, shadows almost gone, even and undirectional across the whole frame',
203
+ 'neon-split': 'a warm source on one cheek and a cool source on the other, the two colours meeting down the centre line of the face',
204
+ chiaroscuro: 'a single hard source carving the subject out of near-darkness, most of the frame falling away into shadow',
205
+ silhouette: 'a strong source behind the subject, the front left almost unlit, the figure read as shape against light',
206
+ fluorescent: 'a flat even overhead wash, soft shadows under the brow and chin, an institutional cool-green cast',
207
+ 'night-practical': 'warm pools from motivated practicals only, deep shadow between them, light falling off fast into the dark',
208
+ 'night-urban-neon': 'mixed coloured spill from off-screen signage, wet-street bounce, light pooling and shifting across the subject',
209
+ };
210
+ /**
211
+ * Build a PROSE lighting fragment at the requested detail level. Carries NO
212
+ * Kelvin / degrees / ratio numerals (use {@link lightingSpec} for those).
213
+ * Unknown ids fall back to a neutral description rather than throwing.
214
+ */
215
+ export function lightingProse(id, d) {
216
+ const prose = LIGHTING_PROSE[id];
217
+ if (!prose) {
218
+ const words = LIGHTING_WORDS[id];
219
+ return words ?? 'one soft diffused source, gentle even shadows, naturally lit';
220
+ }
221
+ if (d === 'terse') {
222
+ // condense to the leading clause (up to the first comma) for the terse form
223
+ const head = prose.split(',')[0];
224
+ return head;
225
+ }
226
+ return prose;
227
+ }
228
+ /**
229
+ * Joey 2.0 grade *behaviour* descriptions, keyed by the same ids as
230
+ * {@link GRADE}. Each describes how shadows and highlights are shaped in
231
+ * physical terms — never a hue°, sat%, or lift/gamma numeral.
232
+ */
233
+ const GRADE_PROSE = {
234
+ 'teal-orange': 'contemporary teal-amber cinema grade, warm key meeting cool fill, shadows lifted gently into deep blue-grey ' +
235
+ 'never crushed, highlights rolled off softly never clipping',
236
+ 'desaturated-earth': 'muted earthy grade, colour pulled back toward dust and stone, shadows lifted gently never crushed, ' +
237
+ 'highlights rolled off softly never clipping',
238
+ 'noir-bw': 'rich black-and-white grade, deep luminous shadows holding detail never crushed, bright highlights rolled off never clipping',
239
+ 'warm-nostalgia': 'warm faded grade with a soft amber memory tone, shadows lifted gently never crushed, highlights rolled off softly never clipping',
240
+ 'cool-isolation': 'cool desaturated grade leaning blue-grey, shadows lifted into distance never crushed, highlights rolled off softly never clipping',
241
+ 'cyberpunk-neon': 'saturated magenta-and-cyan neon grade, colour pushed in the highlights, shadows lifted into deep blue never crushed, ' +
242
+ 'highlights rolled off before clipping',
243
+ 'bleach-bypass': 'low-saturation high-density bleach-bypass grade, blacks lifted and milky never crushed, highlights held back from clipping',
244
+ 'mono-accent': 'near-monochrome grade with a single restrained accent colour, shadows lifted gently never crushed, highlights rolled off softly never clipping',
245
+ };
246
+ /**
247
+ * Build a PROSE grade fragment at the requested detail level. Carries NO
248
+ * hue° / sat% / lift-gamma numerals (use {@link gradeSpec} for those).
249
+ * Unknown ids fall back to a neutral description rather than throwing.
250
+ */
251
+ export function gradeProse(id, d) {
252
+ const prose = GRADE_PROSE[id];
253
+ if (!prose) {
254
+ const words = GRADE_WORDS[id];
255
+ if (words) {
256
+ return d === 'terse'
257
+ ? words
258
+ : `${words}, shadows lifted gently never crushed, highlights rolled off softly never clipping`;
259
+ }
260
+ return 'natural balanced grade, shadows lifted gently never crushed, highlights rolled off softly never clipping';
261
+ }
262
+ if (d === 'terse') {
263
+ return prose.split(',').slice(0, 2).join(',');
264
+ }
265
+ return prose;
266
+ }
267
+ /**
268
+ * Joey 2.0 camera/optics *behaviour* descriptions, keyed by {@link CameraMovement}.
269
+ * Each KEEPS the real optical numerals (focal length mm) Joey keeps, while
270
+ * describing the glass and operator in physical prose — no Kelvin / degrees / ratio.
271
+ */
272
+ const CAMERA_PROSE = {
273
+ dolly: 'wide-latitude cinema capture, vintage 75mm 2x anamorphic at a wide aperture, oval bokeh, soft diffusion bloom, ' +
274
+ 'smooth dolly with natural operator breath, color-negative film rendition with fine 35mm grain',
275
+ track: 'wide-latitude cinema capture, vintage 75mm 2x anamorphic at a wide aperture, oval bokeh, soft diffusion bloom, ' +
276
+ 'a tracking move with natural operator breath, color-negative film rendition with fine 35mm grain',
277
+ 'push-in': 'wide-latitude cinema capture, 50mm spherical prime at a wide aperture, soft diffusion bloom, ' +
278
+ 'a slow push-in with natural operator breath, color-negative film rendition with fine 35mm grain',
279
+ 'pull-out': 'wide-latitude cinema capture, 40mm spherical prime at a wide aperture, soft diffusion bloom, ' +
280
+ 'a slow pull-out with natural operator breath, color-negative film rendition with fine 35mm grain',
281
+ orbit: 'wide-latitude cinema capture, vintage 75mm 2x anamorphic at a wide aperture, oval bokeh, soft diffusion bloom, ' +
282
+ 'a steady orbit with natural operator breath, color-negative film rendition with fine 35mm grain',
283
+ pan: 'wide-latitude cinema capture, 35mm spherical prime at a wide aperture, soft diffusion bloom, ' +
284
+ 'a controlled pan with natural operator breath, color-negative film rendition with fine 35mm grain',
285
+ tilt: 'wide-latitude cinema capture, 35mm spherical prime at a wide aperture, soft diffusion bloom, ' +
286
+ 'a controlled tilt with natural operator breath, color-negative film rendition with fine 35mm grain',
287
+ handheld: 'wide-latitude cinema capture, vintage 75mm 2x anamorphic at a wide aperture, oval bokeh, soft diffusion bloom, ' +
288
+ 'handheld with natural operator breath, color-negative film rendition with fine 35mm grain',
289
+ 'locked-off': 'wide-latitude cinema capture, 50mm spherical prime at a wide aperture, soft diffusion bloom, ' +
290
+ 'locked-off with no movement, color-negative film rendition with fine 35mm grain',
291
+ };
292
+ /**
293
+ * Build a PROSE camera fragment for a {@link CameraMovement} at the requested
294
+ * detail level. KEEPS focal length mm (and any fps/shutter the caller adds) —
295
+ * those are real optical numerals — but carries NO Kelvin / key-angle degrees /
296
+ * contrast ratio. Unknown movements fall back to a handheld description.
297
+ */
298
+ export function cameraProse(move, d) {
299
+ const prose = CAMERA_PROSE[move] ?? CAMERA_PROSE.handheld;
300
+ if (d === 'terse') {
301
+ // keep the lens clause + the movement clause; drop the grade/grain tail
302
+ const parts = prose.split(', ');
303
+ return [parts[1], parts[parts.length - 2]].filter(Boolean).join(', ');
304
+ }
305
+ return prose;
306
+ }
307
+ /**
308
+ * The five canonical cinema modes. Order is intentional (narrative first,
309
+ * as the safe fallback); tests assert the sorted set.
310
+ */
311
+ export const CINEMA_MODE_IDS = ['narrative', 'studio', 'action', 'performance', 'atmospheric'];
312
+ const CINEMA_MODES = {
313
+ narrative: {
314
+ camera: 'lived-in real-world coverage, motivated framing, naturalistic eyelines',
315
+ lens: '35mm spherical primes, shallow-to-medium depth',
316
+ movement: 'grounded handheld and dolly, motivated reframes',
317
+ filtration: 'light black pro-mist 1/8, subtle halation on practicals',
318
+ grade: 'natural skin, gentle filmic contrast, true-to-life palette',
319
+ },
320
+ studio: {
321
+ camera: 'crafted void backdrop, controlled tabletop framing, precise composition',
322
+ lens: '50mm macro-capable primes, deep controlled focus',
323
+ movement: 'locked-off and motorized slider, perfectly repeatable moves',
324
+ filtration: 'clean uncoated glass, no diffusion, crisp specular highlights',
325
+ grade: 'clean neutral base, controlled contrast, accurate product color',
326
+ },
327
+ action: {
328
+ camera: 'kinetic handheld with whip-pans, fast aggressive coverage, dynamic angles',
329
+ lens: '24mm wide primes, fast apertures for snap focus',
330
+ movement: 'fast handheld, whip-pan and crash-zoom, rapid tracking',
331
+ filtration: 'minimal diffusion, hard contrast, occasional anamorphic flare',
332
+ grade: 'punchy high-contrast teal-and-orange, crushed shadows',
333
+ },
334
+ performance: {
335
+ camera: 'pit-photographer documentary framing, long-lens isolation, candid energy',
336
+ lens: '85–135mm telephoto, compressed perspective, creamy bokeh',
337
+ movement: 'shoulder-rig follow and long-lens pans, reactive not planned',
338
+ filtration: 'glimmerglass 1/4 for stage glow, gentle bloom on lights',
339
+ grade: 'saturated stage color, warm highlights, rich contrast',
340
+ },
341
+ atmospheric: {
342
+ camera: 'slow environmental wides, mood-led negative space, patient framing',
343
+ lens: '40mm primes, soft falloff, atmospheric depth',
344
+ movement: 'slow creeping push-in and drifting glide, near-static',
345
+ filtration: 'heavy black pro-mist 1/4, volumetric haze, soft bloom',
346
+ grade: 'desaturated moody palette, cool shadows, low-key contrast',
347
+ },
348
+ };
349
+ /**
350
+ * Resolve a cinema mode by id, falling back to `narrative` for unknown
351
+ * ids rather than throwing.
352
+ */
353
+ export function cinemaMode(id) {
354
+ return CINEMA_MODES[id] ?? CINEMA_MODES.narrative;
355
+ }
356
+ const ORBIT_MODE = {
357
+ camera: 'orbiting hero framing, subject centered as the camera arcs around it',
358
+ lens: '50mm primes, medium depth holding the subject sharp through the arc',
359
+ movement: 'smooth 360° orbit, steady circular tracking around the subject',
360
+ filtration: 'light black pro-mist 1/8, clean specular highlights',
361
+ grade: 'rich contrast, controlled color, hero-product polish',
362
+ };
363
+ const VOCAB_TO_MODE = {
364
+ cinematic: 'narrative',
365
+ 'handheld-social': 'action',
366
+ macro: 'studio',
367
+ glide: 'atmospheric',
368
+ stylized: 'performance',
369
+ };
370
+ /**
371
+ * Map a {@link CategoryDescriptor} `cameraVocab` token onto a {@link ModeSpec}.
372
+ *
373
+ * `orbit` resolves to a synthesized orbit spec; other known tokens map to a
374
+ * canonical mode. Unknown tokens fall back to `narrative` rather than throwing.
375
+ */
376
+ export function resolveCameraVocab(vocab) {
377
+ if (vocab === 'orbit') {
378
+ return ORBIT_MODE;
379
+ }
380
+ const mode = VOCAB_TO_MODE[vocab];
381
+ return mode ? CINEMA_MODES[mode] : CINEMA_MODES.narrative;
382
+ }
383
+ /**
384
+ * Render a {@link ModeSpec} as a single-line camera block string. The
385
+ * `spec.camera` fragment is preserved verbatim so callers (and tests) can
386
+ * locate it inside the block.
387
+ */
388
+ function renderModeBlock(spec) {
389
+ return `CAM: ${spec.camera} | ${spec.lens} | ${spec.movement} | ${spec.filtration} | ${spec.grade}`;
390
+ }
391
+ /**
392
+ * Stack cinema modes for a multi-world intercut sequence.
393
+ *
394
+ * Returns one {@link StackedShot} per input mode id, preserving input order
395
+ * AND duplicates. Each shot keeps its OWN {@link cinemaMode} spec and rendered
396
+ * camera block — adjacent modes are never averaged, merged, or collapsed into
397
+ * a single register, so intercutting between worlds stays visually distinct.
398
+ */
399
+ export function stackModes(modeIds) {
400
+ return modeIds.map((modeId) => {
401
+ const spec = cinemaMode(modeId);
402
+ return { modeId, spec, block: renderModeBlock(spec) };
403
+ });
404
+ }
405
+ /**
406
+ * The named 2-second hook patterns: scroll-stopping opening beats. Order is
407
+ * intentional and stable; callers may iterate {@link HOOK_PATTERN_IDS}.
408
+ */
409
+ export const HOOK_PATTERN_IDS = [
410
+ 'black-to-light',
411
+ 'silence-to-sound',
412
+ 'reverse-motion',
413
+ 'beat-drop',
414
+ 'match-cut-in',
415
+ 'whip-reveal',
416
+ 'speed-ramp',
417
+ 'first-person-rush',
418
+ 'impact-freeze',
419
+ 'title-burn-in',
420
+ 'slow-reveal',
421
+ 'snap-zoom',
422
+ // Per-category Seedance skill hook libraries (Track A → Track B bridge),
423
+ // append-only so the twelve generic ids above stay byte-stable.
424
+ // 3d-cgi
425
+ 'scale-reveal',
426
+ 'particle-materialize',
427
+ 'impossible-angle',
428
+ 'kinetic-decompose',
429
+ // cartoon
430
+ 'smash-zoom',
431
+ 'rubber-hose-stretch',
432
+ 'color-pop-burst',
433
+ 'fourth-wall-wink',
434
+ // fight-scenes
435
+ 'weapon-clash-spark',
436
+ 'ground-slam-shockwave',
437
+ 'blade-unsheath-flash',
438
+ // anime-action
439
+ 'speed-line-burst',
440
+ 'power-up-aura',
441
+ 'sakura-gust',
442
+ 'cross-impact-flash',
443
+ // music-video
444
+ 'hi-hat-flash-cuts',
445
+ 'synth-glitch',
446
+ 'harmonic-color-shift',
447
+ 'downbeat-reveal',
448
+ // social-hook
449
+ 'impossible-scale',
450
+ 'half-reveal',
451
+ 'wait-for-it',
452
+ 'ladder-reveal',
453
+ ];
454
+ const HOOK_PATTERNS = {
455
+ 'black-to-light': 'Hard cut from black to a blinding light burst that resolves into the hero subject, irises adjusting as detail floods in.',
456
+ 'silence-to-sound': 'Dead silence over a held still frame, then a sudden full-bandwidth sound hit lands as the image snaps into motion.',
457
+ 'reverse-motion': 'Action plays in eerie reverse — debris, liquid, and fabric rushing back into place — before it whips forward into real time.',
458
+ 'beat-drop': 'Rapid pre-roll build with quick-cut teases that freeze on the downbeat, then explode into the full scene on the drop.',
459
+ 'match-cut-in': 'A graphic match cut carries a shape, motion, or color straight from an everyday object into the hero subject in one seamless jump.',
460
+ 'whip-reveal': 'A fast whip-pan smears the frame into motion blur, then decelerates hard to reveal the hero subject dead-center.',
461
+ 'speed-ramp': 'Action ramps from slow-motion into real time on a single continuous move, time compressing as the hero subject commits.',
462
+ 'first-person-rush': 'A first-person rush hurtles forward through the environment, motion close and visceral, before braking hard on the hero subject.',
463
+ 'impact-freeze': 'The frame slams to a freeze on the exact instant of impact, debris suspended mid-air, then releases back into motion.',
464
+ 'title-burn-in': 'A single word burns in from particulate or light, holds for a beat, then dissolves as the scene takes over.',
465
+ 'slow-reveal': 'A slow tilt or pull gradually uncovers the hero subject from an obscuring foreground element, withholding then granting the full view.',
466
+ 'snap-zoom': 'A fast snap-zoom punches from a wide to a tight frame on the hero subject, landing hard with no settle.',
467
+ // --- 3d-cgi ---
468
+ 'scale-reveal': 'A continuous scale reveal rockets from a microscopic detail out to colossal scale, the hero subject snapping into frame as the magnitude lands.',
469
+ 'particle-materialize': 'The hero subject assembles out of a swirling cloud of particles that rush inward and lock into solid form on the beat.',
470
+ 'impossible-angle': 'An impossible camera angle — clipping through solid geometry or defying gravity — sweeps to frame the hero subject from a vantage no real rig could hold.',
471
+ 'kinetic-decompose': 'The hero subject explodes into its component parts mid-air, fragments suspended and rotating, then snaps back together into one solid form.',
472
+ // --- cartoon ---
473
+ 'smash-zoom': 'The character smash-zooms straight into the lens with a cartoon impact frame — eyes bulging, motion-blur trails streaking — then bounces back to a settle.',
474
+ 'rubber-hose-stretch': 'The subject squashes and stretches in exaggerated rubber-hose motion, anticipation winding up before it springs into the scene.',
475
+ 'color-pop-burst': 'A flat scene detonates into saturated color, shapes and confetti bursting outward from the hero subject on the beat.',
476
+ 'fourth-wall-wink': 'The character turns to camera, breaks the fourth wall with a knowing wink or grin, then spins back into the action.',
477
+ // --- fight-scenes ---
478
+ 'weapon-clash-spark': 'Two weapons collide dead-center frame in a radial burst of sparks, the camera kicking back as the shockwave rings out.',
479
+ 'ground-slam-shockwave': 'A combatant slams into the earth and a visible shockwave radiates outward in a perfect ring, dust kicking up as a second fighter staggers.',
480
+ 'blade-unsheath-flash': 'A blade is drawn in a single fluid motion, catching the light in a brilliant flash with the metallic ring of steel.',
481
+ // --- anime-action ---
482
+ 'speed-line-burst': 'Hard radial speed lines burst from the center as the hero subject snaps into a power pose, the frame vibrating with kinetic energy.',
483
+ 'power-up-aura': 'A surging aura erupts around the subject, ground cracking and debris lifting as the energy spikes and the frame floods with light.',
484
+ 'sakura-gust': 'A gust of cherry-blossom petals sweeps across frame, parting to reveal the hero subject mid-stride in still, charged air.',
485
+ 'cross-impact-flash': 'The frame freezes on a single impact frame — a bright cross-shaped highlight flaring at the point of contact — held for a beat before motion resumes.',
486
+ // --- music-video ---
487
+ 'hi-hat-flash-cuts': 'Rapid jump cuts fire on every hi-hat hit, snapping between framings with rhythm-matched light flashes.',
488
+ 'synth-glitch': 'On the synth stab the image glitches — horizontal tearing, frame lag, and a hard color shift — before resolving back to the performer.',
489
+ 'harmonic-color-shift': 'The entire palette shifts on the harmonic change, one chord melting the grade into a new dominant color as the scene holds.',
490
+ 'downbeat-reveal': 'An empty scene holds through the build, then cuts hard to the performer in sharp focus exactly on the downbeat.',
491
+ // --- social-hook ---
492
+ 'impossible-scale': 'An object or subject appears at an impossible scale — far too large or too small for its setting — forcing a double-take in the first second.',
493
+ 'half-reveal': 'The hero subject is only half-shown — cropped, occluded, or just out of frame — withholding the full view to bait the scroll-stopper.',
494
+ 'wait-for-it': 'A mundane setup holds with deliberate tension and an implied promise that something is about to happen, daring the viewer not to wait.',
495
+ 'ladder-reveal': 'A rapid escalating ladder of quick reveals, each one topping the last, ratcheting curiosity higher with every cut.',
496
+ };
497
+ /**
498
+ * Layered sound-design recipes keyed on a category's `audioProfile`. Density
499
+ * scales with {@link DetailLevel}. `diegetic` stays score-free (natural ambience
500
+ * + foley); `ad-mix` layers a music bed, product foley, hook/CTA accents, and a
501
+ * VO pocket.
502
+ */
503
+ const SOUND_DESIGN = {
504
+ diegetic: {
505
+ terse: 'Diegetic ambience and foley only.',
506
+ standard: 'Diegetic only — a natural ambient bed, close environmental foley, and subject-driven sound; no score.',
507
+ rich: 'Diegetic only — a natural ambient bed under close environmental foley, with subject-driven movement and contact sounds up front; no musical score and no narration.',
508
+ },
509
+ 'ad-mix': {
510
+ terse: 'Ad mix — music bed with foley accents.',
511
+ standard: 'Ad mix — a music bed under crisp product foley, with a punch-in SFX accent on the hook and a clean VO pocket.',
512
+ rich: 'Ad mix — a driving music bed, crisp close-up product foley, a punch-in SFX accent on the hook beat, a resolve sting on the CTA, and a clean VO pocket in the midrange.',
513
+ },
514
+ };
515
+ /**
516
+ * Resolve a category audio profile to a layered sound-design line. Pure and
517
+ * deterministic; defaults to the `standard` detail level.
518
+ */
519
+ export function soundDesign(profile, detail = 'standard') {
520
+ return SOUND_DESIGN[profile][detail];
521
+ }
522
+ /**
523
+ * Pad an integer second count to a 2-digit string (assumes < 60).
524
+ */
525
+ function padSeconds(seconds) {
526
+ return String(seconds).padStart(2, '0');
527
+ }
528
+ /**
529
+ * Resolve a named opening-hook pattern id to its directive description.
530
+ *
531
+ * Like {@link hookBeat}, an unknown id THROWS rather than falling back — hooks
532
+ * must be explicit. Exported so CLI surfaces can prepend the directive without
533
+ * re-deriving the table.
534
+ */
535
+ export function resolveHookPattern(pattern) {
536
+ const description = HOOK_PATTERNS[pattern];
537
+ if (!description) {
538
+ throw new Error(`unknown hook pattern: ${pattern}`);
539
+ }
540
+ return description;
541
+ }
542
+ /**
543
+ * Render a named 2-second opening hook as a timecoded beat.
544
+ *
545
+ * Returns `"[00:00 - 00:0N] <description>"` where `N` is `hookSeconds`
546
+ * (zero-padded, assumed < 60). Unlike the cinema-mode resolvers, an unknown
547
+ * pattern id THROWS rather than falling back — hooks must be explicit.
548
+ */
549
+ export function hookBeat(pattern, hookSeconds) {
550
+ const description = HOOK_PATTERNS[pattern];
551
+ if (!description) {
552
+ throw new Error(`unknown hook pattern: ${pattern}`);
553
+ }
554
+ return `[00:00 - 00:${padSeconds(hookSeconds)}] ${description}`;
555
+ }
556
+ const NEUTRAL_GENRE_DEFAULTS = {
557
+ paletteHue: 30,
558
+ saturationPct: 45,
559
+ cutRatePerSec: 0.4,
560
+ keyLightId: 'neutral-studio',
561
+ };
562
+ const GENRE_DEFAULTS = {
563
+ 'live-action': { paletteHue: 30, saturationPct: 50, cutRatePerSec: 0.4, keyLightId: 'golden-hour' },
564
+ pixar: { paletteHue: 45, saturationPct: 80, cutRatePerSec: 0.5, keyLightId: 'neutral-studio' },
565
+ anime: { paletteHue: 210, saturationPct: 75, cutRatePerSec: 0.7, keyLightId: 'hard-dawn' },
566
+ noir: { paletteHue: 220, saturationPct: 10, cutRatePerSec: 0.3, keyLightId: 'night-fire' },
567
+ influencer: { paletteHue: 25, saturationPct: 65, cutRatePerSec: 0.8, keyLightId: 'neutral-studio' },
568
+ action: { paletteHue: 200, saturationPct: 70, cutRatePerSec: 1.2, keyLightId: 'hard-dawn' },
569
+ 'music-video': { paletteHue: 280, saturationPct: 85, cutRatePerSec: 1.0, keyLightId: 'night-fire' },
570
+ };
571
+ /**
572
+ * Resolve per-genre look defaults. Case-insensitive; unknown genres fall
573
+ * back to a neutral default rather than throwing.
574
+ */
575
+ export function genreDefaults(genre) {
576
+ return GENRE_DEFAULTS[genre.toLowerCase()] ?? NEUTRAL_GENRE_DEFAULTS;
577
+ }
578
+ /**
579
+ * Lay out a sequence of weighted steps as contiguous beats spanning
580
+ * `[startOffset, durationSeconds]`. The last beat's `end` is pinned exactly to
581
+ * `durationSeconds` so rounding never leaves a gap or overshoot.
582
+ */
583
+ function layoutSteps(steps, durationSeconds, startOffset) {
584
+ const totalWeight = steps.reduce((sum, step) => sum + step.weight, 0) || 1;
585
+ const span = durationSeconds - startOffset;
586
+ const result = [];
587
+ let cursor = startOffset;
588
+ steps.forEach((step, index) => {
589
+ const isLast = index === steps.length - 1;
590
+ const end = isLast
591
+ ? durationSeconds
592
+ : Math.round((cursor + (span * step.weight) / totalWeight) * 100) / 100;
593
+ result.push({ start: cursor, end, label: step.label, direction: step.direction });
594
+ cursor = end;
595
+ });
596
+ return result;
597
+ }
598
+ /**
599
+ * Generate an ordered, contiguous set of {@link Beat}s for a beat template.
600
+ *
601
+ * The first beat always starts at 0 and the last beat always ends at
602
+ * `durationSeconds`, with no gaps between adjacent beats.
603
+ *
604
+ * - `three-act`: setup → inciting → rising → climax → resolve.
605
+ * - `ad-hook-feature-cta`: a HOOK beat `[0, hookSeconds]` (defaulting to a short
606
+ * 2s hook, clamped below the duration, when `hookSeconds` is 0), then
607
+ * feature/benefit beats, ending with a CTA beat.
608
+ * - `turntable`: a "Hero angle" open and a "Hero angle (return)" close bracketing
609
+ * rotation beats.
610
+ * - `lookbook`: a sequence of pose-change beats.
611
+ */
612
+ export function beats(template, durationSeconds, hookSeconds) {
613
+ switch (template) {
614
+ case 'three-act':
615
+ return layoutSteps([
616
+ { label: 'Setup', direction: 'establish the subject, place, and tone', weight: 1 },
617
+ { label: 'Inciting', direction: 'introduce the disruption that sets the story in motion', weight: 1 },
618
+ { label: 'Rising', direction: 'escalate stakes and momentum toward the peak', weight: 2 },
619
+ { label: 'Climax', direction: 'land the highest-energy payoff beat', weight: 1 },
620
+ { label: 'Resolve', direction: 'settle the frame and leave a lingering final image', weight: 1 },
621
+ ], durationSeconds, 0);
622
+ case 'ad-hook-feature-cta': {
623
+ const hookEnd = hookSeconds > 0
624
+ ? Math.min(hookSeconds, durationSeconds)
625
+ : Math.min(2, Math.max(0, durationSeconds - 1));
626
+ const hook = {
627
+ start: 0,
628
+ end: hookEnd,
629
+ label: 'Hook',
630
+ direction: 'scroll-stopping opening beat that earns the next second',
631
+ };
632
+ const rest = layoutSteps([
633
+ { label: 'Feature', direction: 'show the product or idea in clear, confident detail', weight: 1 },
634
+ { label: 'Benefit', direction: 'translate the feature into a felt payoff for the viewer', weight: 1 },
635
+ { label: 'CTA', direction: 'direct call to action with a clear next step', weight: 1 },
636
+ ], durationSeconds, hookEnd);
637
+ return [hook, ...rest];
638
+ }
639
+ case 'turntable':
640
+ return layoutSteps([
641
+ { label: 'Hero angle', direction: 'open on the hero three-quarter angle, locked and clean', weight: 1 },
642
+ { label: 'Rotation', direction: 'smooth quarter-turn revealing form and surface', weight: 1 },
643
+ { label: 'Rotation (back)', direction: 'continue the orbit through the rear profile', weight: 1 },
644
+ { label: 'Hero angle (return)', direction: 'settle back on the hero three-quarter angle to close', weight: 1 },
645
+ ], durationSeconds, 0);
646
+ case 'lookbook':
647
+ return layoutSteps([
648
+ { label: 'Look 1', direction: 'first pose and styling, full-length establishing frame', weight: 1 },
649
+ { label: 'Look 2', direction: 'pose change with a fresh angle and energy', weight: 1 },
650
+ { label: 'Look 3', direction: 'final pose and styling, signature closing frame', weight: 1 },
651
+ ], durationSeconds, 0);
652
+ case 'song-structure':
653
+ return layoutSteps([
654
+ { label: 'Intro', direction: 'cold-open establishing image before the first vocal lands', weight: 1 },
655
+ { label: 'Verse', direction: 'verse groove — performance and narrative build, steady cutting', weight: 2 },
656
+ { label: 'Chorus', direction: 'chorus payoff — peak energy, the hook visual, widest motion', weight: 2 },
657
+ { label: 'Bridge', direction: 'bridge — change of texture, tempo, or location for contrast', weight: 1 },
658
+ { label: 'Outro', direction: 'outro — final held image as the track resolves', weight: 1 },
659
+ ], durationSeconds, 0);
660
+ case 'tension-release':
661
+ return layoutSteps([
662
+ { label: 'Standoff', direction: 'combatants square up — stillness and held breath before contact', weight: 1 },
663
+ { label: 'Build', direction: 'feints, footwork, and rising kinetic pressure', weight: 1 },
664
+ { label: 'Clash', direction: 'the peak exchange at full speed and impact', weight: 2 },
665
+ { label: 'Aftermath', direction: 'the hit lands, momentum bleeds out, the frame settles', weight: 1 },
666
+ ], durationSeconds, 0);
667
+ case 'social-2s-hook':
668
+ return layoutSteps([
669
+ { label: 'Hook', direction: 'instant scroll-stopping pattern-interrupt visual in the first beat', weight: 1 },
670
+ { label: 'Curiosity', direction: 'open a curiosity gap that withholds the payoff', weight: 1 },
671
+ { label: 'Escalate', direction: 'raise the stakes or reveal in rising steps', weight: 2 },
672
+ { label: 'Payoff', direction: 'deliver the promised reveal and a loop-back final beat', weight: 1 },
673
+ ], durationSeconds, 0);
674
+ case 'panel-sequence':
675
+ return layoutSteps([
676
+ { label: 'Panel 1', direction: 'open on the first comic panel, holding its key composition', weight: 1 },
677
+ { label: 'Panel 2', direction: 'cut to the next panel, advancing the action with a match on motion', weight: 1 },
678
+ { label: 'Turn', direction: 'the turn panel — the beat that flips the situation', weight: 1 },
679
+ { label: 'Splash', direction: 'the splash panel — the widest, highest-impact frame', weight: 1 },
680
+ ], durationSeconds, 0);
681
+ default: {
682
+ const exhaustive = template;
683
+ throw new Error(`unknown beat template: ${String(exhaustive)}`);
684
+ }
685
+ }
686
+ }
687
+ /**
688
+ * Precise orbit/turntable camera grammar. Product-360 categories need exact
689
+ * terms — a generic "orbit" conflates three distinct motions:
690
+ * - `product-rotation`: the object spins; the camera stays locked/static.
691
+ * - `camera-orbit`: the camera circles a static subject.
692
+ * - `parallax-orbit`: the camera arcs with foreground/background depth parallax.
693
+ *
694
+ * Order is intentional and stable; tests assert the sorted set.
695
+ */
696
+ export const ORBIT_KINDS = ['product-rotation', 'camera-orbit', 'parallax-orbit'];
697
+ const ORBIT_GRAMMAR = {
698
+ 'product-rotation': 'Camera locked off and static; the object rotates in place on a motorized turntable, spinning a smooth 360° to reveal every surface while the frame stays perfectly still.',
699
+ 'camera-orbit': 'Camera arcs in a smooth circle around a static subject, orbiting on a fixed radius so the subject holds dead-center while the background sweeps behind it.',
700
+ 'parallax-orbit': 'Camera arcs around the subject with pronounced depth parallax — foreground elements sweep past faster than the distant background, layering the planes for a strong sense of dimensional depth.',
701
+ };
702
+ /**
703
+ * Resolve a precise camera-direction string for an {@link OrbitKind}. Unknown
704
+ * kinds fall back to the `camera-orbit` grammar rather than throwing.
705
+ */
706
+ export function orbitGrammar(kind) {
707
+ return ORBIT_GRAMMAR[kind] ?? ORBIT_GRAMMAR['camera-orbit'];
708
+ }
709
+ /**
710
+ * Build an audio-mix prompt fragment at the requested detail level.
711
+ * - terse: evocative words only, no numbers
712
+ * - standard: brief layer naming
713
+ * - rich: an explicit dB hierarchy with a silence/re-entry beat
714
+ */
715
+ export function audioMix(d) {
716
+ if (d === 'terse') {
717
+ return 'natural ambience, grounded foley, present dialogue';
718
+ }
719
+ if (d === 'standard') {
720
+ return 'ambience bed under foley, dialogue forward, music supportive';
721
+ }
722
+ return ('ambient -4 dB, foley -1 dB, dialogue 0 dB ref, music -2 dB; ' +
723
+ '1.5–2.5s silence then sudden re-entry');
724
+ }
725
+ /**
726
+ * Anti-plastic physics clauses (banana-pro-director). Each is a standalone
727
+ * exported string helper so callers can compose them individually before the
728
+ * full captureRealismBlock lands. Per-zone specular naming is required —
729
+ * "matte skin" alone is too weak and gets overridden by the model default.
730
+ */
731
+ export function specularKillClause() {
732
+ return 'all specular highlights surgically removed from skin — zero shine on forehead, nose bridge, cheekbones, temples, and chin, no oily T-zone, skin matte and velvety';
733
+ }
734
+ export function subsurfaceScatteringClause() {
735
+ return 'subsurface scattering at ear edges, nostrils, and around the eye sockets with warm undertone bleed, reading as semi-translucent biology never opaque plastic';
736
+ }
737
+ export function strandHairClause() {
738
+ return 'hair rendered strand by strand with flyaways and baby hairs at the hairline, hair physics responding to the actual environment, matte by default never glossy';
739
+ }
740
+ export function contrastCurveClause() {
741
+ return 'shadows lifted gently, highlights rolled off, nothing clipping or crushing — a low-contrast slightly-desaturated grade with warmth preserved';
742
+ }
743
+ export function moistureMatteClause() {
744
+ return 'damp not beaded, wet not glossy — moisture mutes and saturates the surface without a single specular hotspot';
745
+ }
746
+ export function flatteringRealismClause() {
747
+ return 'no acne, no blemishes, no enlarged or rough pores, no harsh clinical texture — fine flattering even skin';
748
+ }
749
+ const HAZE_WORDS = {
750
+ thin: 'a faint trace of atmosphere',
751
+ light: 'light atmospheric haze',
752
+ heavy: 'heavy volumetric haze and visible air density',
753
+ };
754
+ /**
755
+ * Volumetric depth ("lighting the air") — the single biggest anti-plastic
756
+ * depth lever. Exposed standalone; previously reachable only inside the
757
+ * `atmospheric` cinema mode's filtration field.
758
+ */
759
+ export function volumetricHaze(density, d) {
760
+ const words = HAZE_WORDS[density];
761
+ if (d === 'terse') {
762
+ return `${words} between camera, subject, and background`;
763
+ }
764
+ const core = `${words} between the camera, subject, and background — distant planes rendered softer, ` +
765
+ 'desaturated, and lower-contrast than the foreground';
766
+ if (d === 'standard') {
767
+ return core;
768
+ }
769
+ return `${core}; real volumetric atmosphere, never a flat backdrop`;
770
+ }
771
+ /**
772
+ * The keystone anti-AI-look block: physics-vs-hardware separation that does not
773
+ * exist anywhere else in the codebase. Composes per-zone specular kill,
774
+ * subsurface scattering, strand hair, contrast-curve-three-ways, volumetric
775
+ * haze, optional moisture, the flattering-realism ceiling, and film grain.
776
+ * Pure and deterministic; density scales with DetailLevel.
777
+ */
778
+ export function captureRealismBlock(opts, d) {
779
+ const grain = opts.grainStock ?? '35mm';
780
+ const haze = volumetricHaze(opts.haze ?? 'light', d);
781
+ // terse: condensed summary (full clause composition only on standard/rich)
782
+ if (d === 'terse') {
783
+ return `Matte anti-plastic skin, soft ${grain} grain, ${haze}.`;
784
+ }
785
+ const parts = [
786
+ specularKillClause(),
787
+ subsurfaceScatteringClause(),
788
+ strandHairClause(),
789
+ contrastCurveClause(),
790
+ haze,
791
+ flatteringRealismClause(),
792
+ ];
793
+ if (opts.wet) {
794
+ parts.push(moistureMatteClause());
795
+ }
796
+ parts.push(`soft natural ${grain} film grain, photographed not generated`);
797
+ return `Capture realism: ${parts.join('; ')}.`;
798
+ }
799
+ /**
800
+ * The amateur / anti-AI phone-capture register — the UGC sibling of
801
+ * {@link captureRealismBlock}. Where captureRealismBlock describes high-end
802
+ * cinema hardware (anamorphic glass, diffusion, film grain), THIS register
803
+ * deliberately strips all of that and reads as an unstaged smartphone clip:
804
+ * available light, computational-HDR flatness, slight phone-lens softness, and
805
+ * the casual imperfection that signals "not an ad." This is a NEW sibling
806
+ * register — the phone/UGC voice is NOT part of Joey's 2.0 skills (those are
807
+ * cinema-only); it is inspired by Joey's anti-AI / "avoid commercial gloss"
808
+ * philosophy rather than lifted from his wording.
809
+ *
810
+ * A flattering-skin clause is kept by default (good UGC still flatters the
811
+ * subject); that clause IS from banana-pro-director-2.0. The cinema gear — film
812
+ * grain, anamorphic, diffusion bloom — is dropped. Pure and deterministic;
813
+ * density scales with DetailLevel.
814
+ */
815
+ export function phoneCaptureBlock(opts, d) {
816
+ const flattering = opts.flatteringSkin !== false;
817
+ const skin = flattering
818
+ ? 'fine flattering even skin, no acne, no blemishes, no harsh clinical texture'
819
+ : '';
820
+ if (d === 'terse') {
821
+ const head = 'shot on a modern smartphone camera, natural available light, the casual imperfection of an unstaged phone clip — never cinematic, never an ad';
822
+ return skin ? `${head}; ${skin}.` : `${head}.`;
823
+ }
824
+ const parts = [
825
+ 'shot on a modern smartphone camera',
826
+ 'natural available light',
827
+ 'mild auto-exposure drift',
828
+ 'slightly soft phone-lens focus',
829
+ 'flat computational-HDR tonality',
830
+ 'no film grain',
831
+ 'no anamorphic',
832
+ 'no diffusion bloom',
833
+ 'the casual imperfection of an unstaged phone clip — never color-graded, never cinematic, never an ad',
834
+ ];
835
+ if (skin) {
836
+ parts.push(skin);
837
+ }
838
+ return `Phone capture: ${parts.join('; ')}.`;
839
+ }
840
+ /**
841
+ * Three-plane volumetric haze: the depth-staging extension of
842
+ * {@link volumetricHaze}. When given foreground / midground / background plane
843
+ * labels it emits the explicit three-plane relationship — the foreground sharp
844
+ * and saturated, the midground softening, the background softest, most
845
+ * desaturated, and lowest-contrast — so the haze reads as real staged depth
846
+ * rather than a flat wash.
847
+ *
848
+ * Backward-compatible: with NO plane labels it returns exactly today's
849
+ * single-register {@link volumetricHaze} string. Carries no Kelvin / degrees /
850
+ * ratio numerals. Pure and deterministic.
851
+ */
852
+ export function volumetricHazeThreePlane(opts, d) {
853
+ const density = opts.density ?? 'light';
854
+ const { foreground, midground, background } = opts;
855
+ // No plane labels => identical to the single-register haze (backward compatible).
856
+ if (!foreground && !midground && !background) {
857
+ return volumetricHaze(density, d);
858
+ }
859
+ const words = HAZE_WORDS[density];
860
+ const fg = foreground ?? 'the foreground';
861
+ const mg = midground ?? 'the midground';
862
+ const bg = background ?? 'the background';
863
+ const relationship = `${fg} held sharp and fully saturated nearest camera, ` +
864
+ `${mg} softening and stepping back through the haze, ` +
865
+ `${bg} the softest, most desaturated, and lowest-contrast plane of all`;
866
+ if (d === 'terse') {
867
+ return `${words} staged across three planes: ${relationship}`;
868
+ }
869
+ const core = `${words} layered across three depth planes — ${relationship} — ` +
870
+ 'so the air itself carves the depth between them';
871
+ if (d === 'standard') {
872
+ return core;
873
+ }
874
+ return `${core}; real volumetric atmosphere staged front-to-back, never a flat backdrop`;
875
+ }
876
+ const PLATE_WORDS = {
877
+ 'mid-gray': 'even neutral mid-gray seamless background, no seam line, no gradient, no falloff to black or white',
878
+ white: 'clean white seamless background, evenly lit, no gradient',
879
+ black: 'deep matte black seamless background, no spill, no falloff edge',
880
+ };
881
+ /**
882
+ * Backdrop plate spec. Mid-gray is the locked default for ALL character work —
883
+ * it lowers subject-to-background contrast so downstream video inherits cleaner
884
+ * edges. White/black are explicit opt-ins.
885
+ */
886
+ export function backgroundPlate(kind, d) {
887
+ const words = PLATE_WORDS[kind];
888
+ if (d === 'terse') {
889
+ return words;
890
+ }
891
+ if (kind === 'mid-gray') {
892
+ // standard: plate words only; rich: add the true-natural-tone elaboration
893
+ return d === 'rich'
894
+ ? `${words}; subject and wardrobe rendered at their true natural tone against the neutral gray`
895
+ : words;
896
+ }
897
+ return words;
898
+ }
899
+ /**
900
+ * Beat-aligned audio direction for music videos. Positive tempo phrasing only
901
+ * (negative direction like "no slow motion" does not work on these models).
902
+ */
903
+ export function musicSyncLine(bpm, d) {
904
+ if (d === 'terse') {
905
+ return 'cuts and motion land on the beat';
906
+ }
907
+ const tempo = bpm ? ` at ${bpm} BPM` : '';
908
+ const core = `cuts, accents, and subject motion land on the downbeat${tempo}, edited to the music's rhythm`;
909
+ if (d === 'standard') {
910
+ return core;
911
+ }
912
+ return `${core}; energy builds into each drop and holds through the bar`;
913
+ }
914
+ //# sourceMappingURL=cinematography.js.map