@vibeframe/cli 0.55.0 → 0.55.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +63452 -233
- package/package.json +11 -6
- package/dist/agent/adapters/claude.d.ts +0 -15
- package/dist/agent/adapters/claude.d.ts.map +0 -1
- package/dist/agent/adapters/claude.js +0 -119
- package/dist/agent/adapters/claude.js.map +0 -1
- package/dist/agent/adapters/gemini.d.ts +0 -15
- package/dist/agent/adapters/gemini.d.ts.map +0 -1
- package/dist/agent/adapters/gemini.js +0 -132
- package/dist/agent/adapters/gemini.js.map +0 -1
- package/dist/agent/adapters/index.d.ts +0 -28
- package/dist/agent/adapters/index.d.ts.map +0 -1
- package/dist/agent/adapters/index.js +0 -43
- package/dist/agent/adapters/index.js.map +0 -1
- package/dist/agent/adapters/ollama.d.ts +0 -20
- package/dist/agent/adapters/ollama.d.ts.map +0 -1
- package/dist/agent/adapters/ollama.js +0 -186
- package/dist/agent/adapters/ollama.js.map +0 -1
- package/dist/agent/adapters/openai.d.ts +0 -15
- package/dist/agent/adapters/openai.d.ts.map +0 -1
- package/dist/agent/adapters/openai.js +0 -92
- package/dist/agent/adapters/openai.js.map +0 -1
- package/dist/agent/adapters/openrouter.d.ts +0 -16
- package/dist/agent/adapters/openrouter.d.ts.map +0 -1
- package/dist/agent/adapters/openrouter.js +0 -100
- package/dist/agent/adapters/openrouter.js.map +0 -1
- package/dist/agent/adapters/openrouter.test.d.ts +0 -5
- package/dist/agent/adapters/openrouter.test.d.ts.map +0 -1
- package/dist/agent/adapters/openrouter.test.js +0 -73
- package/dist/agent/adapters/openrouter.test.js.map +0 -1
- package/dist/agent/adapters/xai.d.ts +0 -15
- package/dist/agent/adapters/xai.d.ts.map +0 -1
- package/dist/agent/adapters/xai.js +0 -95
- package/dist/agent/adapters/xai.js.map +0 -1
- package/dist/agent/index.d.ts +0 -69
- package/dist/agent/index.d.ts.map +0 -1
- package/dist/agent/index.js +0 -180
- package/dist/agent/index.js.map +0 -1
- package/dist/agent/memory/index.d.ts +0 -70
- package/dist/agent/memory/index.d.ts.map +0 -1
- package/dist/agent/memory/index.js +0 -132
- package/dist/agent/memory/index.js.map +0 -1
- package/dist/agent/prompts/system.d.ts +0 -6
- package/dist/agent/prompts/system.d.ts.map +0 -1
- package/dist/agent/prompts/system.js +0 -103
- package/dist/agent/prompts/system.js.map +0 -1
- package/dist/agent/tools/ai-editing.d.ts +0 -15
- package/dist/agent/tools/ai-editing.d.ts.map +0 -1
- package/dist/agent/tools/ai-editing.js +0 -763
- package/dist/agent/tools/ai-editing.js.map +0 -1
- package/dist/agent/tools/ai-generation.d.ts +0 -13
- package/dist/agent/tools/ai-generation.d.ts.map +0 -1
- package/dist/agent/tools/ai-generation.js +0 -973
- package/dist/agent/tools/ai-generation.js.map +0 -1
- package/dist/agent/tools/ai-pipeline.d.ts +0 -14
- package/dist/agent/tools/ai-pipeline.d.ts.map +0 -1
- package/dist/agent/tools/ai-pipeline.js +0 -961
- package/dist/agent/tools/ai-pipeline.js.map +0 -1
- package/dist/agent/tools/ai.d.ts +0 -13
- package/dist/agent/tools/ai.d.ts.map +0 -1
- package/dist/agent/tools/ai.js +0 -19
- package/dist/agent/tools/ai.js.map +0 -1
- package/dist/agent/tools/batch.d.ts +0 -6
- package/dist/agent/tools/batch.d.ts.map +0 -1
- package/dist/agent/tools/batch.js +0 -383
- package/dist/agent/tools/batch.js.map +0 -1
- package/dist/agent/tools/e2e.test.d.ts +0 -26
- package/dist/agent/tools/e2e.test.d.ts.map +0 -1
- package/dist/agent/tools/e2e.test.js +0 -397
- package/dist/agent/tools/e2e.test.js.map +0 -1
- package/dist/agent/tools/export.d.ts +0 -6
- package/dist/agent/tools/export.d.ts.map +0 -1
- package/dist/agent/tools/export.js +0 -171
- package/dist/agent/tools/export.js.map +0 -1
- package/dist/agent/tools/filesystem.d.ts +0 -6
- package/dist/agent/tools/filesystem.d.ts.map +0 -1
- package/dist/agent/tools/filesystem.js +0 -212
- package/dist/agent/tools/filesystem.js.map +0 -1
- package/dist/agent/tools/index.d.ts +0 -66
- package/dist/agent/tools/index.d.ts.map +0 -1
- package/dist/agent/tools/index.js +0 -123
- package/dist/agent/tools/index.js.map +0 -1
- package/dist/agent/tools/integration.test.d.ts +0 -11
- package/dist/agent/tools/integration.test.d.ts.map +0 -1
- package/dist/agent/tools/integration.test.js +0 -659
- package/dist/agent/tools/integration.test.js.map +0 -1
- package/dist/agent/tools/media.d.ts +0 -6
- package/dist/agent/tools/media.d.ts.map +0 -1
- package/dist/agent/tools/media.js +0 -616
- package/dist/agent/tools/media.js.map +0 -1
- package/dist/agent/tools/project.d.ts +0 -6
- package/dist/agent/tools/project.d.ts.map +0 -1
- package/dist/agent/tools/project.js +0 -284
- package/dist/agent/tools/project.js.map +0 -1
- package/dist/agent/tools/scene.d.ts +0 -17
- package/dist/agent/tools/scene.d.ts.map +0 -1
- package/dist/agent/tools/scene.js +0 -263
- package/dist/agent/tools/scene.js.map +0 -1
- package/dist/agent/tools/scene.test.d.ts +0 -2
- package/dist/agent/tools/scene.test.d.ts.map +0 -1
- package/dist/agent/tools/scene.test.js +0 -139
- package/dist/agent/tools/scene.test.js.map +0 -1
- package/dist/agent/tools/timeline.d.ts +0 -6
- package/dist/agent/tools/timeline.d.ts.map +0 -1
- package/dist/agent/tools/timeline.js +0 -875
- package/dist/agent/tools/timeline.js.map +0 -1
- package/dist/agent/types.d.ts +0 -59
- package/dist/agent/types.d.ts.map +0 -1
- package/dist/agent/types.js +0 -5
- package/dist/agent/types.js.map +0 -1
- package/dist/commands/_shared/scene-audio-mux.d.ts +0 -75
- package/dist/commands/_shared/scene-audio-mux.d.ts.map +0 -1
- package/dist/commands/_shared/scene-audio-mux.js +0 -159
- package/dist/commands/_shared/scene-audio-mux.js.map +0 -1
- package/dist/commands/_shared/scene-audio-mux.test.d.ts +0 -7
- package/dist/commands/_shared/scene-audio-mux.test.d.ts.map +0 -1
- package/dist/commands/_shared/scene-audio-mux.test.js +0 -94
- package/dist/commands/_shared/scene-audio-mux.test.js.map +0 -1
- package/dist/commands/_shared/scene-audio-scan.d.ts +0 -94
- package/dist/commands/_shared/scene-audio-scan.d.ts.map +0 -1
- package/dist/commands/_shared/scene-audio-scan.js +0 -144
- package/dist/commands/_shared/scene-audio-scan.js.map +0 -1
- package/dist/commands/_shared/scene-audio-scan.test.d.ts +0 -6
- package/dist/commands/_shared/scene-audio-scan.test.d.ts.map +0 -1
- package/dist/commands/_shared/scene-audio-scan.test.js +0 -190
- package/dist/commands/_shared/scene-audio-scan.test.js.map +0 -1
- package/dist/commands/_shared/scene-html-emit.d.ts +0 -120
- package/dist/commands/_shared/scene-html-emit.d.ts.map +0 -1
- package/dist/commands/_shared/scene-html-emit.js +0 -422
- package/dist/commands/_shared/scene-html-emit.js.map +0 -1
- package/dist/commands/_shared/scene-html-emit.test.d.ts +0 -2
- package/dist/commands/_shared/scene-html-emit.test.d.ts.map +0 -1
- package/dist/commands/_shared/scene-html-emit.test.js +0 -396
- package/dist/commands/_shared/scene-html-emit.test.js.map +0 -1
- package/dist/commands/_shared/scene-lint.d.ts +0 -110
- package/dist/commands/_shared/scene-lint.d.ts.map +0 -1
- package/dist/commands/_shared/scene-lint.js +0 -207
- package/dist/commands/_shared/scene-lint.js.map +0 -1
- package/dist/commands/_shared/scene-lint.test.d.ts +0 -2
- package/dist/commands/_shared/scene-lint.test.d.ts.map +0 -1
- package/dist/commands/_shared/scene-lint.test.js +0 -208
- package/dist/commands/_shared/scene-lint.test.js.map +0 -1
- package/dist/commands/_shared/scene-project.d.ts +0 -101
- package/dist/commands/_shared/scene-project.d.ts.map +0 -1
- package/dist/commands/_shared/scene-project.js +0 -281
- package/dist/commands/_shared/scene-project.js.map +0 -1
- package/dist/commands/_shared/scene-project.test.d.ts +0 -2
- package/dist/commands/_shared/scene-project.test.d.ts.map +0 -1
- package/dist/commands/_shared/scene-project.test.js +0 -203
- package/dist/commands/_shared/scene-project.test.js.map +0 -1
- package/dist/commands/_shared/scene-render.d.ts +0 -85
- package/dist/commands/_shared/scene-render.d.ts.map +0 -1
- package/dist/commands/_shared/scene-render.js +0 -178
- package/dist/commands/_shared/scene-render.js.map +0 -1
- package/dist/commands/_shared/scene-render.test.d.ts +0 -2
- package/dist/commands/_shared/scene-render.test.d.ts.map +0 -1
- package/dist/commands/_shared/scene-render.test.js +0 -145
- package/dist/commands/_shared/scene-render.test.js.map +0 -1
- package/dist/commands/_shared/segments-to-scenes.d.ts +0 -85
- package/dist/commands/_shared/segments-to-scenes.d.ts.map +0 -1
- package/dist/commands/_shared/segments-to-scenes.js +0 -202
- package/dist/commands/_shared/segments-to-scenes.js.map +0 -1
- package/dist/commands/_shared/segments-to-scenes.test.d.ts +0 -2
- package/dist/commands/_shared/segments-to-scenes.test.d.ts.map +0 -1
- package/dist/commands/_shared/segments-to-scenes.test.js +0 -219
- package/dist/commands/_shared/segments-to-scenes.test.js.map +0 -1
- package/dist/commands/_shared/tts-resolve.d.ts +0 -75
- package/dist/commands/_shared/tts-resolve.d.ts.map +0 -1
- package/dist/commands/_shared/tts-resolve.js +0 -89
- package/dist/commands/_shared/tts-resolve.js.map +0 -1
- package/dist/commands/_shared/tts-resolve.test.d.ts +0 -6
- package/dist/commands/_shared/tts-resolve.test.d.ts.map +0 -1
- package/dist/commands/_shared/tts-resolve.test.js +0 -147
- package/dist/commands/_shared/tts-resolve.test.js.map +0 -1
- package/dist/commands/agent.d.ts +0 -21
- package/dist/commands/agent.d.ts.map +0 -1
- package/dist/commands/agent.js +0 -285
- package/dist/commands/agent.js.map +0 -1
- package/dist/commands/ai-analyze.d.ts +0 -106
- package/dist/commands/ai-analyze.d.ts.map +0 -1
- package/dist/commands/ai-analyze.js +0 -320
- package/dist/commands/ai-analyze.js.map +0 -1
- package/dist/commands/ai-animated-caption.d.ts +0 -64
- package/dist/commands/ai-animated-caption.d.ts.map +0 -1
- package/dist/commands/ai-animated-caption.js +0 -272
- package/dist/commands/ai-animated-caption.js.map +0 -1
- package/dist/commands/ai-audio.d.ts +0 -98
- package/dist/commands/ai-audio.d.ts.map +0 -1
- package/dist/commands/ai-audio.js +0 -1059
- package/dist/commands/ai-audio.js.map +0 -1
- package/dist/commands/ai-broll.d.ts +0 -15
- package/dist/commands/ai-broll.d.ts.map +0 -1
- package/dist/commands/ai-broll.js +0 -421
- package/dist/commands/ai-broll.js.map +0 -1
- package/dist/commands/ai-edit-cli.d.ts +0 -14
- package/dist/commands/ai-edit-cli.d.ts.map +0 -1
- package/dist/commands/ai-edit-cli.js +0 -585
- package/dist/commands/ai-edit-cli.js.map +0 -1
- package/dist/commands/ai-edit.d.ts +0 -398
- package/dist/commands/ai-edit.d.ts.map +0 -1
- package/dist/commands/ai-edit.js +0 -1060
- package/dist/commands/ai-edit.js.map +0 -1
- package/dist/commands/ai-fill-gaps.d.ts +0 -14
- package/dist/commands/ai-fill-gaps.d.ts.map +0 -1
- package/dist/commands/ai-fill-gaps.js +0 -447
- package/dist/commands/ai-fill-gaps.js.map +0 -1
- package/dist/commands/ai-helpers.d.ts +0 -20
- package/dist/commands/ai-helpers.d.ts.map +0 -1
- package/dist/commands/ai-helpers.js +0 -59
- package/dist/commands/ai-helpers.js.map +0 -1
- package/dist/commands/ai-highlights.d.ts +0 -127
- package/dist/commands/ai-highlights.d.ts.map +0 -1
- package/dist/commands/ai-highlights.js +0 -1053
- package/dist/commands/ai-highlights.js.map +0 -1
- package/dist/commands/ai-image.d.ts +0 -76
- package/dist/commands/ai-image.d.ts.map +0 -1
- package/dist/commands/ai-image.js +0 -858
- package/dist/commands/ai-image.js.map +0 -1
- package/dist/commands/ai-motion.d.ts +0 -50
- package/dist/commands/ai-motion.d.ts.map +0 -1
- package/dist/commands/ai-motion.js +0 -297
- package/dist/commands/ai-motion.js.map +0 -1
- package/dist/commands/ai-narrate.d.ts +0 -66
- package/dist/commands/ai-narrate.d.ts.map +0 -1
- package/dist/commands/ai-narrate.js +0 -332
- package/dist/commands/ai-narrate.js.map +0 -1
- package/dist/commands/ai-review.d.ts +0 -57
- package/dist/commands/ai-review.d.ts.map +0 -1
- package/dist/commands/ai-review.js +0 -270
- package/dist/commands/ai-review.js.map +0 -1
- package/dist/commands/ai-script-pipeline-cli.d.ts +0 -9
- package/dist/commands/ai-script-pipeline-cli.d.ts.map +0 -1
- package/dist/commands/ai-script-pipeline-cli.js +0 -502
- package/dist/commands/ai-script-pipeline-cli.js.map +0 -1
- package/dist/commands/ai-script-pipeline.d.ts +0 -305
- package/dist/commands/ai-script-pipeline.d.ts.map +0 -1
- package/dist/commands/ai-script-pipeline.js +0 -1546
- package/dist/commands/ai-script-pipeline.js.map +0 -1
- package/dist/commands/ai-suggest-edit.d.ts +0 -14
- package/dist/commands/ai-suggest-edit.d.ts.map +0 -1
- package/dist/commands/ai-suggest-edit.js +0 -215
- package/dist/commands/ai-suggest-edit.js.map +0 -1
- package/dist/commands/ai-video-fx.d.ts +0 -14
- package/dist/commands/ai-video-fx.d.ts.map +0 -1
- package/dist/commands/ai-video-fx.js +0 -396
- package/dist/commands/ai-video-fx.js.map +0 -1
- package/dist/commands/ai-video.d.ts +0 -91
- package/dist/commands/ai-video.d.ts.map +0 -1
- package/dist/commands/ai-video.js +0 -1055
- package/dist/commands/ai-video.js.map +0 -1
- package/dist/commands/ai-viral.d.ts +0 -15
- package/dist/commands/ai-viral.d.ts.map +0 -1
- package/dist/commands/ai-viral.js +0 -507
- package/dist/commands/ai-viral.js.map +0 -1
- package/dist/commands/ai-visual-fx.d.ts +0 -14
- package/dist/commands/ai-visual-fx.d.ts.map +0 -1
- package/dist/commands/ai-visual-fx.js +0 -521
- package/dist/commands/ai-visual-fx.js.map +0 -1
- package/dist/commands/ai.d.ts +0 -38
- package/dist/commands/ai.d.ts.map +0 -1
- package/dist/commands/ai.js +0 -225
- package/dist/commands/ai.js.map +0 -1
- package/dist/commands/ai.test.d.ts +0 -2
- package/dist/commands/ai.test.d.ts.map +0 -1
- package/dist/commands/ai.test.js +0 -557
- package/dist/commands/ai.test.js.map +0 -1
- package/dist/commands/analyze.d.ts +0 -16
- package/dist/commands/analyze.d.ts.map +0 -1
- package/dist/commands/analyze.js +0 -247
- package/dist/commands/analyze.js.map +0 -1
- package/dist/commands/audio.d.ts +0 -18
- package/dist/commands/audio.d.ts.map +0 -1
- package/dist/commands/audio.js +0 -539
- package/dist/commands/audio.js.map +0 -1
- package/dist/commands/batch.d.ts +0 -3
- package/dist/commands/batch.d.ts.map +0 -1
- package/dist/commands/batch.js +0 -419
- package/dist/commands/batch.js.map +0 -1
- package/dist/commands/batch.test.d.ts +0 -2
- package/dist/commands/batch.test.d.ts.map +0 -1
- package/dist/commands/batch.test.js +0 -203
- package/dist/commands/batch.test.js.map +0 -1
- package/dist/commands/context.d.ts +0 -7
- package/dist/commands/context.d.ts.map +0 -1
- package/dist/commands/context.js +0 -66
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/demo.d.ts +0 -7
- package/dist/commands/demo.d.ts.map +0 -1
- package/dist/commands/demo.js +0 -192
- package/dist/commands/demo.js.map +0 -1
- package/dist/commands/detect.d.ts +0 -56
- package/dist/commands/detect.d.ts.map +0 -1
- package/dist/commands/detect.js +0 -464
- package/dist/commands/detect.js.map +0 -1
- package/dist/commands/doctor.d.ts +0 -6
- package/dist/commands/doctor.d.ts.map +0 -1
- package/dist/commands/doctor.js +0 -322
- package/dist/commands/doctor.js.map +0 -1
- package/dist/commands/edit-cmd.d.ts +0 -112
- package/dist/commands/edit-cmd.d.ts.map +0 -1
- package/dist/commands/edit-cmd.js +0 -1041
- package/dist/commands/edit-cmd.js.map +0 -1
- package/dist/commands/export.d.ts +0 -61
- package/dist/commands/export.d.ts.map +0 -1
- package/dist/commands/export.js +0 -980
- package/dist/commands/export.js.map +0 -1
- package/dist/commands/export.test.d.ts +0 -2
- package/dist/commands/export.test.d.ts.map +0 -1
- package/dist/commands/export.test.js +0 -107
- package/dist/commands/export.test.js.map +0 -1
- package/dist/commands/generate.d.ts +0 -84
- package/dist/commands/generate.d.ts.map +0 -1
- package/dist/commands/generate.js +0 -2030
- package/dist/commands/generate.js.map +0 -1
- package/dist/commands/media.d.ts +0 -3
- package/dist/commands/media.d.ts.map +0 -1
- package/dist/commands/media.js +0 -163
- package/dist/commands/media.js.map +0 -1
- package/dist/commands/output.d.ts +0 -51
- package/dist/commands/output.d.ts.map +0 -1
- package/dist/commands/output.js +0 -219
- package/dist/commands/output.js.map +0 -1
- package/dist/commands/output.test.d.ts +0 -2
- package/dist/commands/output.test.d.ts.map +0 -1
- package/dist/commands/output.test.js +0 -151
- package/dist/commands/output.test.js.map +0 -1
- package/dist/commands/pipeline.d.ts +0 -19
- package/dist/commands/pipeline.d.ts.map +0 -1
- package/dist/commands/pipeline.js +0 -345
- package/dist/commands/pipeline.js.map +0 -1
- package/dist/commands/project.d.ts +0 -3
- package/dist/commands/project.d.ts.map +0 -1
- package/dist/commands/project.js +0 -181
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/project.test.d.ts +0 -2
- package/dist/commands/project.test.d.ts.map +0 -1
- package/dist/commands/project.test.js +0 -105
- package/dist/commands/project.test.js.map +0 -1
- package/dist/commands/run.d.ts +0 -15
- package/dist/commands/run.d.ts.map +0 -1
- package/dist/commands/run.js +0 -204
- package/dist/commands/run.js.map +0 -1
- package/dist/commands/sanitize.d.ts +0 -21
- package/dist/commands/sanitize.d.ts.map +0 -1
- package/dist/commands/sanitize.js +0 -56
- package/dist/commands/sanitize.js.map +0 -1
- package/dist/commands/scene.d.ts +0 -86
- package/dist/commands/scene.d.ts.map +0 -1
- package/dist/commands/scene.js +0 -728
- package/dist/commands/scene.js.map +0 -1
- package/dist/commands/scene.test.d.ts +0 -2
- package/dist/commands/scene.test.d.ts.map +0 -1
- package/dist/commands/scene.test.js +0 -219
- package/dist/commands/scene.test.js.map +0 -1
- package/dist/commands/schema.d.ts +0 -13
- package/dist/commands/schema.d.ts.map +0 -1
- package/dist/commands/schema.js +0 -218
- package/dist/commands/schema.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -6
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -461
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/timeline.d.ts +0 -3
- package/dist/commands/timeline.d.ts.map +0 -1
- package/dist/commands/timeline.js +0 -609
- package/dist/commands/timeline.js.map +0 -1
- package/dist/commands/timeline.test.d.ts +0 -2
- package/dist/commands/timeline.test.d.ts.map +0 -1
- package/dist/commands/timeline.test.js +0 -334
- package/dist/commands/timeline.test.js.map +0 -1
- package/dist/commands/validate.d.ts +0 -34
- package/dist/commands/validate.d.ts.map +0 -1
- package/dist/commands/validate.js +0 -70
- package/dist/commands/validate.js.map +0 -1
- package/dist/config/config.test.d.ts +0 -2
- package/dist/config/config.test.d.ts.map +0 -1
- package/dist/config/config.test.js +0 -164
- package/dist/config/config.test.js.map +0 -1
- package/dist/config/index.d.ts +0 -35
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -101
- package/dist/config/index.js.map +0 -1
- package/dist/config/schema.d.ts +0 -52
- package/dist/config/schema.d.ts.map +0 -1
- package/dist/config/schema.js +0 -44
- package/dist/config/schema.js.map +0 -1
- package/dist/engine/index.d.ts +0 -3
- package/dist/engine/index.d.ts.map +0 -1
- package/dist/engine/index.js +0 -2
- package/dist/engine/index.js.map +0 -1
- package/dist/engine/project.d.ts +0 -84
- package/dist/engine/project.d.ts.map +0 -1
- package/dist/engine/project.js +0 -355
- package/dist/engine/project.js.map +0 -1
- package/dist/engine/project.test.d.ts +0 -2
- package/dist/engine/project.test.d.ts.map +0 -1
- package/dist/engine/project.test.js +0 -599
- package/dist/engine/project.test.js.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/pipeline/executor.d.ts +0 -19
- package/dist/pipeline/executor.d.ts.map +0 -1
- package/dist/pipeline/executor.js +0 -397
- package/dist/pipeline/executor.js.map +0 -1
- package/dist/pipeline/index.d.ts +0 -4
- package/dist/pipeline/index.d.ts.map +0 -1
- package/dist/pipeline/index.js +0 -2
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/renderers/__tests__/html-template.test.d.ts +0 -2
- package/dist/pipeline/renderers/__tests__/html-template.test.d.ts.map +0 -1
- package/dist/pipeline/renderers/__tests__/html-template.test.js +0 -170
- package/dist/pipeline/renderers/__tests__/html-template.test.js.map +0 -1
- package/dist/pipeline/renderers/__tests__/integration.test.d.ts +0 -2
- package/dist/pipeline/renderers/__tests__/integration.test.d.ts.map +0 -1
- package/dist/pipeline/renderers/__tests__/integration.test.js +0 -175
- package/dist/pipeline/renderers/__tests__/integration.test.js.map +0 -1
- package/dist/pipeline/renderers/chrome.d.ts +0 -26
- package/dist/pipeline/renderers/chrome.d.ts.map +0 -1
- package/dist/pipeline/renderers/chrome.js +0 -48
- package/dist/pipeline/renderers/chrome.js.map +0 -1
- package/dist/pipeline/renderers/html-clips.d.ts +0 -20
- package/dist/pipeline/renderers/html-clips.d.ts.map +0 -1
- package/dist/pipeline/renderers/html-clips.js +0 -50
- package/dist/pipeline/renderers/html-clips.js.map +0 -1
- package/dist/pipeline/renderers/html-runtime.d.ts +0 -7
- package/dist/pipeline/renderers/html-runtime.d.ts.map +0 -1
- package/dist/pipeline/renderers/html-runtime.js +0 -80
- package/dist/pipeline/renderers/html-runtime.js.map +0 -1
- package/dist/pipeline/renderers/html-template.d.ts +0 -3
- package/dist/pipeline/renderers/html-template.d.ts.map +0 -1
- package/dist/pipeline/renderers/html-template.js +0 -36
- package/dist/pipeline/renderers/html-template.js.map +0 -1
- package/dist/pipeline/renderers/hyperframes.d.ts +0 -8
- package/dist/pipeline/renderers/hyperframes.d.ts.map +0 -1
- package/dist/pipeline/renderers/hyperframes.js +0 -63
- package/dist/pipeline/renderers/hyperframes.js.map +0 -1
- package/dist/pipeline/renderers/project-builder.d.ts +0 -8
- package/dist/pipeline/renderers/project-builder.d.ts.map +0 -1
- package/dist/pipeline/renderers/project-builder.js +0 -65
- package/dist/pipeline/renderers/project-builder.js.map +0 -1
- package/dist/pipeline/renderers/types.d.ts +0 -41
- package/dist/pipeline/renderers/types.d.ts.map +0 -1
- package/dist/pipeline/renderers/types.js +0 -11
- package/dist/pipeline/renderers/types.js.map +0 -1
- package/dist/pipeline/resolver.d.ts +0 -20
- package/dist/pipeline/resolver.d.ts.map +0 -1
- package/dist/pipeline/resolver.js +0 -74
- package/dist/pipeline/resolver.js.map +0 -1
- package/dist/pipeline/types.d.ts +0 -82
- package/dist/pipeline/types.d.ts.map +0 -1
- package/dist/pipeline/types.js +0 -8
- package/dist/pipeline/types.js.map +0 -1
- package/dist/utils/api-key.d.ts +0 -33
- package/dist/utils/api-key.d.ts.map +0 -1
- package/dist/utils/api-key.js +0 -228
- package/dist/utils/api-key.js.map +0 -1
- package/dist/utils/api-key.test.d.ts +0 -2
- package/dist/utils/api-key.test.d.ts.map +0 -1
- package/dist/utils/api-key.test.js +0 -35
- package/dist/utils/api-key.test.js.map +0 -1
- package/dist/utils/audio.d.ts +0 -23
- package/dist/utils/audio.d.ts.map +0 -1
- package/dist/utils/audio.js +0 -79
- package/dist/utils/audio.js.map +0 -1
- package/dist/utils/exec-safe.d.ts +0 -22
- package/dist/utils/exec-safe.d.ts.map +0 -1
- package/dist/utils/exec-safe.js +0 -62
- package/dist/utils/exec-safe.js.map +0 -1
- package/dist/utils/first-run.d.ts +0 -17
- package/dist/utils/first-run.d.ts.map +0 -1
- package/dist/utils/first-run.js +0 -73
- package/dist/utils/first-run.js.map +0 -1
- package/dist/utils/input-validation.d.ts +0 -27
- package/dist/utils/input-validation.d.ts.map +0 -1
- package/dist/utils/input-validation.js +0 -67
- package/dist/utils/input-validation.js.map +0 -1
- package/dist/utils/provider-resolver.d.ts +0 -19
- package/dist/utils/provider-resolver.d.ts.map +0 -1
- package/dist/utils/provider-resolver.js +0 -75
- package/dist/utils/provider-resolver.js.map +0 -1
- package/dist/utils/remotion.d.ts +0 -231
- package/dist/utils/remotion.d.ts.map +0 -1
- package/dist/utils/remotion.js +0 -879
- package/dist/utils/remotion.js.map +0 -1
- package/dist/utils/subtitle.d.ts +0 -65
- package/dist/utils/subtitle.d.ts.map +0 -1
- package/dist/utils/subtitle.js +0 -135
- package/dist/utils/subtitle.js.map +0 -1
- package/dist/utils/subtitle.test.d.ts +0 -2
- package/dist/utils/subtitle.test.d.ts.map +0 -1
- package/dist/utils/subtitle.test.js +0 -175
- package/dist/utils/subtitle.test.js.map +0 -1
- package/dist/utils/tty.d.ts +0 -45
- package/dist/utils/tty.d.ts.map +0 -1
- package/dist/utils/tty.js +0 -231
- package/dist/utils/tty.js.map +0 -1
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module _shared/scene-audio-scan
|
|
3
|
-
*
|
|
4
|
-
* Reads a scene project's root + sub-composition HTML and returns a flat list
|
|
5
|
-
* of audio elements with **absolute** timeline positions. Used by `executeSceneRender`
|
|
6
|
-
* to mux narration / background-audio tracks into the producer's silent video
|
|
7
|
-
* output via ffmpeg.
|
|
8
|
-
*
|
|
9
|
-
* Why a post-render scanner: at time of writing, `@hyperframes/producer`
|
|
10
|
-
* renders frames + assembles the MP4 but does not embed audio from
|
|
11
|
-
* `<audio>` elements that live inside sub-compositions. We pick up the slack
|
|
12
|
-
* here without touching the producer.
|
|
13
|
-
*
|
|
14
|
-
* Pure module — no I/O beyond the explicit `loadCompositionHtml` reader the
|
|
15
|
-
* orchestrator passes in. Easy to unit-test with fixture strings.
|
|
16
|
-
*/
|
|
17
|
-
import { readFile } from "node:fs/promises";
|
|
18
|
-
import { resolve } from "node:path";
|
|
19
|
-
/**
|
|
20
|
-
* Walk the root HTML for clip references. Returns one entry per
|
|
21
|
-
* `<div class="clip">` with the four attributes we care about. Pure: a
|
|
22
|
-
* regex-based scan, not a full DOM parser. The root file is generated by
|
|
23
|
-
* VibeFrame so the markup is predictable; if a user hand-edits it into
|
|
24
|
-
* something unparseable, the scanner simply finds fewer clips.
|
|
25
|
-
*/
|
|
26
|
-
export function parseRootClips(rootHtml) {
|
|
27
|
-
const clips = [];
|
|
28
|
-
// Anchor on `class="clip"` and pull every relevant data attribute that
|
|
29
|
-
// appears in the same opening tag. Attribute order is not assumed.
|
|
30
|
-
const clipRegex = /<div\b[^>]*class="clip"[^>]*>/gi;
|
|
31
|
-
let match;
|
|
32
|
-
while ((match = clipRegex.exec(rootHtml)) !== null) {
|
|
33
|
-
const tag = match[0];
|
|
34
|
-
const compositionId = pickAttr(tag, "data-composition-id");
|
|
35
|
-
const compositionSrc = pickAttr(tag, "data-composition-src");
|
|
36
|
-
const start = pickNumberAttr(tag, "data-start");
|
|
37
|
-
const duration = pickNumberAttr(tag, "data-duration");
|
|
38
|
-
const trackIndex = pickNumberAttr(tag, "data-track-index") ?? 1;
|
|
39
|
-
if (!compositionId || !compositionSrc || start === null || duration === null) {
|
|
40
|
-
continue;
|
|
41
|
-
}
|
|
42
|
-
clips.push({ compositionId, compositionSrc, start, duration, trackIndex });
|
|
43
|
-
}
|
|
44
|
-
return clips;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Walk a single composition's HTML for `<audio>` elements. Returns one entry
|
|
48
|
-
* per element with attributes resolved into our shape. Composition-local —
|
|
49
|
-
* caller adds the parent clip's start to compute absolute timing.
|
|
50
|
-
*/
|
|
51
|
-
export function parseSceneAudios(compositionHtml) {
|
|
52
|
-
const out = [];
|
|
53
|
-
// `<audio>` opens may span multiple lines in our emitted HTML; capture the
|
|
54
|
-
// full open tag (everything up to `>`).
|
|
55
|
-
const audioRegex = /<audio\b([^>]*)>/gi;
|
|
56
|
-
let match;
|
|
57
|
-
while ((match = audioRegex.exec(compositionHtml)) !== null) {
|
|
58
|
-
const attrs = match[1];
|
|
59
|
-
const src = pickAttr(attrs, "src");
|
|
60
|
-
if (!src)
|
|
61
|
-
continue;
|
|
62
|
-
const localStart = pickNumberAttr(attrs, "data-start") ?? 0;
|
|
63
|
-
const durationRaw = pickAttr(attrs, "data-duration");
|
|
64
|
-
const durationHint = !durationRaw || durationRaw === "auto"
|
|
65
|
-
? "auto"
|
|
66
|
-
: Number(durationRaw);
|
|
67
|
-
const volume = pickNumberAttr(attrs, "data-volume") ?? 1;
|
|
68
|
-
const trackIndex = pickNumberAttr(attrs, "data-track-index") ?? 2;
|
|
69
|
-
out.push({ srcRel: src, localStart, durationHint, volume, trackIndex });
|
|
70
|
-
}
|
|
71
|
-
return out;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Default reader: read the composition file from disk relative to the
|
|
75
|
-
* project directory. Returns `null` for missing files so the scanner can
|
|
76
|
-
* skip them and continue.
|
|
77
|
-
*/
|
|
78
|
-
export function makeFsCompositionReader(projectDir) {
|
|
79
|
-
return async (compositionSrcRel) => {
|
|
80
|
-
const abs = resolve(projectDir, compositionSrcRel);
|
|
81
|
-
try {
|
|
82
|
-
return await readFile(abs, "utf-8");
|
|
83
|
-
}
|
|
84
|
-
catch {
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* Top-level scan. Parses every clip in the root, loads each composition,
|
|
91
|
-
* pulls every audio element, and resolves absolute timeline positions.
|
|
92
|
-
*
|
|
93
|
-
* Audio absolute start = clip.start + audio.localStart. The `clipDurationCap`
|
|
94
|
-
* is filled in from the clip's own duration so the mux pass can trim audio
|
|
95
|
-
* that runs past the visual end of its parent scene.
|
|
96
|
-
*/
|
|
97
|
-
export async function scanSceneAudio(opts) {
|
|
98
|
-
const reader = opts.readComposition ?? makeFsCompositionReader(opts.projectDir);
|
|
99
|
-
const clips = parseRootClips(opts.rootHtml);
|
|
100
|
-
const out = [];
|
|
101
|
-
for (const clip of clips) {
|
|
102
|
-
const html = await reader(clip.compositionSrc);
|
|
103
|
-
if (!html)
|
|
104
|
-
continue;
|
|
105
|
-
const audios = parseSceneAudios(html);
|
|
106
|
-
for (const audio of audios) {
|
|
107
|
-
out.push({
|
|
108
|
-
srcRel: audio.srcRel,
|
|
109
|
-
srcAbs: resolve(opts.projectDir, audio.srcRel),
|
|
110
|
-
absoluteStart: clip.start + audio.localStart,
|
|
111
|
-
durationHint: audio.durationHint,
|
|
112
|
-
clipDurationCap: clip.duration - audio.localStart,
|
|
113
|
-
volume: audio.volume,
|
|
114
|
-
trackIndex: audio.trackIndex,
|
|
115
|
-
compositionSrc: clip.compositionSrc,
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
// Stable sort by absolute start so downstream filter graphs are deterministic.
|
|
120
|
-
out.sort((a, b) => a.absoluteStart - b.absoluteStart);
|
|
121
|
-
return out;
|
|
122
|
-
}
|
|
123
|
-
// ---------------------------------------------------------------------------
|
|
124
|
-
// Helpers
|
|
125
|
-
// ---------------------------------------------------------------------------
|
|
126
|
-
function pickAttr(tag, name) {
|
|
127
|
-
// Allow either single or double quotes; tolerate whitespace around `=`.
|
|
128
|
-
const re = new RegExp(`\\b${escapeRegex(name)}\\s*=\\s*("([^"]*)"|'([^']*)')`);
|
|
129
|
-
const m = tag.match(re);
|
|
130
|
-
if (!m)
|
|
131
|
-
return null;
|
|
132
|
-
return m[2] ?? m[3] ?? null;
|
|
133
|
-
}
|
|
134
|
-
function pickNumberAttr(tag, name) {
|
|
135
|
-
const raw = pickAttr(tag, name);
|
|
136
|
-
if (raw === null)
|
|
137
|
-
return null;
|
|
138
|
-
const n = Number(raw);
|
|
139
|
-
return Number.isFinite(n) ? n : null;
|
|
140
|
-
}
|
|
141
|
-
function escapeRegex(s) {
|
|
142
|
-
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
143
|
-
}
|
|
144
|
-
//# sourceMappingURL=scene-audio-scan.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scene-audio-scan.js","sourceRoot":"","sources":["../../../src/commands/_shared/scene-audio-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scene-audio-scan.test.d.ts","sourceRoot":"","sources":["../../../src/commands/_shared/scene-audio-scan.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for scene-audio-scan. Pure parsing — no fs touches via the
|
|
3
|
-
* injected `readComposition` reader.
|
|
4
|
-
*/
|
|
5
|
-
import { describe, expect, it } from "vitest";
|
|
6
|
-
import { parseRootClips, parseSceneAudios, scanSceneAudio, } from "./scene-audio-scan.js";
|
|
7
|
-
describe("parseRootClips", () => {
|
|
8
|
-
it("returns one entry per <div class=\"clip\"> with all four attrs", () => {
|
|
9
|
-
const html = `
|
|
10
|
-
<div id="root" data-composition-id="main" data-start="0" data-duration="10">
|
|
11
|
-
<div class="clip" data-composition-id="intro" data-composition-src="compositions/scene-intro.html" data-start="0" data-duration="3" data-track-index="1"></div>
|
|
12
|
-
<div class="clip" data-composition-id="outro" data-composition-src="compositions/scene-outro.html" data-start="3" data-duration="4" data-track-index="1"></div>
|
|
13
|
-
</div>`;
|
|
14
|
-
const clips = parseRootClips(html);
|
|
15
|
-
expect(clips).toEqual([
|
|
16
|
-
{
|
|
17
|
-
compositionId: "intro",
|
|
18
|
-
compositionSrc: "compositions/scene-intro.html",
|
|
19
|
-
start: 0,
|
|
20
|
-
duration: 3,
|
|
21
|
-
trackIndex: 1,
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
compositionId: "outro",
|
|
25
|
-
compositionSrc: "compositions/scene-outro.html",
|
|
26
|
-
start: 3,
|
|
27
|
-
duration: 4,
|
|
28
|
-
trackIndex: 1,
|
|
29
|
-
},
|
|
30
|
-
]);
|
|
31
|
-
});
|
|
32
|
-
it("ignores divs without class=\"clip\"", () => {
|
|
33
|
-
const html = `<div class="backdrop" data-composition-id="x" data-start="0" data-duration="1"></div>`;
|
|
34
|
-
expect(parseRootClips(html)).toEqual([]);
|
|
35
|
-
});
|
|
36
|
-
it("skips clips missing required attributes", () => {
|
|
37
|
-
const html = `<div class="clip" data-start="0" data-duration="3"></div>`; // no composition-id/src
|
|
38
|
-
expect(parseRootClips(html)).toEqual([]);
|
|
39
|
-
});
|
|
40
|
-
it("defaults trackIndex to 1 when absent", () => {
|
|
41
|
-
const html = `<div class="clip" data-composition-id="x" data-composition-src="x.html" data-start="0" data-duration="2"></div>`;
|
|
42
|
-
expect(parseRootClips(html)[0].trackIndex).toBe(1);
|
|
43
|
-
});
|
|
44
|
-
it("tolerates attribute order and whitespace", () => {
|
|
45
|
-
const html = `<div data-start="2" class="clip"
|
|
46
|
-
data-duration="5"
|
|
47
|
-
data-composition-id="mid"
|
|
48
|
-
data-composition-src="compositions/mid.html"></div>`;
|
|
49
|
-
expect(parseRootClips(html)).toHaveLength(1);
|
|
50
|
-
expect(parseRootClips(html)[0]).toMatchObject({
|
|
51
|
-
compositionId: "mid",
|
|
52
|
-
start: 2,
|
|
53
|
-
duration: 5,
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
describe("parseSceneAudios", () => {
|
|
58
|
-
it("extracts narration audio with all attributes", () => {
|
|
59
|
-
const html = `
|
|
60
|
-
<template id="scene-intro-template">
|
|
61
|
-
<div data-composition-id="intro" data-start="0" data-duration="5">
|
|
62
|
-
<audio
|
|
63
|
-
id="narration"
|
|
64
|
-
data-start="0"
|
|
65
|
-
data-duration="auto"
|
|
66
|
-
data-track-index="2"
|
|
67
|
-
src="assets/narration-intro.wav"
|
|
68
|
-
data-volume="1"
|
|
69
|
-
></audio>
|
|
70
|
-
</div>
|
|
71
|
-
</template>`;
|
|
72
|
-
const audios = parseSceneAudios(html);
|
|
73
|
-
expect(audios).toEqual([
|
|
74
|
-
{
|
|
75
|
-
srcRel: "assets/narration-intro.wav",
|
|
76
|
-
localStart: 0,
|
|
77
|
-
durationHint: "auto",
|
|
78
|
-
volume: 1,
|
|
79
|
-
trackIndex: 2,
|
|
80
|
-
},
|
|
81
|
-
]);
|
|
82
|
-
});
|
|
83
|
-
it("treats numeric data-duration as a hard duration", () => {
|
|
84
|
-
const html = `<audio src="x.mp3" data-start="1.5" data-duration="3.2" data-volume="0.6"></audio>`;
|
|
85
|
-
expect(parseSceneAudios(html)[0]).toMatchObject({
|
|
86
|
-
localStart: 1.5,
|
|
87
|
-
durationHint: 3.2,
|
|
88
|
-
volume: 0.6,
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
it("defaults volume to 1 and trackIndex to 2 when absent", () => {
|
|
92
|
-
const html = `<audio src="x.wav" data-start="0"></audio>`;
|
|
93
|
-
const audios = parseSceneAudios(html);
|
|
94
|
-
expect(audios[0]).toMatchObject({ volume: 1, trackIndex: 2, durationHint: "auto" });
|
|
95
|
-
});
|
|
96
|
-
it("ignores audio without src", () => {
|
|
97
|
-
const html = `<audio data-start="0" data-duration="auto"></audio>`;
|
|
98
|
-
expect(parseSceneAudios(html)).toEqual([]);
|
|
99
|
-
});
|
|
100
|
-
it("supports multiple audios in one composition (narration + music)", () => {
|
|
101
|
-
const html = `
|
|
102
|
-
<audio src="assets/narration-1.wav" data-start="0" data-duration="auto" data-track-index="2"></audio>
|
|
103
|
-
<audio src="assets/music.mp3" data-start="0" data-duration="auto" data-track-index="3" data-volume="0.4"></audio>`;
|
|
104
|
-
const audios = parseSceneAudios(html);
|
|
105
|
-
expect(audios).toHaveLength(2);
|
|
106
|
-
expect(audios[0].trackIndex).toBe(2);
|
|
107
|
-
expect(audios[1]).toMatchObject({ trackIndex: 3, volume: 0.4 });
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
describe("scanSceneAudio (top-level)", () => {
|
|
111
|
-
const rootHtml = `
|
|
112
|
-
<div id="root">
|
|
113
|
-
<div class="clip" data-composition-id="intro" data-composition-src="compositions/scene-intro.html" data-start="0" data-duration="3" data-track-index="1"></div>
|
|
114
|
-
<div class="clip" data-composition-id="outro" data-composition-src="compositions/scene-outro.html" data-start="3" data-duration="4" data-track-index="1"></div>
|
|
115
|
-
</div>`;
|
|
116
|
-
const introHtml = `
|
|
117
|
-
<audio src="assets/narration-intro.wav" data-start="0" data-duration="auto" data-track-index="2"></audio>`;
|
|
118
|
-
const outroHtml = `
|
|
119
|
-
<audio src="assets/narration-outro.wav" data-start="0.5" data-duration="auto" data-track-index="2" data-volume="0.8"></audio>`;
|
|
120
|
-
const reader = async (path) => {
|
|
121
|
-
if (path === "compositions/scene-intro.html")
|
|
122
|
-
return introHtml;
|
|
123
|
-
if (path === "compositions/scene-outro.html")
|
|
124
|
-
return outroHtml;
|
|
125
|
-
return null;
|
|
126
|
-
};
|
|
127
|
-
it("walks every clip and resolves absolute timing", async () => {
|
|
128
|
-
const result = await scanSceneAudio({
|
|
129
|
-
projectDir: "/tmp/proj",
|
|
130
|
-
rootHtml,
|
|
131
|
-
readComposition: reader,
|
|
132
|
-
});
|
|
133
|
-
expect(result).toEqual([
|
|
134
|
-
{
|
|
135
|
-
srcRel: "assets/narration-intro.wav",
|
|
136
|
-
srcAbs: "/tmp/proj/assets/narration-intro.wav",
|
|
137
|
-
absoluteStart: 0,
|
|
138
|
-
durationHint: "auto",
|
|
139
|
-
clipDurationCap: 3,
|
|
140
|
-
volume: 1,
|
|
141
|
-
trackIndex: 2,
|
|
142
|
-
compositionSrc: "compositions/scene-intro.html",
|
|
143
|
-
},
|
|
144
|
-
{
|
|
145
|
-
srcRel: "assets/narration-outro.wav",
|
|
146
|
-
srcAbs: "/tmp/proj/assets/narration-outro.wav",
|
|
147
|
-
absoluteStart: 3.5,
|
|
148
|
-
durationHint: "auto",
|
|
149
|
-
clipDurationCap: 3.5, // 4 - 0.5 (audio.localStart)
|
|
150
|
-
volume: 0.8,
|
|
151
|
-
trackIndex: 2,
|
|
152
|
-
compositionSrc: "compositions/scene-outro.html",
|
|
153
|
-
},
|
|
154
|
-
]);
|
|
155
|
-
});
|
|
156
|
-
it("skips clips whose composition file is missing", async () => {
|
|
157
|
-
const sparseReader = async (p) => p === "compositions/scene-intro.html" ? introHtml : null;
|
|
158
|
-
const result = await scanSceneAudio({
|
|
159
|
-
projectDir: "/tmp/proj",
|
|
160
|
-
rootHtml,
|
|
161
|
-
readComposition: sparseReader,
|
|
162
|
-
});
|
|
163
|
-
expect(result).toHaveLength(1);
|
|
164
|
-
expect(result[0].srcRel).toBe("assets/narration-intro.wav");
|
|
165
|
-
});
|
|
166
|
-
it("skips clips with no <audio> elements", async () => {
|
|
167
|
-
const silentReader = async () => `<div data-composition-id="x"></div>`;
|
|
168
|
-
const result = await scanSceneAudio({
|
|
169
|
-
projectDir: "/tmp/proj",
|
|
170
|
-
rootHtml,
|
|
171
|
-
readComposition: silentReader,
|
|
172
|
-
});
|
|
173
|
-
expect(result).toEqual([]);
|
|
174
|
-
});
|
|
175
|
-
it("returns audios sorted by absolute start", async () => {
|
|
176
|
-
const reorderedRoot = `
|
|
177
|
-
<div class="clip" data-composition-id="b" data-composition-src="b.html" data-start="5" data-duration="2"></div>
|
|
178
|
-
<div class="clip" data-composition-id="a" data-composition-src="a.html" data-start="0" data-duration="3"></div>`;
|
|
179
|
-
const r = async (p) => p === "a.html" || p === "b.html"
|
|
180
|
-
? `<audio src="x.wav" data-start="0"></audio>`
|
|
181
|
-
: null;
|
|
182
|
-
const result = await scanSceneAudio({
|
|
183
|
-
projectDir: "/p",
|
|
184
|
-
rootHtml: reorderedRoot,
|
|
185
|
-
readComposition: r,
|
|
186
|
-
});
|
|
187
|
-
expect(result.map((r) => r.absoluteStart)).toEqual([0, 5]);
|
|
188
|
-
});
|
|
189
|
-
});
|
|
190
|
-
//# sourceMappingURL=scene-audio-scan.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scene-audio-scan.test.js","sourceRoot":"","sources":["../../../src/commands/_shared/scene-audio-scan.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module _shared/scene-html-emit
|
|
3
|
-
*
|
|
4
|
-
* Pure HTML emitters for `vibe scene add`. Each preset produces a self-contained
|
|
5
|
-
* Hyperframes-compatible scene composition: a `<template>`-wrapped `<div
|
|
6
|
-
* data-composition-id>` with scoped CSS, optional audio/image, and a paused
|
|
7
|
-
* GSAP timeline registered on `window.__timelines`.
|
|
8
|
-
*
|
|
9
|
-
* Also exposes helpers that mutate the root index.html:
|
|
10
|
-
* - `nextSceneStart()` — sum existing clip end-times to choose the new start
|
|
11
|
-
* - `insertClipIntoRoot()` — splice a `<div class="clip">` reference before the
|
|
12
|
-
* root's closing div, preserving the user's hand-edited markup
|
|
13
|
-
* - `slugifySceneName()` — name → kebab-case scene id
|
|
14
|
-
*
|
|
15
|
-
* Pure functions only — no I/O. The orchestrating command (`scene add`) wires
|
|
16
|
-
* these to the filesystem.
|
|
17
|
-
*/
|
|
18
|
-
export type ScenePreset = "simple" | "announcement" | "explainer" | "kinetic-type" | "product-shot";
|
|
19
|
-
export declare const SCENE_PRESETS: readonly ScenePreset[];
|
|
20
|
-
/**
|
|
21
|
-
* One word from a Whisper word-level transcript. Mirrors
|
|
22
|
-
* {@link import("@vibeframe/ai-providers").TranscriptWord} but is duplicated
|
|
23
|
-
* here so this module stays pure (no provider package import).
|
|
24
|
-
*/
|
|
25
|
-
export interface SceneTranscriptWord {
|
|
26
|
-
text: string;
|
|
27
|
-
start: number;
|
|
28
|
-
end: number;
|
|
29
|
-
}
|
|
30
|
-
export interface EmitSceneInput {
|
|
31
|
-
/** Kebab-case scene id; appears in `data-composition-id` and template id. */
|
|
32
|
-
id: string;
|
|
33
|
-
preset: ScenePreset;
|
|
34
|
-
/** Canvas width in px (must match the root composition). */
|
|
35
|
-
width: number;
|
|
36
|
-
/** Canvas height in px (must match the root composition). */
|
|
37
|
-
height: number;
|
|
38
|
-
/** Visible composition duration in seconds. */
|
|
39
|
-
duration: number;
|
|
40
|
-
/** Headline text — required for non-simple presets; defaulted from id. */
|
|
41
|
-
headline?: string;
|
|
42
|
-
/** Secondary text (subhead/caption). Often the narration. */
|
|
43
|
-
subhead?: string;
|
|
44
|
-
/** Optional small label above the headline (explainer / product-shot). */
|
|
45
|
-
kicker?: string;
|
|
46
|
-
/** Project-relative image path (e.g. "assets/scene-intro.png"). */
|
|
47
|
-
imagePath?: string;
|
|
48
|
-
/** Project-relative narration audio path (e.g. "assets/narration-intro.mp3"). */
|
|
49
|
-
audioPath?: string;
|
|
50
|
-
/**
|
|
51
|
-
* Word-level timings (Whisper output) for narration sync. When supplied, the
|
|
52
|
-
* `simple`, `explainer`, and `kinetic-type` presets render each word as its
|
|
53
|
-
* own `<span class="word">` and animate them at their absolute audio start
|
|
54
|
-
* times via GSAP. `announcement` and `product-shot` ignore this field —
|
|
55
|
-
* their headlines are intentionally static.
|
|
56
|
-
*/
|
|
57
|
-
transcript?: SceneTranscriptWord[];
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Slugify a free-form scene name to a kebab-case id usable in HTML attributes
|
|
61
|
-
* and filenames. Strips diacritics, collapses whitespace, lowercases.
|
|
62
|
-
*/
|
|
63
|
-
export declare function slugifySceneName(name: string): string;
|
|
64
|
-
/**
|
|
65
|
-
* Render a transcript as `<span class="word" data-i="N">…</span>` markup,
|
|
66
|
-
* separated by literal whitespace so kerning and wrapping behave naturally.
|
|
67
|
-
* Returns the empty string when there's nothing to render.
|
|
68
|
-
*/
|
|
69
|
-
export declare function renderTranscriptSpans(transcript: SceneTranscriptWord[]): string;
|
|
70
|
-
/**
|
|
71
|
-
* Build absolute-timing GSAP tweens that fade each transcript word in at its
|
|
72
|
-
* narration `start` time. The `targetSelector` parametrises the scope so the
|
|
73
|
-
* same routine can drive `simple` (`.caption .word`), `explainer`
|
|
74
|
-
* (`#subtitle .word`), or `kinetic-type` (`.kinetic .word`).
|
|
75
|
-
*
|
|
76
|
-
* Each tween is `tl.fromTo(sel, {opacity:0,y:10}, {opacity:1,y:0,duration:0.18}, start)`
|
|
77
|
-
* — short enough to feel responsive at any speech rate, long enough to avoid
|
|
78
|
-
* popping at 30fps. Words clamp to non-negative starts.
|
|
79
|
-
*/
|
|
80
|
-
export declare function buildTranscriptTweens(transcript: SceneTranscriptWord[], targetSelector: string): string;
|
|
81
|
-
/**
|
|
82
|
-
* Emit the full per-scene HTML. Returns a complete `<template>`-wrapped
|
|
83
|
-
* composition ready to write to `compositions/scene-<id>.html`.
|
|
84
|
-
*/
|
|
85
|
-
export declare function emitSceneHtml(input: EmitSceneInput): string;
|
|
86
|
-
/**
|
|
87
|
-
* Sum existing `<div class="clip">` end-times to find where the next scene
|
|
88
|
-
* should start. Returns 0 for an empty root.
|
|
89
|
-
*/
|
|
90
|
-
export declare function nextSceneStart(rootHtml: string): number;
|
|
91
|
-
export interface ClipReferenceInput {
|
|
92
|
-
/** Scene id — used to derive the composition src path. */
|
|
93
|
-
id: string;
|
|
94
|
-
start: number;
|
|
95
|
-
duration: number;
|
|
96
|
-
trackIndex?: number;
|
|
97
|
-
/** Override the default `compositions/scene-<id>.html` src. */
|
|
98
|
-
src?: string;
|
|
99
|
-
}
|
|
100
|
-
/** Build the `<div class="clip" data-composition-id=... data-composition-src=...>` reference string. */
|
|
101
|
-
export declare function buildClipReference(opts: ClipReferenceInput): string;
|
|
102
|
-
/**
|
|
103
|
-
* Insert a clip reference inside the root composition's `#root` div, just
|
|
104
|
-
* before its closing `</div>`. Throws if the expected closing tag isn't
|
|
105
|
-
* found — callers should surface this as a structured error so users know
|
|
106
|
-
* to inspect a hand-edited root.
|
|
107
|
-
*
|
|
108
|
-
* Also grows the root's `data-duration` to fit the new clip's end-time.
|
|
109
|
-
*/
|
|
110
|
-
export declare function insertClipIntoRoot(rootHtml: string, clip: ClipReferenceInput): string;
|
|
111
|
-
/**
|
|
112
|
-
* Read the root composition's canvas dims by parsing `data-width`/`data-height`
|
|
113
|
-
* on the `#root` div. Returns null if either is missing — caller should fall
|
|
114
|
-
* back to the project's aspect config.
|
|
115
|
-
*/
|
|
116
|
-
export declare function readRootDims(rootHtml: string): {
|
|
117
|
-
width: number;
|
|
118
|
-
height: number;
|
|
119
|
-
} | null;
|
|
120
|
-
//# sourceMappingURL=scene-html-emit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scene-html-emit.d.ts","sourceRoot":"","sources":["../../../src/commands/_shared/scene-html-emit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,cAAc,GACd,WAAW,GACX,cAAc,GACd,cAAc,CAAC;AAEnB,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAMtC,CAAC;AAEX;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,6EAA6E;IAC7E,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AA4BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CASrD;AAMD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAI/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,mBAAmB,EAAE,EACjC,cAAc,EAAE,MAAM,GACrB,MAAM,CAQR;AAwPD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CA2C3D;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CASvD;AAED,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,wGAAwG;AACxG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAMnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,MAAM,CAiCrF;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKvF"}
|