@hypit/hypit 0.1.3 → 0.1.5
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/README.md +5 -3
- package/dist/public/caption.d.ts +206 -183
- package/dist/public/composition.d.ts +25 -3
- package/dist/public/endpoint-kit.d.ts +24 -2
- package/dist/public/generation.d.ts +5 -1
- package/dist/public/hyperframes.d.ts +19 -1
- package/dist/public/narrative.d.ts +17 -3
- package/dist/public/performance.d.ts +1590 -0
- package/dist/public/program-space.d.ts +179 -32
- package/dist/public/runtime-kit.d.ts +21 -8
- package/dist/public/sound.d.ts +822 -0
- package/dist/public/speech.d.ts +41 -0
- package/dist/public/studio-adapter.d.ts +107 -16
- package/dist/public/temporal-markup.d.ts +9 -44
- package/dist/public/temporal.d.ts +37 -28
- package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
- package/examples/README.md +18 -10
- package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
- package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
- package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
- package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
- package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
- package/examples/provider-package/README.md +78 -0
- package/examples/provider-package/hypit.runtime.json +12 -0
- package/examples/provider-package/packages/provider-images/package.json +11 -0
- package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
- package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
- package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
- package/examples/semantic-composition/README.md +6 -0
- package/examples/semantic-composition/chat.svml +6 -5
- package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
- package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
- package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
- package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
- package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
- package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
- package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
- package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
- package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
- package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
- package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
- package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
- package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
- package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
- package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
- package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
- package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
- package/package.json +35 -15
- package/packages/audio-track/README.md +20 -13
- package/packages/audio-track/package.json +1 -1
- package/packages/audio-track/src/component.ts +4 -4
- package/packages/audio-track/src/fragment.ts +6 -5
- package/packages/audio-track/src/index.ts +1 -1
- package/packages/audio-track/src/manifest.ts +17 -16
- package/packages/audio-track/src/program.ts +21 -25
- package/packages/audio-track/src/surface.ts +19 -18
- package/packages/audio-track-studio/README.md +23 -0
- package/packages/audio-track-studio/src/index.ts +33 -19
- package/packages/author-kit/README.md +1 -1
- package/packages/background-removal/README.md +4 -7
- package/packages/browser-capture/package.json +1 -1
- package/packages/build-result/README.md +69 -0
- package/packages/build-result/package.json +2 -1
- package/packages/build-result/src/decode.ts +12 -8
- package/packages/build-result/src/execution-log.ts +17 -0
- package/packages/build-result/src/file-reference.ts +42 -0
- package/packages/build-result/src/index.ts +4 -0
- package/packages/build-result/src/replace-file-windows.ts +58 -0
- package/packages/build-result/src/replace-file.ts +11 -0
- package/packages/build-result/src/store.ts +58 -14
- package/packages/build-result/src/types.ts +41 -8
- package/packages/build-result/src/writer.ts +12 -1
- package/packages/build-result-fs/README.md +23 -1
- package/packages/build-result-s3/README.md +5 -0
- package/packages/build-result-s3/src/repository.ts +23 -5
- package/packages/caption/README.md +61 -73
- package/packages/caption/package.json +3 -2
- package/packages/caption/src/activation.ts +2 -2
- package/packages/caption/src/component.ts +20 -5
- package/packages/caption/src/display.ts +3 -18
- package/packages/caption/src/fragment.ts +3 -7
- package/packages/caption/src/index.ts +6 -5
- package/packages/caption/src/manifest.ts +29 -46
- package/packages/caption/src/style.ts +24 -135
- package/packages/caption/src/surface.ts +12 -92
- package/packages/caption/src/temporalize.ts +18 -53
- package/packages/caption/src/types.ts +8 -35
- package/packages/caption/src/visibility.ts +23 -0
- package/packages/caption-fine/README.md +31 -11
- package/packages/caption-fine/package.json +4 -2
- package/packages/caption-fine/src/component.ts +3 -3
- package/packages/caption-fine/src/fragment.ts +7 -19
- package/packages/caption-fine/src/index.ts +2 -0
- package/packages/caption-fine/src/manifest.ts +27 -18
- package/packages/caption-fine/src/recipe.ts +7 -0
- package/packages/caption-fine/src/render.ts +62 -49
- package/packages/caption-fine/src/schedule.ts +39 -35
- package/packages/caption-fine/src/style.ts +10 -9
- package/packages/caption-fine/src/surface.ts +62 -35
- package/packages/caption-fine/src/types.ts +2 -0
- package/packages/caption-fine-studio/README.md +24 -2
- package/packages/caption-fine-studio/package.json +10 -3
- package/packages/caption-fine-studio/src/activation.ts +3 -3
- package/packages/caption-fine-studio/src/index.ts +61 -40
- package/packages/cli/README.md +81 -3
- package/packages/cli/package.json +1 -0
- package/packages/cli/src/arguments.ts +39 -15
- package/packages/cli/src/build-planning.ts +9 -3
- package/packages/cli/src/command.ts +7 -1
- package/packages/cli/src/commands/environment.ts +66 -27
- package/packages/cli/src/commands/execution.ts +81 -26
- package/packages/cli/src/commands/results.ts +7 -11
- package/packages/cli/src/index.ts +2 -2
- package/packages/cli/src/machine-view.ts +15 -5
- package/packages/cli/src/main.ts +38 -42
- package/packages/cli/src/observation.ts +7 -1
- package/packages/cli/src/output.ts +92 -34
- package/packages/cli/src/result-export.ts +22 -13
- package/packages/cli/src/run-file.ts +19 -8
- package/packages/cli/src/view.ts +64 -18
- package/packages/comment-sticker/README.md +3 -3
- package/packages/comment-sticker/package.json +1 -1
- package/packages/comment-sticker/src/component.ts +4 -4
- package/packages/comment-sticker/src/fragment.ts +5 -4
- package/packages/comment-sticker/src/manifest.ts +7 -6
- package/packages/comment-sticker/src/program.ts +9 -9
- package/packages/comment-sticker/src/surface.ts +6 -7
- package/packages/comment-sticker-studio/src/index.ts +2 -1
- package/packages/compiler-node/src/compiler.ts +1 -0
- package/packages/composition/README.md +21 -0
- package/packages/composition/src/audio-presentation.ts +44 -0
- package/packages/composition/src/index.ts +3 -0
- package/packages/composition/src/schema.ts +8 -3
- package/packages/composition/src/track.ts +15 -1
- package/packages/credential-store-env/README.md +1 -1
- package/packages/deck-track/README.md +3 -3
- package/packages/deck-track/package.json +1 -1
- package/packages/deck-track/src/component.ts +5 -5
- package/packages/deck-track/src/fragment.ts +6 -5
- package/packages/deck-track/src/lower.ts +12 -12
- package/packages/deck-track/src/manifest.ts +8 -7
- package/packages/deck-track/src/program.ts +13 -16
- package/packages/deck-track/src/surface.ts +9 -10
- package/packages/driver-node/src/driver.ts +41 -3
- package/packages/elevenlabs-speech/README.md +27 -0
- package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
- package/packages/elevenlabs-speech/src/activation.ts +26 -0
- package/packages/elevenlabs-speech/src/fragment.ts +11 -0
- package/packages/elevenlabs-speech/src/index.ts +111 -0
- package/packages/elevenlabs-speech/src/surface.ts +167 -0
- package/packages/endpoint-kit/README.md +24 -0
- package/packages/endpoint-kit/src/index.ts +7 -1
- package/packages/estimate/README.md +56 -3
- package/packages/estimate/src/program.ts +7 -8
- package/packages/film/README.md +12 -7
- package/packages/film/package.json +1 -1
- package/packages/film/src/component.ts +4 -4
- package/packages/film/src/fragment.ts +6 -5
- package/packages/film/src/manifest.ts +11 -10
- package/packages/film/src/program.ts +5 -5
- package/packages/film/src/recipe.ts +2 -1
- package/packages/film/src/surface.ts +6 -6
- package/packages/film-studio/package.json +1 -1
- package/packages/film-studio/src/index.ts +2 -2
- package/packages/fishaudio-speech/README.md +33 -0
- package/packages/fishaudio-speech/package.json +21 -0
- package/packages/fishaudio-speech/src/activation.ts +32 -0
- package/packages/fishaudio-speech/src/fragment.ts +11 -0
- package/packages/fishaudio-speech/src/index.ts +156 -0
- package/packages/fishaudio-speech/src/surface.ts +192 -0
- package/packages/fonts-open/README.md +5 -0
- package/packages/fonts-open/package.json +5 -1
- package/packages/fonts-open/src/studio.ts +21 -0
- package/packages/generation/README.md +11 -1
- package/packages/generation/src/mapping.ts +28 -30
- package/packages/gpt-image/README.md +1 -2
- package/packages/grok-imagine/README.md +1 -2
- package/packages/hyperframes/README.md +7 -3
- package/packages/hyperframes/src/browser-program.ts +11 -2
- package/packages/hyperframes/src/document.ts +15 -2
- package/packages/interview-emoji-reveal/README.md +4 -4
- package/packages/interview-emoji-reveal/package.json +1 -1
- package/packages/interview-emoji-reveal/src/component.ts +4 -4
- package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
- package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
- package/packages/interview-emoji-reveal/src/program.ts +14 -14
- package/packages/interview-emoji-reveal/src/surface.ts +8 -9
- package/packages/media-execution/README.md +7 -3
- package/packages/media-execution/src/audio-presentation.ts +23 -0
- package/packages/media-execution/src/execute.ts +2 -0
- package/packages/media-pipeline/README.md +7 -3
- package/packages/media-pipeline/src/audio-plan.ts +4 -1
- package/packages/media-pipeline/src/component.ts +16 -2
- package/packages/media-pipeline/src/manifest.ts +3 -1
- package/packages/media-pipeline/src/types.ts +2 -1
- package/packages/media-track/README.md +14 -47
- package/packages/media-track/package.json +1 -1
- package/packages/media-track/preview/preview.svml +5 -5
- package/packages/media-track/src/author.ts +12 -6
- package/packages/media-track/src/component.ts +10 -16
- package/packages/media-track/src/fragment.ts +8 -7
- package/packages/media-track/src/index.ts +3 -1
- package/packages/media-track/src/lower.ts +7 -7
- package/packages/media-track/src/manifest.ts +16 -38
- package/packages/media-track/src/program.ts +62 -67
- package/packages/media-track/src/sampling.ts +6 -6
- package/packages/media-track/src/sequence.ts +8 -8
- package/packages/media-track/src/surface.ts +25 -43
- package/packages/media-track-studio/README.md +9 -0
- package/packages/media-track-studio/src/index.ts +23 -13
- package/packages/mimo-speech/README.md +1 -1
- package/packages/minimax-h3/README.md +1 -1
- package/packages/nano-banana/README.md +1 -1
- package/packages/narrative/README.md +23 -1
- package/packages/narrative/src/identity.ts +11 -0
- package/packages/narrative/src/index.ts +3 -0
- package/packages/narrative/src/schema.ts +28 -27
- package/packages/narrative/src/selection.ts +52 -0
- package/packages/narrative/src/types.ts +2 -0
- package/packages/package-loader-node/README.md +30 -0
- package/packages/package-loader-node/package.json +5 -2
- package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
- package/packages/package-loader-node/src/index.ts +1 -0
- package/packages/package-loader-node/src/loader.ts +12 -15
- package/packages/package-loader-node/src/location.ts +27 -1
- package/packages/package-loader-node/src/module-scope.ts +183 -0
- package/packages/package-loader-node/src/types.ts +4 -0
- package/packages/performance/README.md +83 -0
- package/packages/performance/package.json +30 -0
- package/packages/performance/src/activation.ts +11 -0
- package/packages/performance/src/component.ts +46 -0
- package/packages/performance/src/index.ts +6 -0
- package/packages/performance/src/manifest.ts +53 -0
- package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
- package/packages/performance/src/program.ts +51 -0
- package/packages/performance/src/style.ts +35 -0
- package/packages/performance/src/surface.ts +99 -0
- package/packages/performance-studio/README.md +25 -0
- package/packages/performance-studio/package.json +21 -0
- package/packages/performance-studio/src/activation.ts +6 -0
- package/packages/performance-studio/src/index.ts +84 -0
- package/packages/program-space/README.md +9 -18
- package/packages/program-space/src/activation.ts +1 -5
- package/packages/program-space/src/index.ts +2 -11
- package/packages/program-space/src/surface.ts +1 -20
- package/packages/project-context-node/README.md +20 -0
- package/packages/project-context-node/package.json +10 -0
- package/packages/project-context-node/src/index.ts +3 -0
- package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
- package/packages/provider-hyperframes-local/README.md +43 -15
- package/packages/provider-hyperframes-local/src/activation.ts +4 -3
- package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
- package/packages/provider-hyperframes-local/src/capture.ts +96 -26
- package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
- package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
- package/packages/provider-hyperframes-local/src/options.ts +2 -0
- package/packages/provider-hyperframes-local/src/program.ts +6 -3
- package/packages/provider-hyperframes-local/src/progress.ts +53 -0
- package/packages/provider-hyperframes-local/src/provider.ts +18 -5
- package/packages/provider-hyperframes-local/src/render.ts +48 -7
- package/packages/provider-hypihub/README.md +48 -17
- package/packages/provider-hypihub/package.json +2 -0
- package/packages/provider-hypihub/src/mapping.ts +31 -7
- package/packages/provider-hypihub/src/oauth.ts +6 -0
- package/packages/provider-hypihub/src/provider.ts +25 -13
- package/packages/provider-hypihub/src/routes.ts +1 -2
- package/packages/provider-hypihub/src/upload.ts +2 -0
- package/packages/provider-media-local/README.md +3 -4
- package/packages/provider-whisperx-local/README.md +57 -0
- package/packages/provider-whisperx-local/src/program.ts +1 -0
- package/packages/provider-whisperx-local/src/provider.ts +3 -0
- package/packages/ranking/README.md +8 -6
- package/packages/ranking/package.json +1 -1
- package/packages/ranking/src/component.ts +6 -6
- package/packages/ranking/src/fragment.ts +11 -7
- package/packages/ranking/src/manifest.ts +21 -14
- package/packages/ranking/src/render.ts +33 -35
- package/packages/ranking/src/schedule.ts +16 -19
- package/packages/ranking/src/surface.ts +12 -13
- package/packages/ranking-studio/README.md +29 -0
- package/packages/ranking-studio/package.json +8 -3
- package/packages/ranking-studio/src/index.ts +71 -12
- package/packages/render-hyperframes/README.md +7 -7
- package/packages/render-hyperframes/package.json +1 -1
- package/packages/render-hyperframes/src/component.ts +11 -1
- package/packages/render-hyperframes/src/fragment.ts +7 -4
- package/packages/render-hyperframes/src/manifest.ts +4 -4
- package/packages/render-hyperframes/src/surface.ts +6 -6
- package/packages/runtime/README.md +8 -1
- package/packages/runtime/src/catalog.ts +2 -0
- package/packages/runtime/src/execution.ts +15 -4
- package/packages/runtime/src/index.ts +2 -1
- package/packages/runtime/src/log.ts +51 -0
- package/packages/runtime/src/types.ts +5 -8
- package/packages/runtime-host-node/README.md +30 -0
- package/packages/runtime-host-node/package.json +1 -0
- package/packages/runtime-host-node/src/index.ts +25 -9
- package/packages/runtime-host-node/src/packages.ts +47 -50
- package/packages/runtime-kit/README.md +5 -0
- package/packages/runtime-kit/src/index.ts +3 -1
- package/packages/runtime-local/README.md +111 -4
- package/packages/runtime-local/src/config.ts +202 -56
- package/packages/runtime-local/src/control.ts +9 -1
- package/packages/runtime-local/src/executor.ts +66 -0
- package/packages/runtime-local/src/host.ts +37 -17
- package/packages/runtime-local/src/log.ts +48 -0
- package/packages/runtime-local/src/programs.ts +41 -25
- package/packages/runtime-local/src/result-writer.ts +2 -0
- package/packages/runtime-local/src/runtime.ts +10 -6
- package/packages/runtime-local/src/supervisor.ts +142 -0
- package/packages/runtime-local/src/types.ts +9 -2
- package/packages/runtime-local/src/worker-process.ts +7 -24
- package/packages/runtime-local/src/worker.ts +55 -83
- package/packages/screen-overlay/README.md +3 -3
- package/packages/screen-overlay/package.json +1 -1
- package/packages/screen-overlay/src/component.ts +3 -3
- package/packages/screen-overlay/src/fragment.ts +5 -4
- package/packages/screen-overlay/src/manifest.ts +7 -6
- package/packages/screen-overlay/src/program.ts +9 -9
- package/packages/screen-overlay/src/surface.ts +6 -7
- package/packages/script/README.md +37 -2
- package/packages/script/src/edit.ts +123 -73
- package/packages/script/src/lexical.ts +40 -6
- package/packages/script/src/manifest.ts +2 -2
- package/packages/script/src/narrative.ts +1 -0
- package/packages/script/src/parser.ts +36 -8
- package/packages/script/src/surface.ts +4 -3
- package/packages/script/src/types.ts +5 -1
- package/packages/script-studio/package.json +9 -3
- package/packages/script-studio/src/index.ts +2 -0
- package/packages/script-studio/src/projection.ts +105 -0
- package/packages/seedance/README.md +30 -1
- package/packages/seedance/src/index.ts +18 -7
- package/packages/seedance/src/surface.ts +17 -4
- package/packages/seedance-kits/README.md +10 -2
- package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
- package/packages/seedream/README.md +1 -1
- package/packages/sound/README.md +81 -0
- package/packages/sound/package.json +25 -0
- package/packages/sound/src/activation.ts +11 -0
- package/packages/sound/src/component.ts +28 -0
- package/packages/sound/src/index.ts +5 -0
- package/packages/sound/src/manifest.ts +47 -0
- package/packages/sound/src/program.ts +84 -0
- package/packages/sound/src/style.ts +34 -0
- package/packages/sound/src/surface.ts +90 -0
- package/packages/sound-studio/README.md +22 -0
- package/packages/sound-studio/package.json +20 -0
- package/packages/sound-studio/src/activation.ts +6 -0
- package/packages/sound-studio/src/index.ts +74 -0
- package/packages/speech/README.md +2 -2
- package/packages/speech-alignment/src/align.ts +45 -21
- package/packages/speech-alignment/src/local.ts +8 -0
- package/packages/speech-alignment/src/locate.ts +1 -1
- package/packages/store-sqlite/README.md +7 -0
- package/packages/store-sqlite/src/store.ts +84 -83
- package/packages/studio/INSPECTOR.md +117 -0
- package/packages/studio/README.md +149 -14
- package/packages/studio/package.json +8 -7
- package/packages/studio/src/build-library.ts +99 -84
- package/packages/studio/src/companion-assembly.ts +1 -0
- package/packages/studio/src/domain.ts +1 -1
- package/packages/studio/src/fallback-companions.ts +3 -3
- package/packages/studio/src/feedback-server.ts +51 -0
- package/packages/studio/src/feedback-store.ts +66 -0
- package/packages/studio/src/feedback.ts +60 -0
- package/packages/studio/src/library-media.ts +19 -0
- package/packages/studio/src/parameter-values.ts +83 -1
- package/packages/studio/src/parameters.ts +132 -43
- package/packages/studio/src/preview/render.ts +5 -1
- package/packages/studio/src/preview/runtime-shim.ts +49 -3
- package/packages/studio/src/programme.ts +14 -30
- package/packages/studio/src/server.ts +66 -34
- package/packages/studio/src/shared.ts +24 -8
- package/packages/studio/src/snapshot.ts +21 -132
- package/packages/studio/src/studio-preflight.ts +3 -3
- package/packages/studio/src/studio-registry.ts +72 -6
- package/packages/studio/src/style.css +342 -190
- package/packages/studio/src/temporal-edit.ts +131 -0
- package/packages/studio/src/ui/artifact-name.ts +80 -0
- package/packages/studio/src/ui/artifact-preview.ts +99 -0
- package/packages/studio/src/ui/comments.ts +233 -0
- package/packages/studio/src/ui/icons.ts +10 -1
- package/packages/studio/src/ui/library.ts +373 -192
- package/packages/studio/src/ui/main.ts +291 -110
- package/packages/studio/src/ui/material-preview.ts +1 -1
- package/packages/studio/src/ui/overlay.ts +31 -26
- package/packages/studio/src/ui/scrub-preview.ts +108 -0
- package/packages/studio/src/ui/sidebar-panel.ts +31 -0
- package/packages/studio/src/ui/stage.ts +188 -9
- package/packages/studio/src/ui/timeline.ts +187 -281
- package/packages/studio/start.ts +19 -5
- package/packages/studio-adapter/README.md +151 -11
- package/packages/studio-adapter/src/index.ts +126 -14
- package/packages/temporal/README.md +6 -6
- package/packages/temporal/package.json +1 -1
- package/packages/temporal/src/component.ts +5 -6
- package/packages/temporal/src/index.ts +8 -6
- package/packages/temporal/src/location.ts +11 -11
- package/packages/temporal/src/projection.ts +19 -19
- package/packages/temporal/src/rational.ts +4 -4
- package/packages/temporal-markup/EDITING.md +183 -0
- package/packages/temporal-markup/README.md +31 -11
- package/packages/temporal-markup/package.json +1 -1
- package/packages/temporal-markup/src/index.ts +20 -25
- package/packages/temporal-markup/src/space.ts +10 -41
- package/packages/timeline/README.md +31 -0
- package/packages/{semantic-track → timeline}/package.json +1 -1
- package/packages/timeline/src/activation.ts +8 -0
- package/packages/timeline/src/component.ts +24 -0
- package/packages/timeline/src/identity.ts +60 -0
- package/packages/timeline/src/index.ts +6 -0
- package/packages/{semantic-track → timeline}/src/location.ts +20 -20
- package/packages/timeline/src/manifest.ts +39 -0
- package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
- package/packages/timeline/src/types.ts +24 -0
- package/packages/timeline-author/README.md +68 -0
- package/packages/{speech-track → timeline-author}/package.json +6 -4
- package/packages/timeline-author/src/activation.ts +22 -0
- package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
- package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
- package/packages/timeline-author/src/index.ts +7 -0
- package/packages/timeline-author/src/manifest.ts +78 -0
- package/packages/timeline-author/src/program.ts +107 -0
- package/packages/timeline-author/src/surface.ts +46 -0
- package/packages/timeline-author/src/types.ts +6 -0
- package/packages/typography-track/README.md +4 -4
- package/packages/typography-track/package.json +1 -1
- package/packages/typography-track/src/component.ts +4 -4
- package/packages/typography-track/src/fragment.ts +4 -3
- package/packages/typography-track/src/manifest.ts +11 -9
- package/packages/typography-track/src/program.ts +15 -15
- package/packages/typography-track/src/surface.ts +17 -18
- package/packages/typography-track-studio/package.json +8 -3
- package/packages/typography-track-studio/src/index.ts +5 -1
- package/packages/video-cli/README.md +16 -4
- package/packages/video-cli/package.json +2 -1
- package/packages/video-cli/src/creation.ts +25 -9
- package/packages/video-cli/src/index.ts +1 -1
- package/packages/video-cli/src/studio-distribution.ts +2 -1
- package/packages/volcengine-matting/README.md +3 -3
- package/packages/whisperx/README.md +8 -1
- package/packages/workspace/src/index.ts +2 -0
- package/packages/workspace-fs-node/README.md +4 -1
- package/packages/workspace-fs-node/src/workspace.ts +3 -1
- package/services/whisperx/README.md +14 -0
- package/services/whisperx/pyproject.toml +2 -0
- package/services/whisperx/uv.lock +20 -20
- package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
- package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
- package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
- package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
- package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
- package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
- package/packages/provider-kie/README.md +0 -134
- package/packages/provider-kie/package.json +0 -43
- package/packages/provider-kie/src/activation.ts +0 -71
- package/packages/provider-kie/src/index.ts +0 -10
- package/packages/provider-kie/src/mapping.ts +0 -182
- package/packages/provider-kie/src/provider.ts +0 -657
- package/packages/provider-kie/src/routes.ts +0 -150
- package/packages/provider-xiaomi-mimo/README.md +0 -32
- package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
- package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
- package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
- package/packages/runtime/src/environment.ts +0 -6
- package/packages/semantic-track/README.md +0 -21
- package/packages/semantic-track/src/activation.ts +0 -8
- package/packages/semantic-track/src/component.ts +0 -24
- package/packages/semantic-track/src/identity.ts +0 -58
- package/packages/semantic-track/src/index.ts +0 -6
- package/packages/semantic-track/src/manifest.ts +0 -38
- package/packages/semantic-track/src/types.ts +0 -26
- package/packages/speech-track/README.md +0 -51
- package/packages/speech-track/src/activation.ts +0 -19
- package/packages/speech-track/src/index.ts +0 -7
- package/packages/speech-track/src/manifest.ts +0 -73
- package/packages/speech-track/src/program.ts +0 -64
- package/packages/speech-track/src/surface.ts +0 -35
- package/packages/speech-track/src/types.ts +0 -6
- package/packages/speech-track-studio/README.md +0 -3
- package/packages/speech-track-studio/package.json +0 -14
- package/packages/speech-track-studio/src/activation.ts +0 -7
- package/packages/speech-track-studio/src/index.ts +0 -40
- /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
- /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { narrativeTypes } from "@hypit/narrative";
|
|
2
|
+
import { sameType } from "@hypit/protocol";
|
|
3
|
+
import type { StudioScriptProjectionInput, StudioScriptProjection } from "@hypit/studio-adapter";
|
|
4
|
+
|
|
5
|
+
type NarrativeValue = {
|
|
6
|
+
readonly id?: string;
|
|
7
|
+
readonly segments?: readonly {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly startAnchorId: string;
|
|
10
|
+
readonly endAnchorId: string;
|
|
11
|
+
}[];
|
|
12
|
+
readonly tokens?: readonly {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly segmentId: string;
|
|
15
|
+
readonly startAnchorId: string;
|
|
16
|
+
readonly endAnchorId: string;
|
|
17
|
+
readonly text: string;
|
|
18
|
+
}[];
|
|
19
|
+
readonly selections?: readonly {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly startAnchorId: string;
|
|
22
|
+
readonly endAnchorId: string;
|
|
23
|
+
}[];
|
|
24
|
+
readonly moments?: readonly {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly anchorId: string;
|
|
27
|
+
}[];
|
|
28
|
+
readonly semanticIndex?: {
|
|
29
|
+
readonly anchors?: readonly {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
readonly kind: "program-start" | "segment-start" | "segment-end" | "token-start" | "token-end" | "program-end";
|
|
32
|
+
readonly segmentId?: string;
|
|
33
|
+
readonly tokenId?: string;
|
|
34
|
+
}[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export function projectScriptTimeline(input: StudioScriptProjectionInput): StudioScriptProjection {
|
|
39
|
+
const records = input.values.filter((item) =>
|
|
40
|
+
sameType(item.type, narrativeTypes.narrative)
|
|
41
|
+
&& (item.value as NarrativeValue).id === input.source.narrativeId);
|
|
42
|
+
if (records.length > 1) {
|
|
43
|
+
throw new Error(`Studio Narrative id ${input.source.narrativeId} resolves to more than one authored value.`);
|
|
44
|
+
}
|
|
45
|
+
const record = records[0];
|
|
46
|
+
const narrative = record?.value as NarrativeValue | undefined;
|
|
47
|
+
if (narrative === undefined) throw new Error("Studio Narrative is not an inline authored value.");
|
|
48
|
+
|
|
49
|
+
const segmentRanges = new Map((input.source.segments ?? []).map((item) => [item.id, item.range]));
|
|
50
|
+
const tokenRanges = new Map((input.source.tokens ?? []).map((item) => [item.id, item.range]));
|
|
51
|
+
const frame = (id: string): number | undefined => input.anchors.get(id);
|
|
52
|
+
|
|
53
|
+
const segments = (narrative.segments ?? []).flatMap((segment) => {
|
|
54
|
+
const startFrame = frame(segment.startAnchorId);
|
|
55
|
+
const endFrame = frame(segment.endAnchorId);
|
|
56
|
+
if (startFrame === undefined || endFrame === undefined) return [];
|
|
57
|
+
return [{
|
|
58
|
+
id: segment.id,
|
|
59
|
+
startFrame,
|
|
60
|
+
endFrameExclusive: Math.max(startFrame + 1, endFrame),
|
|
61
|
+
...(segmentRanges.has(segment.id) ? { range: segmentRanges.get(segment.id)! } : {}),
|
|
62
|
+
}];
|
|
63
|
+
});
|
|
64
|
+
const tokens = (narrative.tokens ?? []).flatMap((token) => {
|
|
65
|
+
const startFrame = frame(token.startAnchorId);
|
|
66
|
+
const endFrame = frame(token.endAnchorId);
|
|
67
|
+
if (startFrame === undefined || endFrame === undefined) return [];
|
|
68
|
+
return [{
|
|
69
|
+
id: token.id,
|
|
70
|
+
segmentId: token.segmentId,
|
|
71
|
+
text: token.text,
|
|
72
|
+
startFrame,
|
|
73
|
+
endFrameExclusive: Math.max(startFrame + 1, endFrame),
|
|
74
|
+
...(tokenRanges.has(token.id) ? { range: tokenRanges.get(token.id)! } : {}),
|
|
75
|
+
}];
|
|
76
|
+
});
|
|
77
|
+
const anchors = (narrative.semanticIndex?.anchors ?? []).flatMap((anchor) => {
|
|
78
|
+
const at = frame(anchor.id);
|
|
79
|
+
if (at === undefined) return [];
|
|
80
|
+
return [{
|
|
81
|
+
id: anchor.id,
|
|
82
|
+
kind: anchor.kind,
|
|
83
|
+
frame: at,
|
|
84
|
+
...(anchor.segmentId === undefined ? {} : { segmentId: anchor.segmentId }),
|
|
85
|
+
...(anchor.tokenId === undefined ? {} : { tokenId: anchor.tokenId }),
|
|
86
|
+
}];
|
|
87
|
+
});
|
|
88
|
+
const selections = (narrative.selections ?? []).flatMap((selection) => {
|
|
89
|
+
const startFrame = frame(selection.startAnchorId);
|
|
90
|
+
const endFrameExclusive = frame(selection.endAnchorId);
|
|
91
|
+
if (startFrame === undefined || endFrameExclusive === undefined || endFrameExclusive <= startFrame) return [];
|
|
92
|
+
return [{
|
|
93
|
+
id: selection.id,
|
|
94
|
+
startAnchorId: selection.startAnchorId,
|
|
95
|
+
endAnchorId: selection.endAnchorId,
|
|
96
|
+
startFrame,
|
|
97
|
+
endFrameExclusive,
|
|
98
|
+
}];
|
|
99
|
+
});
|
|
100
|
+
const moments = (narrative.moments ?? []).flatMap((moment) => {
|
|
101
|
+
const at = frame(moment.anchorId);
|
|
102
|
+
return at === undefined ? [] : [{ id: moment.id, anchorId: moment.anchorId, frame: at }];
|
|
103
|
+
});
|
|
104
|
+
return { anchors, segments, tokens, selections, moments };
|
|
105
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# `@hypit/seedance`
|
|
2
2
|
|
|
3
3
|
Exact Seedance author model module. It owns the request schema and exactly three invocation Surfaces;
|
|
4
|
-
it does not contain
|
|
4
|
+
it does not contain service credentials, HTTP code, queues, runtime routing or usage-specific Prompt assembly.
|
|
5
5
|
|
|
6
6
|
The three model invocation shapes are deliberately separate:
|
|
7
7
|
|
|
@@ -17,3 +17,32 @@ generic Text Template or third-party author module can feed them without becomin
|
|
|
17
17
|
the author's literal, in whole seconds inside the model's declared range; measure the spoken line first
|
|
18
18
|
with `hypit measure` and write the number here. Nothing in the graph computes it, so a Build plan is
|
|
19
19
|
complete before it starts.
|
|
20
|
+
|
|
21
|
+
## Visual reference metadata
|
|
22
|
+
|
|
23
|
+
Declare whether each image or video contains a person/avatar reference, including an AI-generated
|
|
24
|
+
human likeness. This describes the supplied material, independently of the prompt's requested action:
|
|
25
|
+
|
|
26
|
+
```xml
|
|
27
|
+
<seedance:ReferenceVideo id="dance" model="mini" prompt={direction} duration="8">
|
|
28
|
+
<seedance:Reference image={presenter.image} person-reference="true"/>
|
|
29
|
+
<seedance:Reference video={motion.video} person-reference="true"/>
|
|
30
|
+
<seedance:Reference image={room.image} person-reference="false"/>
|
|
31
|
+
</seedance:ReferenceVideo>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`person-reference` is optional, accepts literal `true` or `false`, and applies to image/video, not
|
|
35
|
+
voice audio. Omission carries no classification; it is distinct from explicitly declaring false.
|
|
36
|
+
Inspect the actual reference when deciding the value. For `FrameVideo`, use
|
|
37
|
+
`first-frame-person-reference` and `last-frame-person-reference` beside their respective frame
|
|
38
|
+
inputs. A last-frame classification requires a last-frame input.
|
|
39
|
+
|
|
40
|
+
The model's media ports carry this as `fields.personReference`. Providers interpret it through their
|
|
41
|
+
service's media handling; it is not a prompt sentence or a Core-level identity. HypiHub sends it as
|
|
42
|
+
`is_person_reference` when uploading the file, then uses the returned URL in the ordinary video
|
|
43
|
+
request. A project Provider maps it according to its own API.
|
|
44
|
+
|
|
45
|
+
Video references can carry motion or camera behavior while image references carry the target
|
|
46
|
+
appearance. Request duration and reference-clip duration are different limits. Check the selected
|
|
47
|
+
Endpoint's reference duration and media limits when choosing an excerpt; the author's output duration
|
|
48
|
+
alone does not validate the input clip.
|
|
@@ -19,14 +19,16 @@ export type SeedanceModel = typeof seedanceModels[number];
|
|
|
19
19
|
|
|
20
20
|
const ASPECT_RATIOS = ["1:1", "4:3", "3:4", "16:9", "9:16", "21:9", "adaptive"] as const;
|
|
21
21
|
|
|
22
|
+
const PERSON_REFERENCE_FIELDS = [{ name: "personReference", value: { kind: "boolean" }, optional: true }] as const;
|
|
23
|
+
|
|
22
24
|
const SEEDANCE_25_DURATIONS = [-1, ...Array.from({ length: 27 }, (_item, index) => index + 4)] as const;
|
|
23
25
|
|
|
24
26
|
/**
|
|
25
27
|
* Exact Seedance model inputs. Provider wire names are deliberately absent:
|
|
26
|
-
*
|
|
28
|
+
* Each service maps these ports independently.
|
|
27
29
|
*
|
|
28
30
|
* Seedance 2.5 is not treated as an alias for a Seedance 2 variant. Its public
|
|
29
|
-
*
|
|
31
|
+
* request definition widens prompt/reference capacities and duration independently,
|
|
30
32
|
* so it receives its own exact Capability while reusing the same three author
|
|
31
33
|
* Surfaces.
|
|
32
34
|
*/
|
|
@@ -37,11 +39,11 @@ function seedancePortTable(model: SeedanceModel): GenerationPortTable {
|
|
|
37
39
|
result: "video",
|
|
38
40
|
ports: [
|
|
39
41
|
{ name: "prompt", value: { kind: "text", maxChars: is25 ? 30_000 : 20_000 }, minItems: 1, maxItems: 1 },
|
|
40
|
-
{ name: "referenceImage", value: { kind: "media", accepts: ["image"] }, minItems: 0, maxItems: is25 ? 30 : 9 },
|
|
41
|
-
{ name: "referenceVideo", value: { kind: "media", accepts: ["video"] }, minItems: 0, maxItems: is25 ? 10 : 3 },
|
|
42
|
+
{ name: "referenceImage", value: { kind: "media", accepts: ["image"], itemFields: PERSON_REFERENCE_FIELDS }, minItems: 0, maxItems: is25 ? 30 : 9 },
|
|
43
|
+
{ name: "referenceVideo", value: { kind: "media", accepts: ["video"], itemFields: PERSON_REFERENCE_FIELDS }, minItems: 0, maxItems: is25 ? 10 : 3 },
|
|
42
44
|
{ name: "referenceAudio", value: { kind: "media", accepts: ["audio"] }, minItems: 0, maxItems: is25 ? 10 : 3 },
|
|
43
|
-
{ name: "firstFrame", value: { kind: "media", accepts: ["image"] }, minItems: 0, maxItems: 1 },
|
|
44
|
-
{ name: "lastFrame", value: { kind: "media", accepts: ["image"] }, minItems: 0, maxItems: 1 },
|
|
45
|
+
{ name: "firstFrame", value: { kind: "media", accepts: ["image"], itemFields: PERSON_REFERENCE_FIELDS }, minItems: 0, maxItems: 1 },
|
|
46
|
+
{ name: "lastFrame", value: { kind: "media", accepts: ["image"], itemFields: PERSON_REFERENCE_FIELDS }, minItems: 0, maxItems: 1 },
|
|
45
47
|
{
|
|
46
48
|
name: "resolution",
|
|
47
49
|
value: {
|
|
@@ -174,6 +176,11 @@ const seedanceCommonAttributes: readonly SurfaceAttributeVocabulary[] = [
|
|
|
174
176
|
},
|
|
175
177
|
];
|
|
176
178
|
|
|
179
|
+
const personReferenceAttribute = (name: string): SurfaceAttributeVocabulary => ({
|
|
180
|
+
name, kind: "literal", required: false, values: ["true", "false"],
|
|
181
|
+
summary: "Declares whether this visual input contains a person/avatar reference, including an AI-generated human likeness. Omission leaves it unclassified.",
|
|
182
|
+
});
|
|
183
|
+
|
|
177
184
|
const seedanceVideoPort: readonly SurfacePortVocabulary[] = [{
|
|
178
185
|
name: "video",
|
|
179
186
|
type: artifactTypes.blob,
|
|
@@ -229,6 +236,8 @@ export const seedanceMarkupSurfaces = [
|
|
|
229
236
|
summary: "Generates one video with an exact Seedance model from a Text prompt and the images the video opens and closes on.",
|
|
230
237
|
attributes: [
|
|
231
238
|
...seedanceCommonAttributes,
|
|
239
|
+
personReferenceAttribute("first-frame-person-reference"),
|
|
240
|
+
personReferenceAttribute("last-frame-person-reference"),
|
|
232
241
|
{
|
|
233
242
|
name: "first-frame",
|
|
234
243
|
kind: "reference",
|
|
@@ -268,6 +277,7 @@ export const seedanceMarkupSurfaces = [
|
|
|
268
277
|
cardinality: "many",
|
|
269
278
|
summary: "Attaches one Artifact as a reference through exactly one of its `image`, `video` or `audio` references.",
|
|
270
279
|
attributes: [
|
|
280
|
+
personReferenceAttribute("person-reference"),
|
|
271
281
|
{
|
|
272
282
|
name: "image",
|
|
273
283
|
kind: "reference",
|
|
@@ -301,12 +311,13 @@ export const seedanceMarkupSurfaces = [
|
|
|
301
311
|
aspect-ratio="9:16"
|
|
302
312
|
generate-audio="true"
|
|
303
313
|
>
|
|
304
|
-
<seedance:Reference image={presenter-clean}/>
|
|
314
|
+
<seedance:Reference image={presenter-clean} person-reference="true"/>
|
|
305
315
|
<seedance:Reference audio={presenter-voice}/>
|
|
306
316
|
</seedance:ReferenceVideo>`,
|
|
307
317
|
notes: [
|
|
308
318
|
...seedanceSettingNotes,
|
|
309
319
|
"The element requires at least one `Reference` child, and the model's port limits cap how many of each role it accepts.",
|
|
320
|
+
"`person-reference` applies to image/video references; voice audio carries no visual classification. The Provider transports the declared fact according to its API.",
|
|
310
321
|
"A `Reference` carries exactly one of `image`, `video` or `audio`, and is empty.",
|
|
311
322
|
],
|
|
312
323
|
},
|
|
@@ -28,6 +28,7 @@ type MediaInput = {
|
|
|
28
28
|
readonly port: "referenceImage" | "referenceVideo" | "referenceAudio" | "firstFrame" | "lastFrame";
|
|
29
29
|
readonly role: GenerationMediaRole;
|
|
30
30
|
readonly source: SurfaceResolvedReference;
|
|
31
|
+
readonly fields?: { readonly personReference: boolean };
|
|
31
32
|
};
|
|
32
33
|
|
|
33
34
|
function localName(value: string): string {
|
|
@@ -142,6 +143,11 @@ function booleanAttribute(element: StructuredElement, name: string, fallback: bo
|
|
|
142
143
|
throw new Error(`${element.name}.${name} must be true or false`);
|
|
143
144
|
}
|
|
144
145
|
|
|
146
|
+
function personReferenceFields(element: StructuredElement, name: string) {
|
|
147
|
+
return element.attributes[name] === undefined ? undefined
|
|
148
|
+
: { personReference: booleanAttribute(element, name, false) };
|
|
149
|
+
}
|
|
150
|
+
|
|
145
151
|
function enumeratedPort(table: GenerationPortTable, name: string): readonly (string | number)[] {
|
|
146
152
|
const port = generationPort(table, name);
|
|
147
153
|
if (port.value.kind !== "enum") throw new Error(`${table.model} port ${name} is not enumerated`);
|
|
@@ -204,12 +210,15 @@ function referenceInputs(
|
|
|
204
210
|
continue;
|
|
205
211
|
}
|
|
206
212
|
if (localName(child.name) !== "Reference") throw new Error(`${element.name} accepts only Reference children`);
|
|
207
|
-
attributes(child, [], accepted);
|
|
213
|
+
attributes(child, [], [...accepted, "person-reference"]);
|
|
208
214
|
empty(child);
|
|
209
215
|
const kinds = accepted.filter((kind) => child.attributes[kind] !== undefined);
|
|
210
216
|
if (kinds.length !== 1) throw new Error(`${child.name} requires exactly one of ${accepted.join(", ")}`);
|
|
211
217
|
const role = kinds[0]!;
|
|
218
|
+
const fields = personReferenceFields(child, "person-reference");
|
|
219
|
+
if (role === "audio" && fields !== undefined) throw new Error(`${child.name}.person-reference applies to image or video, not audio`);
|
|
212
220
|
result.push({
|
|
221
|
+
...(fields === undefined ? {} : { fields }),
|
|
213
222
|
role,
|
|
214
223
|
port: REFERENCE_PORTS[role],
|
|
215
224
|
source: mediaReference(resolved(child, role, resolveReference), role, `${child.name}.${role}`),
|
|
@@ -230,10 +239,14 @@ function frameInputs(
|
|
|
230
239
|
resolveReference: (path: string) => SurfaceResolvedReference | undefined,
|
|
231
240
|
): MediaInput[] {
|
|
232
241
|
const first = mediaReference(resolved(element, "first-frame", resolveReference), "image", `${element.name}.first-frame`);
|
|
233
|
-
const
|
|
242
|
+
const firstFields = personReferenceFields(element, "first-frame-person-reference");
|
|
243
|
+
const result: MediaInput[] = [{ port: "firstFrame", role: "image", source: first, ...(firstFields === undefined ? {} : { fields: firstFields }) }];
|
|
244
|
+
const lastFields = personReferenceFields(element, "last-frame-person-reference");
|
|
245
|
+
if (lastFields !== undefined && element.attributes["last-frame"] === undefined) throw new Error(`${element.name}.last-frame-person-reference requires last-frame`);
|
|
234
246
|
if (element.attributes["last-frame"] !== undefined) {
|
|
235
247
|
result.push({
|
|
236
248
|
port: "lastFrame",
|
|
249
|
+
...(lastFields === undefined ? {} : { fields: lastFields }),
|
|
237
250
|
role: "image",
|
|
238
251
|
source: mediaReference(resolved(element, "last-frame", resolveReference), "image", `${element.name}.last-frame`),
|
|
239
252
|
});
|
|
@@ -266,7 +279,7 @@ function assembleMedia(
|
|
|
266
279
|
type: binding.type,
|
|
267
280
|
value: {
|
|
268
281
|
kind: "inline",
|
|
269
|
-
value: sealGenerationMediaBinding(port as GenerationMediaPort, { role: value.role }) as unknown as CanonicalValue,
|
|
282
|
+
value: sealGenerationMediaBinding(port as GenerationMediaPort, { role: value.role, ...(value.fields === undefined ? {} : { fields: value.fields }) }) as unknown as CanonicalValue,
|
|
270
283
|
},
|
|
271
284
|
range,
|
|
272
285
|
});
|
|
@@ -330,7 +343,7 @@ export const decodeSeedanceTextVideoSurface: StructuredSurfaceHandler = ({ eleme
|
|
|
330
343
|
};
|
|
331
344
|
|
|
332
345
|
export const decodeSeedanceFrameVideoSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
|
|
333
|
-
attributes(element, ["id", "model", "prompt", "duration", "first-frame"], [...COMMON_OPTIONAL, "last-frame"]);
|
|
346
|
+
attributes(element, ["id", "model", "prompt", "duration", "first-frame"], [...COMMON_OPTIONAL, "last-frame", "first-frame-person-reference", "last-frame-person-reference"]);
|
|
334
347
|
empty(element);
|
|
335
348
|
const selected = modelSelection(element);
|
|
336
349
|
const promptSource = resolved(element, "prompt", resolveReference);
|
|
@@ -44,7 +44,7 @@ Speaker uses the same graph vocabulary. The Kit assumes `@image1` is the visible
|
|
|
44
44
|
<seedance:ReferenceVideo id="hook-take" model="mini"
|
|
45
45
|
prompt={hook-prompt} duration="8"
|
|
46
46
|
resolution="720p" aspect-ratio="9:16" generate-audio="true">
|
|
47
|
-
<seedance:Reference image={presenter}/>
|
|
47
|
+
<seedance:Reference image={presenter} person-reference="true"/>
|
|
48
48
|
<seedance:Reference audio={voice}/>
|
|
49
49
|
</seedance:ReferenceVideo>
|
|
50
50
|
```
|
|
@@ -78,7 +78,9 @@ no duration-estimation node on the generation route.
|
|
|
78
78
|
|
|
79
79
|
The Recipe carries recurring choices exposed by the selected template. `dialogue` receives the
|
|
80
80
|
Script Segment's `.dialogue` Text, retaining pronunciation and Role turns. Optional `action` supplies
|
|
81
|
-
this passage's attitude, attention, interaction and any motivated cuts admitted by
|
|
81
|
+
this passage's attitude, vocal delivery, attention, interaction and any motivated cuts admitted by
|
|
82
|
+
the Kit. In Speaker, `performance` selects the recurring approach to voice and visible expression;
|
|
83
|
+
`gesture` selects body language, while `action` directs the particular thought and response.
|
|
82
84
|
Do not retype the complete spoken text into action or treat each Role turn as a required new Take.
|
|
83
85
|
For B-roll, `story` carries the silent visual events rather than spoken dialogue.
|
|
84
86
|
|
|
@@ -151,3 +153,9 @@ Avoid exaggerated reactions or constantly moving every person simply to prevent
|
|
|
151
153
|
For a multi-scene B-roll montage, `story` can name the references in scene order and give each a small
|
|
152
154
|
action. Choose an edit language compatible with cuts. “Continuous within each scene” and “one
|
|
153
155
|
continuous shot for the whole montage” ask for different results.
|
|
156
|
+
|
|
157
|
+
Visual input classification belongs to the Seedance Reference, separately from Kit text. The
|
|
158
|
+
[Seedance author package](../seedance/README.md#visual-reference-metadata) explains `person-reference`
|
|
159
|
+
and its frame variants. The Kit supplies direction; the actual reference edges supply media and
|
|
160
|
+
metadata. For movement-led work, a reference video can carry the motion while the text explains what
|
|
161
|
+
to preserve and change.
|
|
@@ -75,19 +75,19 @@
|
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
text-template.speaker-v1.choice.performance.natural-explainer {
|
|
78
|
-
text: "PERFORMANCE:
|
|
78
|
+
text: "PERFORMANCE: engaged, friendly conversation with responsive intonation and clear emphasis as the thought develops. Let gaze, expression, and gesture convey the speaker's attitude to what they are saying.";
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
text-template.speaker-v1.choice.performance.high-energy-ugc {
|
|
82
|
-
text: "PERFORMANCE: vivid
|
|
82
|
+
text: "PERFORMANCE: vivid, energetic short-form delivery with nimble phrasing, animated intonation, and emphatic key ideas. Let the voice and visible reactions develop together as the speaker makes their point.";
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
text-template.speaker-v1.choice.performance.calm-authority {
|
|
86
|
-
text: "PERFORMANCE: composed,
|
|
86
|
+
text: "PERFORMANCE: composed, thoughtful conviction with measured phrasing and purposeful vocal emphasis. Let focused attention and small, deliberate reactions express how the speaker weighs the idea and reaches a judgment.";
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
text-template.speaker-v1.choice.performance.reactive-playful {
|
|
90
|
-
text: "PERFORMANCE: playful
|
|
90
|
+
text: "PERFORMANCE: playful, responsive delivery with teasing inflection, lively timing, and an audible smile where the thought amuses the speaker. Let curiosity, skepticism, or delight come through in the voice and matching visible reactions as the passage calls for them.";
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
text-template.speaker-v1.block.gesture {
|
|
@@ -131,6 +131,6 @@
|
|
|
131
131
|
order: 100;
|
|
132
132
|
slot: action;
|
|
133
133
|
optional: true;
|
|
134
|
-
label: "ACTION DIRECTION:";
|
|
134
|
+
label: "PERFORMANCE AND ACTION DIRECTION:";
|
|
135
135
|
}
|
|
136
136
|
</sheet>
|
|
@@ -4,7 +4,7 @@ Exact author/compute contracts and package-owned author Surfaces for Seedream im
|
|
|
4
4
|
|
|
5
5
|
The two modes are separate Surfaces and project the primary result to an ordinary image Artifact.
|
|
6
6
|
This package defines what the author requested, not where it runs: API translation, credentials,
|
|
7
|
-
retry and queue behavior belong to a selected Runtime Endpoint
|
|
7
|
+
retry and queue behavior belong to a selected Runtime Endpoint selected in the Runtime Profile.
|
|
8
8
|
|
|
9
9
|
The modes stay explicit in the source:
|
|
10
10
|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Sound
|
|
2
|
+
|
|
3
|
+
Sound presents audio already placed on a Timeline. Audio Track takes independent material such as
|
|
4
|
+
music and effects. Sound obtains existing sources and playback positions from Timeline and chooses
|
|
5
|
+
how they are heard. Visual Performance and Caption remain independent presentations.
|
|
6
|
+
|
|
7
|
+
```svml
|
|
8
|
+
<import as="sound" from="@hypit/sound@1"/>
|
|
9
|
+
<sound:Style id="normal"/>
|
|
10
|
+
<sound:Style id="fade-in" gain="0" end-gain="1"/>
|
|
11
|
+
<sound:Style id="silent" gain="0"/>
|
|
12
|
+
<sound:Track id="voice" timeline={program.timeline}>
|
|
13
|
+
<sound:Use style={normal}/>
|
|
14
|
+
<sound:Use at="0f" for="2s" style={fade-in}/>
|
|
15
|
+
<sound:Use during={story.selection.demonstration} style={silent}/>
|
|
16
|
+
</sound:Track>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Include `voice.audio` in Film to hear this presentation. Timeline exports `.timeline`, retaining
|
|
20
|
+
the material for consumers; Sound selects and presents its audio explicitly.
|
|
21
|
+
|
|
22
|
+
Sound also exports `.program`: the ordered Use windows and their audio presentations before
|
|
23
|
+
coverage is resolved. The Studio Companion consumes this value to keep silent and covered Uses
|
|
24
|
+
available for editing. `.audio` remains the effective arrangement for Film.
|
|
25
|
+
|
|
26
|
+
## Two separate choices
|
|
27
|
+
|
|
28
|
+
The last declared matching Use selects the complete presentation locally. No selector means the
|
|
29
|
+
whole Timeline. No matching Use contributes no sound; an empty winning Style remains silent.
|
|
30
|
+
Later Uses can restore sound inside an earlier silent interval. Separate Sound Tracks can coexist.
|
|
31
|
+
|
|
32
|
+
Within the ordinary Style, the last Timeline-declared active source with audio wins. Declaration
|
|
33
|
+
order is independent of start-time order. A video-only Take supplies no sound candidate; a recorded
|
|
34
|
+
silent audio source is still a source. Gaps and zero-Take Timelines have no sound to present. When a
|
|
35
|
+
later source ends, an earlier still-active source resumes at its current source position.
|
|
36
|
+
|
|
37
|
+
`gain` and `end-gain` are linear amplitude multipliers from 0 to 64. `gain` defaults to 1 and
|
|
38
|
+
`end-gain` defaults to `gain`. They describe a linear ramp over the original Use Window. Equal values
|
|
39
|
+
produce constant gain; zero produces silence. Changing the Window changes the ramp duration.
|
|
40
|
+
The interval's right endpoint describes the gain reached at the boundary, while sample coverage is
|
|
41
|
+
half-open. Matching adjacent Style endpoints is an authoring choice.
|
|
42
|
+
|
|
43
|
+
## Time and continuity
|
|
44
|
+
|
|
45
|
+
Use accepts shared `during`, `at` + `for`, `until` + `for`, and `start` + `end`, including independently
|
|
46
|
+
bound `start-source` / `end-source`. A source role and a time endpoint are distinct inputs.
|
|
47
|
+
|
|
48
|
+
A Use starting at program second 7 does not restart a Take placed at second 5: its sound is already
|
|
49
|
+
at source second 2. A partially overridden Use keeps its original gain-ramp progress. Resolution
|
|
50
|
+
intersects audible subranges and preserves original Clip targets, sampling and envelopes. The same
|
|
51
|
+
holds for a partial audio render. Sound does not move Takes, change words or retime semantic anchors.
|
|
52
|
+
|
|
53
|
+
## Write a project Style
|
|
54
|
+
|
|
55
|
+
The public TypeScript entry is `@hypit/hypit/sound`.
|
|
56
|
+
`soundStyle(fragment, bindings)` creates an authored Style. Its fragment takes `timeline` and
|
|
57
|
+
`window`, plus explicitly bound family inputs, and exports `audio: AudioTrack`. Bound references
|
|
58
|
+
become ordinary graph edges at each Use. The fragment may produce an empty Track, one source or
|
|
59
|
+
multiple sources; the renderer consumes the resulting ordinary AudioTrack.
|
|
60
|
+
|
|
61
|
+
`ordinarySound(timeline, window, { gain, endGain })` supplies ordinary last-source presentation.
|
|
62
|
+
`sourceSound(timeline, window, segment, { gain, endGain })` selects one explicit Narrative Segment,
|
|
63
|
+
retaining its existing source and target positions. A known Segment without audio returns an empty
|
|
64
|
+
Track; a foreign or unknown Segment is an error. Neither helper invents sound outside source coverage.
|
|
65
|
+
A family can publish richer program-sample `gainEnvelope` points through the common AudioClip data.
|
|
66
|
+
|
|
67
|
+
The [project crossfade example](../../examples/semantic-composition/packages/sound-styles/README.md)
|
|
68
|
+
binds `outgoing` and `incoming` independently. Its two gains move in opposite directions across the
|
|
69
|
+
Use Window. There is no transition-mode registry or automatic source pairing. Other families can
|
|
70
|
+
own different curves or source combinations through the same fragment interface.
|
|
71
|
+
|
|
72
|
+
## Rendering boundary
|
|
73
|
+
|
|
74
|
+
[Composition](../composition/README.md) owns generic AudioClip presentation fields: optional
|
|
75
|
+
`gainEnvelope` points and `audibility` subranges, both on the complete 48 kHz program clock. Sound
|
|
76
|
+
resolves Uses into those values. The media pipeline preserves them; the execution package applies
|
|
77
|
+
them per sample after source playback and existing fades, before render-range cropping.
|
|
78
|
+
|
|
79
|
+
The [Sound Companion](../sound-studio/README.md) presents placed audio content and authored Uses.
|
|
80
|
+
Studio playback consumes the same gain envelopes, audible regions and fades through its generic
|
|
81
|
+
AudioTrack player.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hypit/sound",
|
|
3
|
+
"version": "0.0.0-dev",
|
|
4
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
5
|
+
"private": true,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./src/index.ts"
|
|
9
|
+
},
|
|
10
|
+
"hypit": {
|
|
11
|
+
"activation": "./src/activation.ts"
|
|
12
|
+
},
|
|
13
|
+
"dependencies": {
|
|
14
|
+
"@hypit/component-kit": "workspace:*",
|
|
15
|
+
"@hypit/composition": "workspace:*",
|
|
16
|
+
"@hypit/elaborator": "workspace:*",
|
|
17
|
+
"@hypit/markup": "workspace:*",
|
|
18
|
+
"@hypit/narrative": "workspace:*",
|
|
19
|
+
"@hypit/program-space": "workspace:*",
|
|
20
|
+
"@hypit/protocol": "workspace:*",
|
|
21
|
+
"@hypit/temporal": "workspace:*",
|
|
22
|
+
"@hypit/temporal-markup": "workspace:*",
|
|
23
|
+
"@hypit/timeline": "workspace:*"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createMarkupSurfaceHostFacet } from "@hypit/markup";
|
|
2
|
+
import { soundManifest, soundModuleRef, soundMarkupSurfaces } from "./manifest.js";
|
|
3
|
+
import { soundComponent } from "./component.js";
|
|
4
|
+
import { decodeSoundStyleSurface, decodeSoundTrackSurface } from "./surface.js";
|
|
5
|
+
export const hypitPackage = {
|
|
6
|
+
format: "hypit.node-package@1" as const,
|
|
7
|
+
modules: [{ manifest: soundManifest }], components: [soundComponent],
|
|
8
|
+
hostFacets: soundMarkupSurfaces.map(declaration => createMarkupSurfaceHostFacet({ module: soundModuleRef, declaration,
|
|
9
|
+
handler: declaration.name === "style" ? decodeSoundStyleSurface : decodeSoundTrackSurface })),
|
|
10
|
+
};
|
|
11
|
+
export default hypitPackage;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { canonicalize } from "@hypit/protocol";
|
|
2
|
+
import type { StoredValue } from "@hypit/protocol";
|
|
3
|
+
import type { ComponentPackage } from "@hypit/component-kit";
|
|
4
|
+
import type { Timeline } from "@hypit/timeline";
|
|
5
|
+
import type { AudioTrack } from "@hypit/composition";
|
|
6
|
+
import type { TemporalWindow } from "@hypit/temporal";
|
|
7
|
+
import { ordinarySound, appendSoundUse, resolveSound } from "./program.js";
|
|
8
|
+
import type { SoundSet, SoundGain } from "./program.js";
|
|
9
|
+
import { soundProducers } from "./manifest.js";
|
|
10
|
+
function inline<T>(value: StoredValue | undefined): T {
|
|
11
|
+
if (value?.kind !== "inline") throw new Error("Sound input must be inline.");
|
|
12
|
+
return value.value as unknown as T;
|
|
13
|
+
}
|
|
14
|
+
const output = (value: unknown) => ({ kind: "inline" as const, value: canonicalize(value) });
|
|
15
|
+
export const soundComponent: ComponentPackage = {
|
|
16
|
+
producers: [
|
|
17
|
+
{ producer: soundProducers.create, handler: () => ({ outputs: { set: output({ uses: [] }) }, needs: {} }) },
|
|
18
|
+
{ producer: soundProducers.append, handler: ({ inputs }) => ({ outputs: { set: output(appendSoundUse(
|
|
19
|
+
inline<SoundSet>(inputs.set?.value), inline<TemporalWindow>(inputs.window?.value), inline<AudioTrack>(inputs.audio?.value),
|
|
20
|
+
)) }, needs: {} }) },
|
|
21
|
+
{ producer: soundProducers.resolve, handler: ({ inputs }) => ({ outputs: { audio: output(resolveSound(
|
|
22
|
+
inline<Timeline>(inputs.timeline?.value), inline<{ id: string }>(inputs.header?.value).id, inline<SoundSet>(inputs.set?.value),
|
|
23
|
+
)) }, needs: {} }) },
|
|
24
|
+
{ producer: soundProducers.ordinary, handler: ({ inputs }) => ({ outputs: { audio: output(ordinarySound(
|
|
25
|
+
inline<Timeline>(inputs.timeline?.value), inline<TemporalWindow>(inputs.window?.value), inline<SoundGain>(inputs.spec?.value),
|
|
26
|
+
)) }, needs: {} }) },
|
|
27
|
+
],
|
|
28
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { compositionDependency, compositionTypes } from "@hypit/composition";
|
|
2
|
+
import { timelineDependency, timelineTypes } from "@hypit/timeline";
|
|
3
|
+
import { temporalDependency, temporalTypes } from "@hypit/temporal";
|
|
4
|
+
import { temporalWindowAttributeVocabulary } from "@hypit/temporal-markup";
|
|
5
|
+
import type { ModuleManifest, ProducerRef, TypeRef } from "@hypit/protocol";
|
|
6
|
+
|
|
7
|
+
export const soundModuleRef = { name: "@hypit/sound", version: "1" } as const;
|
|
8
|
+
export const soundTypes = Object.fromEntries(["Style", "Set", "Header", "Gain"].map(name => [name.toLowerCase(), { module: soundModuleRef, name: `Sound${name}` }])) as Record<"style" | "set" | "header" | "gain", TypeRef>;
|
|
9
|
+
export const soundProducers = Object.fromEntries(["create", "append", "resolve", "ordinary"].map(name => [name, { module: soundModuleRef, name }])) as Record<"create" | "append" | "resolve" | "ordinary", ProducerRef>;
|
|
10
|
+
export const ordinaryInputs = [
|
|
11
|
+
{ name: "timeline", type: timelineTypes.track }, { name: "window", type: temporalTypes.window },
|
|
12
|
+
{ name: "spec", type: soundTypes.gain },
|
|
13
|
+
];
|
|
14
|
+
export const soundManifest: ModuleManifest = {
|
|
15
|
+
format: "hypit.module@1", ...soundModuleRef,
|
|
16
|
+
dependencies: [compositionDependency, timelineDependency, temporalDependency],
|
|
17
|
+
types: Object.values(soundTypes).map(type => ({ name: type.name })), capabilities: [],
|
|
18
|
+
producers: [
|
|
19
|
+
{ name: "create", inputs: [], outputs: [{ name: "set", type: soundTypes.set }], needs: [] },
|
|
20
|
+
{ name: "append", inputs: [{ name: "set", type: soundTypes.set }, { name: "window", type: temporalTypes.window }, { name: "audio", type: compositionTypes.audioTrack }], outputs: [{ name: "set", type: soundTypes.set }], needs: [] },
|
|
21
|
+
{ name: "resolve", inputs: [{ name: "set", type: soundTypes.set }, { name: "timeline", type: timelineTypes.track }, { name: "header", type: soundTypes.header }], outputs: [{ name: "audio", type: compositionTypes.audioTrack }], needs: [] },
|
|
22
|
+
{ name: "ordinary", inputs: ordinaryInputs, outputs: [{ name: "audio", type: compositionTypes.audioTrack }], needs: [] },
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
export const soundMarkupSurfaces = [
|
|
26
|
+
{ name: "style", tag: "Style", mode: "structured", outputs: [soundTypes.style, soundTypes.gain], vocabulary: {
|
|
27
|
+
summary: "Presents existing Timeline sound, choosing the last declared active audio source. Gain may change linearly across each Use.",
|
|
28
|
+
example: `<sound:Style id="fade-in" gain="0" end-gain="1"/>`,
|
|
29
|
+
attributes: [
|
|
30
|
+
{ name: "id", kind: "identifier", required: true, summary: "Style name." },
|
|
31
|
+
{ name: "gain", kind: "literal", required: false, summary: "Linear gain at the beginning of a Use; defaults to 1. Zero silences the presentation." },
|
|
32
|
+
{ name: "end-gain", kind: "literal", required: false, summary: "Linear gain at the end of a Use; defaults to gain. The original Use interval owns the ramp." },
|
|
33
|
+
],
|
|
34
|
+
} },
|
|
35
|
+
{ name: "track", tag: "Track", mode: "structured", outputs: [compositionTypes.audioTrack, soundTypes.set, soundTypes.header, temporalTypes.instantSpec, temporalTypes.windowSpec, temporalTypes.instant, temporalTypes.window], vocabulary: {
|
|
36
|
+
summary: "Presents Timeline sound through ordered Uses. Later Uses replace earlier presentation locally without restarting source playback or gain curves.",
|
|
37
|
+
example: `<sound:Track id="voice" timeline={program.timeline}><sound:Use style={normal}/><sound:Use at="0f" for="2s" style={fade-in}/></sound:Track>`,
|
|
38
|
+
attributes: [
|
|
39
|
+
{ name: "id", kind: "identifier", required: true, summary: "Sound presentation name." },
|
|
40
|
+
{ name: "timeline", kind: "reference", required: true, accepts: [timelineTypes.track], summary: "Complete film time and placed sources." },
|
|
41
|
+
], children: [{ tag: "Use", cardinality: "many", summary: "Last matching Use wins, including silence. No time selector covers the complete Timeline.", attributes: [
|
|
42
|
+
{ name: "id", kind: "identifier", required: false, summary: "Optional occurrence identity." },
|
|
43
|
+
{ name: "style", kind: "reference", required: true, accepts: [soundTypes.style], summary: "Ordinary or project-authored sound Style. Explicit source bindings belong to the Style." },
|
|
44
|
+
...temporalWindowAttributeVocabulary,
|
|
45
|
+
] }],
|
|
46
|
+
} },
|
|
47
|
+
] as const;
|