@hypit/hypit 0.1.4 → 0.1.6
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 +4 -2
- 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 +77 -15
- 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 +8 -1
- package/examples/semantic-composition/chat.svml +6 -5
- package/examples/semantic-composition/hypit.runtime.json +1 -1
- 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 +28 -17
- 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 +11 -0
- package/packages/build-result/src/decode.ts +2 -0
- package/packages/build-result/src/execution-log.ts +17 -0
- package/packages/build-result/src/index.ts +1 -0
- package/packages/build-result/src/store.ts +14 -1
- package/packages/build-result/src/types.ts +3 -0
- package/packages/build-result-s3/src/repository.ts +4 -0
- 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 +21 -9
- 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 +26 -17
- package/packages/caption-fine/src/recipe.ts +7 -0
- package/packages/caption-fine/src/render.ts +14 -13
- 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 +3 -1
- package/packages/caption-fine-studio/src/activation.ts +3 -3
- package/packages/caption-fine-studio/src/index.ts +54 -42
- package/packages/cli/README.md +57 -4
- package/packages/cli/package.json +1 -0
- package/packages/cli/src/arguments.ts +25 -6
- package/packages/cli/src/build-planning.ts +3 -2
- package/packages/cli/src/command.ts +6 -0
- package/packages/cli/src/commands/environment.ts +28 -18
- 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 +3 -2
- package/packages/cli/src/main.ts +34 -42
- package/packages/cli/src/observation.ts +7 -1
- package/packages/cli/src/output.ts +65 -23
- package/packages/cli/src/view.ts +66 -19
- 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/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/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 +10 -7
- 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/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 +16 -11
- 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/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 +22 -26
- package/packages/ranking/src/schedule.ts +16 -19
- package/packages/ranking/src/surface.ts +12 -13
- package/packages/ranking-studio/README.md +18 -0
- package/packages/ranking-studio/src/index.ts +61 -9
- 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/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 +24 -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 +109 -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 +2 -1
- package/packages/runtime-local/src/result-writer.ts +2 -0
- package/packages/runtime-local/src/runtime.ts +8 -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 +30 -5
- package/packages/script/src/manifest.ts +4 -3
- package/packages/script/src/narrative.ts +1 -0
- package/packages/script/src/parser.ts +45 -6
- package/packages/script/src/surface.ts +4 -3
- package/packages/script/src/types.ts +1 -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 +7 -1
- 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/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 +15 -2
- package/packages/studio/LOCALIZATION.md +98 -0
- package/packages/studio/README.md +101 -14
- package/packages/studio/locales/en.json +197 -0
- package/packages/studio/locales/zh-CN.json +191 -0
- package/packages/studio/package.json +8 -7
- 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/localization-node.ts +46 -0
- package/packages/studio/src/localization.ts +85 -0
- package/packages/studio/src/parameter-values.ts +43 -1
- package/packages/studio/src/parameters.ts +114 -24
- 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 +10 -6
- package/packages/studio/src/shared.ts +4 -2
- package/packages/studio/src/snapshot.ts +21 -132
- package/packages/studio/src/studio-preflight.ts +3 -3
- package/packages/studio/src/studio-registry.ts +50 -6
- package/packages/studio/src/style.css +223 -50
- package/packages/studio/src/ui/artifact-name.ts +8 -6
- package/packages/studio/src/ui/artifact-preview.ts +5 -4
- package/packages/studio/src/ui/code.ts +17 -16
- package/packages/studio/src/ui/comments.ts +234 -0
- package/packages/studio/src/ui/dropdown.ts +68 -0
- package/packages/studio/src/ui/i18n.ts +109 -0
- package/packages/studio/src/ui/icons.ts +6 -0
- package/packages/studio/src/ui/library.ts +76 -65
- package/packages/studio/src/ui/main.ts +223 -211
- package/packages/studio/src/ui/overlay.ts +12 -8
- package/packages/studio/src/ui/scrub-preview.ts +110 -0
- package/packages/studio/src/ui/stage.ts +93 -29
- package/packages/studio/src/ui/timeline.ts +190 -118
- package/packages/studio/start.ts +41 -22
- package/packages/studio-adapter/README.md +130 -11
- package/packages/studio-adapter/src/index.ts +100 -13
- 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 +2 -2
- package/packages/temporal-markup/README.md +27 -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/video-cli/README.md +4 -1
- package/packages/video-cli/package.json +2 -1
- package/packages/video-cli/src/creation.ts +14 -4
- 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 +1 -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
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import type { Timeline } from "@hypit/timeline";
|
|
1
2
|
import { assertVisualTrackIdentity, sealVisualTrack } from "@hypit/composition";
|
|
2
3
|
import type { VisualAnimation, VisualElement, VisualTrack } from "@hypit/composition";
|
|
3
4
|
import { assertProgramSpaceIdentity } from "@hypit/program-space";
|
|
4
|
-
import type { ProgramSpace } from "@hypit/program-space";
|
|
5
5
|
import { canonicalize } from "@hypit/protocol";
|
|
6
6
|
import type { BlobRef } from "@hypit/protocol";
|
|
7
7
|
import { assertCanvasSpace } from "@hypit/spatial";
|
|
@@ -67,11 +67,11 @@ export function assertEmojiRevealSet(value: EmojiRevealSet): void {
|
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export function appendEmojiRevealItem(set: EmojiRevealSet,
|
|
71
|
-
assertEmojiRevealSet(set); assertProgramSpaceIdentity(
|
|
70
|
+
export function appendEmojiRevealItem(set: EmojiRevealSet, timeline: Timeline, spec: EmojiRevealItemSpec, icon: BlobRef, activation: TemporalInstant): EmojiRevealSet {
|
|
71
|
+
assertEmojiRevealSet(set); assertProgramSpaceIdentity(timeline); assertEmojiRevealItemSpec(spec);
|
|
72
72
|
assert(!spec.preset, `Emoji Reveal Item ${spec.id} with preset=true cannot have an activation.`);
|
|
73
73
|
assertIconImage(icon, `Emoji Reveal Item ${spec.id} icon`);
|
|
74
|
-
assertTemporalInstantFor(activation, { subjectId: spec.id, space });
|
|
74
|
+
assertTemporalInstantFor(activation, { subjectId: spec.id, space: timeline });
|
|
75
75
|
assert(!set.items.some((item) => item.spec.id === spec.id), `Duplicate Emoji Reveal Item ${spec.id}.`);
|
|
76
76
|
return { items: [...set.items, { spec: structuredClone(spec), icon: structuredClone(icon), activation: structuredClone(activation) }] };
|
|
77
77
|
}
|
|
@@ -85,11 +85,11 @@ export function appendPresetEmojiRevealItem(set: EmojiRevealSet, spec: EmojiReve
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
export function finalizeEmojiReveal(
|
|
88
|
-
header: EmojiRevealHeader,
|
|
88
|
+
header: EmojiRevealHeader, timeline: Timeline, outer: TemporalWindow, style: EmojiRevealStyle, placeholder: BlobRef, set: EmojiRevealSet,
|
|
89
89
|
): EmojiRevealProgram {
|
|
90
|
-
assertEmojiRevealHeader(header); assertProgramSpaceIdentity(
|
|
90
|
+
assertEmojiRevealHeader(header); assertProgramSpaceIdentity(timeline); assertEmojiRevealStyle(style); assertEmojiRevealSet(set);
|
|
91
91
|
assertIconImage(placeholder, "Emoji Reveal placeholder");
|
|
92
|
-
assertTemporalWindowFor(outer, { subjectId: header.id, space });
|
|
92
|
+
assertTemporalWindowFor(outer, { subjectId: header.id, space: timeline });
|
|
93
93
|
assert(set.items.length > 0, "Emoji Reveal requires at least one Item.");
|
|
94
94
|
let previous = outer.span.startFrame - 1;
|
|
95
95
|
let revealStarted = false;
|
|
@@ -106,7 +106,7 @@ export function finalizeEmojiReveal(
|
|
|
106
106
|
previous = frame;
|
|
107
107
|
}
|
|
108
108
|
const program: EmojiRevealProgram = {
|
|
109
|
-
id: header.id, programSpaceId:
|
|
109
|
+
id: header.id, programSpaceId: timeline.id, outer: structuredClone(outer), style: structuredClone(style),
|
|
110
110
|
placeholder: structuredClone(placeholder), items: structuredClone(set.items),
|
|
111
111
|
};
|
|
112
112
|
assertEmojiRevealProgram(program);
|
|
@@ -183,10 +183,10 @@ function iconElement(input: {
|
|
|
183
183
|
};
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
export function renderEmojiReveal(canvas: CanvasSpace,
|
|
187
|
-
assertCanvasSpace(canvas); assertProgramSpaceIdentity(
|
|
188
|
-
assert(program.programSpaceId ===
|
|
189
|
-
assertTemporalWindowFor(program.outer, { subjectId: program.id, space });
|
|
186
|
+
export function renderEmojiReveal(canvas: CanvasSpace, timeline: Timeline, program: EmojiRevealProgram): VisualTrack {
|
|
187
|
+
assertCanvasSpace(canvas); assertProgramSpaceIdentity(timeline); assertEmojiRevealProgram(program);
|
|
188
|
+
assert(program.programSpaceId === timeline.id, "EmojiRevealProgram belongs to another Timeline.");
|
|
189
|
+
assertTemporalWindowFor(program.outer, { subjectId: program.id, space: timeline });
|
|
190
190
|
const { style } = program;
|
|
191
191
|
const count = program.items.length;
|
|
192
192
|
const width = style.paddingXPx * 2 + style.slotSizePx * count + style.gapPx * (count - 1);
|
|
@@ -234,9 +234,9 @@ export function renderEmojiReveal(canvas: CanvasSpace, space: ProgramSpace, prog
|
|
|
234
234
|
);
|
|
235
235
|
});
|
|
236
236
|
const track = sealVisualTrack({
|
|
237
|
-
programSpaceId:
|
|
237
|
+
programSpaceId: timeline.id, visualIr: "hypit.visual-ir@1", id: program.id,
|
|
238
238
|
presents: [{ id: program.id, subjectId: program.id, span: { ...program.outer.span },
|
|
239
239
|
stacking: { order: style.stackingOrder, tieBreak: program.id }, elements }],
|
|
240
240
|
});
|
|
241
|
-
assertVisualTrackIdentity(track,
|
|
241
|
+
assertVisualTrackIdentity(track, timeline); return track;
|
|
242
242
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveTemporalContext } from "@hypit/temporal-markup";
|
|
2
2
|
import {
|
|
3
3
|
assertAttributes, assertEmptyElement, optionalTextAttribute, textAttribute, type MarkupAttributeValue, type StructuredSurfaceHandler,
|
|
4
4
|
type SurfaceComponentDraft, type SurfaceRecordDraft, type SurfaceResolvedReference,
|
|
@@ -48,24 +48,23 @@ export const decodeEmojiRevealStyleSurface: StructuredSurfaceHandler = ({ elemen
|
|
|
48
48
|
};
|
|
49
49
|
|
|
50
50
|
export const decodeEmojiRevealTrackSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
|
|
51
|
-
assertAttributes(element, ["id", "
|
|
51
|
+
assertAttributes(element, ["id", "timeline", "canvas", "style", "placeholder", ...temporalWindowAttributeNames]);
|
|
52
52
|
const id = textAttribute(element, "id");
|
|
53
53
|
const context = resolveTemporalContext({ element, resolveReference });
|
|
54
|
-
const time = createTemporalSpace({ id: id, element, ...context });
|
|
55
54
|
const canvas = reference(element.attributes.canvas, `${element.name}.canvas`, spatialTypes.canvas, resolveReference);
|
|
56
55
|
const style = reference(element.attributes.style, `${element.name}.style`, emojiRevealTypes.style, resolveReference);
|
|
57
56
|
const placeholder = reference(element.attributes.placeholder, `${element.name}.placeholder`, artifactTypes.blob, resolveReference);
|
|
58
|
-
const outer = createTemporalWindowProjection({ id, subjectId: id, element, ...context,
|
|
57
|
+
const outer = createTemporalWindowProjection({ id, subjectId: id, element, ...context, resolveReference });
|
|
59
58
|
const headerId = `${id}.header`;
|
|
60
59
|
const records: SurfaceRecordDraft[] = [...outer.records, {
|
|
61
60
|
id: headerId, type: emojiRevealTypes.header,
|
|
62
61
|
value: { kind: "inline", value: sealEmojiRevealHeader({ id }) as unknown as CanonicalValue }, range: element.range,
|
|
63
62
|
}];
|
|
64
|
-
const temporalComponents: SurfaceComponentDraft[] = [...
|
|
65
|
-
const temporalFragments = [...
|
|
63
|
+
const temporalComponents: SurfaceComponentDraft[] = [...outer.components];
|
|
64
|
+
const temporalFragments = [...outer.fragments];
|
|
66
65
|
const items: { specName: string; iconName: string; activationName?: string }[] = [];
|
|
67
|
-
const inputs: Record<string, typeof
|
|
68
|
-
header: { kind: "record", id: headerId },
|
|
66
|
+
const inputs: Record<string, typeof context.timeline.ref> = {
|
|
67
|
+
header: { kind: "record", id: headerId }, timeline: context.timeline.ref, canvas: canvas.ref, style: style.ref,
|
|
69
68
|
placeholder: placeholder.ref, outer: outer.ref,
|
|
70
69
|
};
|
|
71
70
|
const ids = new Set<string>();
|
|
@@ -92,7 +91,7 @@ export const decodeEmojiRevealTrackSurface: StructuredSurfaceHandler = ({ elemen
|
|
|
92
91
|
else {
|
|
93
92
|
const activation = createTemporalInstantProjection({
|
|
94
93
|
id: `${id}.item.${suffix}.activation`, subjectId: itemId,
|
|
95
|
-
element: child, ...context,
|
|
94
|
+
element: child, ...context, resolveReference, semanticAttribute: "at", projectedAttribute: false,
|
|
96
95
|
});
|
|
97
96
|
records.push(...activation.records); temporalComponents.push(...activation.components); temporalFragments.push(...activation.fragments);
|
|
98
97
|
const activationName = `item-${suffix}-activation`;
|
|
@@ -20,9 +20,13 @@ owns the byte-level implementations of the eight current operations:
|
|
|
20
20
|
- render an exact sample-domain audio program;
|
|
21
21
|
- mux rendered visual and audio products.
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
instead of reimplementing media semantics per deployment.
|
|
23
|
+
The local Provider calls these functions with its Artifact I/O and FFmpeg launch environment. Other
|
|
24
|
+
deployments can reuse the same functions to preserve stream selection, timing, codec and validation behavior.
|
|
26
25
|
|
|
27
26
|
This is not an author package, Provider, queue or Core extension. It performs no endpoint selection,
|
|
28
27
|
credential lookup or SVML parsing.
|
|
28
|
+
|
|
29
|
+
Audio gain envelopes and audible subranges are evaluated per sample after tempo/looping and Clip
|
|
30
|
+
fades, before the requested range is cropped. Original source and envelope progress therefore survive
|
|
31
|
+
local silence and range rendering. This is generic AudioProgramPlan execution, independent of author
|
|
32
|
+
component or Style names.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { AudioProgramClip } from "@hypit/media-pipeline";
|
|
2
|
+
|
|
3
|
+
/** Per-sample gain after source playback/fades, before any requested render-range crop. */
|
|
4
|
+
export function audioPresentationFilter(clip: AudioProgramClip): string[] {
|
|
5
|
+
if (clip.gainEnvelope === undefined && clip.audibility === undefined) return [];
|
|
6
|
+
const sample = `(n+${clip.targetStartSample})`;
|
|
7
|
+
let gain = "1";
|
|
8
|
+
const points = clip.gainEnvelope;
|
|
9
|
+
if (points !== undefined) {
|
|
10
|
+
gain = String(points.at(-1)!.gain);
|
|
11
|
+
for (let index = points.length - 1; index > 0; index--) {
|
|
12
|
+
const left = points[index - 1]!, right = points[index]!;
|
|
13
|
+
const line = `(${left.gain}+(${right.gain}-${left.gain})*(${sample}-${left.sample})/${right.sample-left.sample})`;
|
|
14
|
+
gain = `if(lt(${sample},${right.sample}),${line},${gain})`;
|
|
15
|
+
}
|
|
16
|
+
gain = `if(lt(${sample},${points[0]!.sample}),${points[0]!.gain},${gain})`;
|
|
17
|
+
}
|
|
18
|
+
if (clip.audibility !== undefined) {
|
|
19
|
+
const active = clip.audibility.map(span => `(gte(${sample},${span.startSample})*lt(${sample},${span.endSampleExclusive}))`).join("+") || "0";
|
|
20
|
+
gain = `(${gain})*(${active})`;
|
|
21
|
+
}
|
|
22
|
+
return [`aeval=exprs='val(0)*(${gain})|val(1)*(${gain})'`];
|
|
23
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { audioPresentationFilter } from "./audio-presentation.js";
|
|
1
2
|
import { spawn } from "node:child_process";
|
|
2
3
|
import { randomUUID } from "node:crypto";
|
|
3
4
|
import { createReadStream } from "node:fs";
|
|
@@ -556,6 +557,7 @@ function audioClipFilter(clip: AudioProgramClip, inputIndex: number, outputIndex
|
|
|
556
557
|
...(clip.fadeOutSamples === 0 ? [] : [
|
|
557
558
|
`afade=t=out:start_sample=${length - clip.fadeOutSamples}:nb_samples=${clip.fadeOutSamples}`,
|
|
558
559
|
]),
|
|
560
|
+
...audioPresentationFilter(clip),
|
|
559
561
|
// Crop after tempo, looping and envelopes, keeping their original phase.
|
|
560
562
|
`atrim=start_sample=${left - clip.targetStartSample}:end_sample=${right - clip.targetStartSample}`,
|
|
561
563
|
"asetpts=N/SR/TB",
|
|
@@ -37,7 +37,7 @@ This package is the shared execution vocabulary. Speech authoring makes the boun
|
|
|
37
37
|
alignment produce one `SemanticTake`. Media Track consumes that prepared value; it never owns an
|
|
38
38
|
implicit visual-only normalization policy.
|
|
39
39
|
|
|
40
|
-
The frame clock is a separate program fact and can be shared by every Normalize and
|
|
40
|
+
The frame clock is a separate program fact and can be shared by every Normalize and Timeline assembly:
|
|
41
41
|
|
|
42
42
|
```svml
|
|
43
43
|
<program:Clock id="clock" frame-rate="30"/>
|
|
@@ -109,5 +109,9 @@ RenderedVisual + TimelineAudio -> mux-program-media Need -> MuxedMedia
|
|
|
109
109
|
Compiling an `AudioProgramPlan` is ordinary deterministic code. Reading Artifact bytes, decoding,
|
|
110
110
|
resampling, mixing, encoding or muxing is never a Producer shortcut: it is an explicit Provider
|
|
111
111
|
Need. The plan fixes exact 48 kHz sample boundaries, gain/fade/playback parameters and the absence
|
|
112
|
-
of hidden normalization/limiting. The local FFmpeg
|
|
113
|
-
|
|
112
|
+
of hidden normalization/limiting. The local FFmpeg Provider consumes the shared execution body. Other Providers implement the same
|
|
113
|
+
public request and result semantics.
|
|
114
|
+
|
|
115
|
+
AudioProgramPlan preserves AudioClip `gainEnvelope` and `audibility` on the full program sample
|
|
116
|
+
clock. The [Composition definition](../composition/README.md#audio-presentation-on-the-program-clock)
|
|
117
|
+
owns their semantics; the plan does not reinterpret source choice or presentation precedence.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { programFrameSampleBoundary, programSpaceFrameCount } from "@hypit/program-space";
|
|
2
2
|
import type { ProgramSpace } from "@hypit/program-space";
|
|
3
|
-
import { assertCompositionIdentity } from "@hypit/composition";
|
|
3
|
+
import { assertCompositionIdentity, assertAudioPresentation } from "@hypit/composition";
|
|
4
4
|
import type { Composition } from "@hypit/composition";
|
|
5
5
|
import { canonicalize, isResourceId } from "@hypit/protocol";
|
|
6
6
|
|
|
@@ -62,6 +62,7 @@ export function verifyAudioProgramPlan(value: unknown): asserts value is AudioPr
|
|
|
62
62
|
assert(clip.pitch === "preserve", `AudioProgramPlan clip ${clip.id} pitch policy is invalid`);
|
|
63
63
|
assert(Number.isFinite(clip.gain) && clip.gain >= 0 && clip.gain <= 64,
|
|
64
64
|
`AudioProgramPlan clip ${clip.id} gain is invalid`);
|
|
65
|
+
assertAudioPresentation(clip, { startSample: clip.targetStartSample, endSampleExclusive: clip.targetEndSampleExclusive }, item.sampleFrames);
|
|
65
66
|
const length = clip.targetEndSampleExclusive - clip.targetStartSample;
|
|
66
67
|
assert(Number.isSafeInteger(clip.fadeInSamples) && clip.fadeInSamples >= 0 && clip.fadeInSamples <= length
|
|
67
68
|
&& Number.isSafeInteger(clip.fadeOutSamples) && clip.fadeOutSamples >= 0 && clip.fadeOutSamples <= length,
|
|
@@ -100,6 +101,8 @@ export function compileAudioProgramPlan(composition: Composition, programSpace:
|
|
|
100
101
|
gain: clip.gain,
|
|
101
102
|
fadeInSamples: clip.fadeInSamples,
|
|
102
103
|
fadeOutSamples: clip.fadeOutSamples,
|
|
104
|
+
...(clip.gainEnvelope === undefined ? {} : { gainEnvelope: clip.gainEnvelope }),
|
|
105
|
+
...(clip.audibility === undefined ? {} : { audibility: clip.audibility }),
|
|
103
106
|
};
|
|
104
107
|
}));
|
|
105
108
|
return sealAudioProgramPlan({
|
|
@@ -66,6 +66,7 @@ function plannedMediaNeed(
|
|
|
66
66
|
port: string,
|
|
67
67
|
capability: CapabilityRef,
|
|
68
68
|
roles: Readonly<Record<string, string>> = {},
|
|
69
|
+
present?: PlannedNeedFacet["present"],
|
|
69
70
|
): PlannedNeedFacet {
|
|
70
71
|
return {
|
|
71
72
|
producer,
|
|
@@ -75,6 +76,7 @@ function plannedMediaNeed(
|
|
|
75
76
|
return { constraints: {}, pendingInputs: plannedNeedInputs(state, step, roles) };
|
|
76
77
|
},
|
|
77
78
|
present(specification) {
|
|
79
|
+
if (present !== undefined) return present(specification);
|
|
78
80
|
const references: Record<string, number> = {};
|
|
79
81
|
for (const item of specification.pendingInputs) {
|
|
80
82
|
const role = item.role;
|
|
@@ -86,6 +88,18 @@ function plannedMediaNeed(
|
|
|
86
88
|
};
|
|
87
89
|
}
|
|
88
90
|
|
|
91
|
+
const presentAudioRender: NonNullable<PlannedNeedFacet["present"]> = (specification) => {
|
|
92
|
+
const request = specification.constraints as Partial<RenderAudioNeed>;
|
|
93
|
+
if (request.plan === undefined) return { fields: {}, references: {} };
|
|
94
|
+
const { plan, range } = request;
|
|
95
|
+
return { fields: {
|
|
96
|
+
startFrame: [range?.startFrame ?? 0],
|
|
97
|
+
endFrameExclusive: [range?.endFrameExclusive ?? plan.frameCount],
|
|
98
|
+
frameRate: [`${plan.frameRate.numerator}/${plan.frameRate.denominator}`],
|
|
99
|
+
sampleRate: [plan.sampleRate],
|
|
100
|
+
}, references: {} };
|
|
101
|
+
};
|
|
102
|
+
|
|
89
103
|
export const mediaPipelineComponent = {
|
|
90
104
|
validators: [
|
|
91
105
|
{
|
|
@@ -363,8 +377,8 @@ export const mediaPipelineComponent = {
|
|
|
363
377
|
mediaPipelineCapabilities.projectSpeechEvidenceAudio,
|
|
364
378
|
{ media: "audio" },
|
|
365
379
|
),
|
|
366
|
-
plannedMediaNeed(mediaPipelineProducers.renderAudio, "audio", mediaPipelineCapabilities.renderAudio, {
|
|
367
|
-
plannedMediaNeed(mediaPipelineProducers.renderAudioRange, "audio", mediaPipelineCapabilities.renderAudio, {
|
|
380
|
+
plannedMediaNeed(mediaPipelineProducers.renderAudio, "audio", mediaPipelineCapabilities.renderAudio, {}, presentAudioRender),
|
|
381
|
+
plannedMediaNeed(mediaPipelineProducers.renderAudioRange, "audio", mediaPipelineCapabilities.renderAudio, {}, presentAudioRender),
|
|
368
382
|
plannedMediaNeed(mediaPipelineProducers.mux, "media", mediaPipelineCapabilities.mux, { visual: "video", audio: "audio" }),
|
|
369
383
|
],
|
|
370
384
|
} satisfies ComponentPackage;
|
|
@@ -3,7 +3,7 @@ import { mediaDependency, mediaTypes } from "@hypit/media";
|
|
|
3
3
|
import { programSpaceDependency, programSpaceTypes } from "@hypit/program-space";
|
|
4
4
|
import { svsModuleRef, svsRecipeType } from "@hypit/svs";
|
|
5
5
|
import { speechDependency, speechTypes } from "@hypit/speech";
|
|
6
|
-
import { compositionDependency, compositionTypes } from "@hypit/composition";
|
|
6
|
+
import { compositionDependency, compositionTypes, audioSampleSpanSchema, audioGainEnvelopeSchema } from "@hypit/composition";
|
|
7
7
|
import { artifactTypes } from "@hypit/artifact";
|
|
8
8
|
import type {
|
|
9
9
|
CapabilityRef,
|
|
@@ -237,6 +237,8 @@ export const audioProgramPlanSchema: ValueSchema = {
|
|
|
237
237
|
gain: { schema: { kind: "number", minimum: 0, maximum: 64 } },
|
|
238
238
|
fadeInSamples: { schema: integer },
|
|
239
239
|
fadeOutSamples: { schema: integer },
|
|
240
|
+
gainEnvelope: { schema: audioGainEnvelopeSchema, optional: true },
|
|
241
|
+
audibility: { schema: { kind: "array", items: audioSampleSpanSchema }, optional: true },
|
|
240
242
|
},
|
|
241
243
|
} } },
|
|
242
244
|
mix: { schema: {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { AudioPresentation } from "@hypit/composition";
|
|
1
2
|
import type { BlobRef } from "@hypit/protocol";
|
|
2
3
|
import type { MediaFrameRange, MediaInspection, MediaRational, MediaStreamSelection, RenderedVisual, TimelineAudio } from "@hypit/media";
|
|
3
4
|
|
|
@@ -134,7 +135,7 @@ export type ProjectSpeechEvidenceAudioNeed = {
|
|
|
134
135
|
readonly evidenceSampleFrames: number;
|
|
135
136
|
};
|
|
136
137
|
|
|
137
|
-
export type AudioProgramClip = {
|
|
138
|
+
export type AudioProgramClip = AudioPresentation & {
|
|
138
139
|
readonly id: string;
|
|
139
140
|
readonly artifact: BlobRef;
|
|
140
141
|
readonly targetStartSample: number;
|
|
@@ -1,61 +1,28 @@
|
|
|
1
1
|
# `@hypit/media-track`
|
|
2
2
|
|
|
3
|
-
The Track Surface accepts `
|
|
4
|
-
|
|
3
|
+
The Track Surface accepts `timeline={program.timeline}`. The same Timeline supports authored
|
|
4
|
+
positions and, where prepared Takes supply evidence, Script Selections and Moments. Shared `at`
|
|
5
5
|
inputs accept a Moment or a time such as `2s`; `at` with `for` produces a Window where required.
|
|
6
|
-
|
|
6
|
+
[Performance](../performance/README.md) separately obtains existing footage and source positions from Timeline.
|
|
7
7
|
|
|
8
8
|
Place images, prepared video or compositable surfaces over the semantic timeline. B-roll is a common
|
|
9
|
-
use: the picture can illustrate a phrase while the A-roll's speech continues.
|
|
9
|
+
use: the picture can illustrate a phrase while the A-roll's speech continues.
|
|
10
10
|
Media Items own independently timed pictures;
|
|
11
11
|
a Sequence owns one visual slot whose Members replace each other through Handoffs.
|
|
12
12
|
|
|
13
|
-
The Markup Track takes `canvas` and
|
|
13
|
+
The Markup Track takes `canvas` and `timeline`. Its Surface projects
|
|
14
14
|
authored Selections, Moments, Segments or clock expressions into Windows and Instants. The component
|
|
15
|
-
consumes those projected times with Frames, media and appearance; its Fragment receives
|
|
15
|
+
consumes those projected times with Frames, media and appearance; its Fragment receives the same Timeline.
|
|
16
16
|
|
|
17
17
|
Moving media enters after [normalization](../media-pipeline/README.md), with the intended streams and
|
|
18
18
|
frame clock already selected. Still images use their actual intrinsic Extent. Placement, fitting,
|
|
19
19
|
sampling and motion remain separate authored choices.
|
|
20
20
|
|
|
21
|
-
##
|
|
21
|
+
## Present existing Timeline footage
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
appearance={look.performance}/>
|
|
27
|
-
</media:Track>
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
`Performance` displays the prepared material in its enclosing Track's `semantic` input. `during`
|
|
31
|
-
selects the whole program, a Segment or a Selection; the other Window forms work as usual. One
|
|
32
|
-
Performance can span any number of Takes. Each plays at its original program position: if a Take
|
|
33
|
-
begins at program second 5, a Window from seconds 7 to 10 shows source seconds 2 to 5. An audio-only
|
|
34
|
-
interval contributes no picture. The presentation shares one frame, appearance and lifecycle across
|
|
35
|
-
Take boundaries.
|
|
36
|
-
|
|
37
|
-
Its appearance Recipe needs `stack-order` and can set fit, crop anchors, opacity, filters, clipping,
|
|
38
|
-
padding, border, shadow and frame paint. `motion` moves the framed presentation, and `Sampling`
|
|
39
|
-
children transform the fitted picture over the complete selected Window, without restarting at
|
|
40
|
-
Take boundaries. `Sound` children attach prepared effects to its entrance or exit. Its original
|
|
41
|
-
sound is independently available as `speech.audio` for Film. Use an Item with direct `media` for
|
|
42
|
-
independent playback or source trim; Performance preserves the semantic assembly's source timing.
|
|
43
|
-
|
|
44
|
-
```svml
|
|
45
|
-
<media:Performance during={story.segment.explanation} frame={layout.full}
|
|
46
|
-
appearance={look.performance}>
|
|
47
|
-
<media:Sampling at="start" zoom="1"/>
|
|
48
|
-
<media:Sampling at="end" zoom="1.08"/>
|
|
49
|
-
</media:Performance>
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
This excerpt belongs inside the same Media Track. Its selected passage determines the appearance
|
|
53
|
-
interval, while the two Sampling keys direct a gradual push-in inside the unchanged Frame.
|
|
54
|
-
|
|
55
|
-
For a fixed card, full picture, circle or cutout this is ordinary Media presentation. If video and
|
|
56
|
-
graphics must resize, mask or move together, write a project component that owns that relationship.
|
|
57
|
-
`projectSemanticMedia` supplies the same material spans to its drawing function. The component can
|
|
58
|
-
use a browser program from `@hypit/hypit/hyperframes` while Caption and independent overlays remain peers.
|
|
23
|
+
[Performance](../performance/README.md) obtains existing footage from Timeline and applies broad
|
|
24
|
+
and local Use rules. Use Media Items here for independently supplied assets and playback choices.
|
|
25
|
+
Both reuse the same geometry and fitting capabilities.
|
|
59
26
|
|
|
60
27
|
## Place the frame, then fit its contents
|
|
61
28
|
|
|
@@ -115,10 +82,10 @@ a deliberate pan or rotation may reveal the backing or lower layers.
|
|
|
115
82
|
## Author Items and replacement Sequences
|
|
116
83
|
|
|
117
84
|
These excerpts assume the imports, named assets, normalized media, Frames, Extents, Script,
|
|
118
|
-
|
|
85
|
+
Timeline and Recipes are already declared:
|
|
119
86
|
|
|
120
87
|
```svml
|
|
121
|
-
<media-track:Track id="coverage"
|
|
88
|
+
<media-track:Track id="coverage" timeline={speech.timeline} canvas={vertical}>
|
|
122
89
|
<media-track:Item image={photo} extent={photo-extent} frame={full-frame}
|
|
123
90
|
during={story.selection.example} appearance={recipes.media.still}/>
|
|
124
91
|
<media-track:Item media={clip-media.media} frame={full-frame}
|
|
@@ -132,7 +99,7 @@ Appearance owns stack order, fit, clipping and source sampling; a `motion` Recip
|
|
|
132
99
|
movement. `Sampling` children can move the sampled content inside the Frame independently.
|
|
133
100
|
|
|
134
101
|
```svml
|
|
135
|
-
<media-track:Track id="cards"
|
|
102
|
+
<media-track:Track id="cards" timeline={speech.timeline} canvas={vertical}>
|
|
136
103
|
<media-track:Sequence id="steps" frame={card-frame} appearance={recipes.media.card}
|
|
137
104
|
until={story.selection.demo} until-boundary="end">
|
|
138
105
|
<media-track:Member id="one" image={first} extent={card-extent}
|
|
@@ -177,7 +144,7 @@ separately controls which source frames it occupies there. `playback` defaults t
|
|
|
177
144
|
`trim-start` and `trim-end` are a pair of integer source-frame boundaries, with an exclusive end.
|
|
178
145
|
Omit both to use the full source. The playback rules apply to the trimmed range when present.
|
|
179
146
|
For `stretch`, the source-frame advance is `sourceLength / targetLength`. For native playback, moving
|
|
180
|
-
media has already been normalized to
|
|
147
|
+
media has already been normalized to Timeline's frame rate, so one program frame advances one
|
|
181
148
|
source frame. These are source sampling choices; they do not move a Selection's semantic boundaries.
|
|
182
149
|
|
|
183
150
|
A two-second Item can use the beginning of a four-second generated clip without requesting a
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"@hypit/narrative": "workspace:*",
|
|
20
20
|
"@hypit/program-space": "workspace:*",
|
|
21
21
|
"@hypit/protocol": "workspace:*",
|
|
22
|
-
"@hypit/
|
|
22
|
+
"@hypit/timeline": "workspace:*",
|
|
23
23
|
"@hypit/spatial": "workspace:*",
|
|
24
24
|
"@hypit/svs": "workspace:*",
|
|
25
25
|
"@hypit/markup": "workspace:*",
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<import from="@hypit/script@1"/>
|
|
7
7
|
<import as="media" from="@hypit/media@1"/>
|
|
8
8
|
<import as="pipeline" from="@hypit/media-pipeline@1"/>
|
|
9
|
-
<import as="
|
|
9
|
+
<import as="time" from="@hypit/timeline-author@1"/>
|
|
10
10
|
<import as="whisperx" from="@hypit/whisperx@1"/>
|
|
11
11
|
<import as="media-track" from="@hypit/media-track@1"/>
|
|
12
12
|
<import as="space" from="@hypit/spatial@1"/>
|
|
@@ -32,16 +32,16 @@
|
|
|
32
32
|
video="primary-moving" audio="none" span-authority="video"/>
|
|
33
33
|
<whisperx:SemanticTake id="showcase-time" narrative={story}
|
|
34
34
|
segment={story.segment.empty} media={duration-media.media}/>
|
|
35
|
-
<
|
|
35
|
+
<time:Timeline id="speech" clock={clock}><time:Take source={showcase-time.take}/></time:Timeline>
|
|
36
36
|
|
|
37
|
-
<media-track:Track id="showcase"
|
|
37
|
+
<media-track:Track id="showcase" timeline={speech.timeline} canvas={vertical}>
|
|
38
38
|
<media-track:Item id="rounded-card" image={picture-a} extent={picture-size} during="program"
|
|
39
39
|
frame={card-a} appearance={recipes.media.card} motion={recipes.motion.card}/>
|
|
40
40
|
<media-track:Item id="flush-card" image={picture-b} extent={picture-size} during="program"
|
|
41
41
|
frame={card-b} appearance={recipes.media.wide} motion={recipes.motion.card}/>
|
|
42
42
|
</media-track:Track>
|
|
43
|
-
<film:Film id="main" canvas={vertical}
|
|
43
|
+
<film:Film id="main" canvas={vertical} timeline={speech.timeline} appearance={recipes.film.vertical}>
|
|
44
44
|
<film:Track source={showcase.visual}/>
|
|
45
45
|
</film:Film>
|
|
46
|
-
<render:Video id="final" composition={main.composition}
|
|
46
|
+
<render:Video id="final" composition={main.composition} timeline={speech.timeline}/>
|
|
47
47
|
</svml>
|
|
@@ -182,12 +182,18 @@ export function decodeMediaSampleSpec(
|
|
|
182
182
|
}
|
|
183
183
|
|
|
184
184
|
/** Decode visual-only sample styling without choosing playback or source trim. */
|
|
185
|
+
/** Public authored defaults shared by decoding and optional editor fields. */
|
|
186
|
+
export const mediaAppearanceDefaults = {
|
|
187
|
+
opacity: 1, blur: 0, brightness: 1, contrast: 1, saturation: 1,
|
|
188
|
+
clip: "frame", radius: 0,
|
|
189
|
+
} as const;
|
|
190
|
+
|
|
185
191
|
export function decodeMediaSampleAppearance(recipe: SvsRecipe): MediaSampleAppearance {
|
|
186
192
|
return {
|
|
187
|
-
opacity: number(recipe, "opacity",
|
|
193
|
+
opacity: number(recipe, "opacity", mediaAppearanceDefaults.opacity),
|
|
188
194
|
filter: {
|
|
189
|
-
blurPx: number(recipe, "blur",
|
|
190
|
-
contrast: number(recipe, "contrast",
|
|
195
|
+
blurPx: number(recipe, "blur", mediaAppearanceDefaults.blur), brightness: number(recipe, "brightness", mediaAppearanceDefaults.brightness),
|
|
196
|
+
contrast: number(recipe, "contrast", mediaAppearanceDefaults.contrast), saturation: number(recipe, "saturation", mediaAppearanceDefaults.saturation),
|
|
191
197
|
},
|
|
192
198
|
};
|
|
193
199
|
}
|
|
@@ -236,10 +242,10 @@ export function decodeMediaMotion(recipe: SvsRecipe | undefined): MediaLifecycle
|
|
|
236
242
|
}
|
|
237
243
|
|
|
238
244
|
export function decodeMediaPresentation(recipe: SvsRecipe): MediaFramePresentation {
|
|
239
|
-
const clip = oneOf(recipe, "clip", ["none", "frame", "rounded"] as const,
|
|
245
|
+
const clip = oneOf(recipe, "clip", ["none", "frame", "rounded"] as const, mediaAppearanceDefaults.clip);
|
|
240
246
|
const borderWidth = number(recipe, "border-width", 0);
|
|
241
247
|
return {
|
|
242
|
-
clip: clip === "rounded" ? { kind: "rounded", radiusPx: number(recipe, "radius",
|
|
248
|
+
clip: clip === "rounded" ? { kind: "rounded", radiusPx: number(recipe, "radius", mediaAppearanceDefaults.radius) } : { kind: clip },
|
|
243
249
|
padding: padding(recipe),
|
|
244
250
|
...(borderWidth === 0 ? {} : { border: {
|
|
245
251
|
widthPx: borderWidth,
|
|
@@ -278,7 +284,7 @@ export function decodeMediaFramePaint(recipe: SvsRecipe, id: string): MediaPaint
|
|
|
278
284
|
export function decodeMediaPaintSpec(recipe: SvsRecipe, id: string): MediaPaintLayerSpec {
|
|
279
285
|
assertKeys(recipe, ["paint", "opacity"]);
|
|
280
286
|
return sealMediaPaintLayerSpec({
|
|
281
|
-
id, paint: paint(recipe), opacity: number(recipe, "opacity",
|
|
287
|
+
id, paint: paint(recipe), opacity: number(recipe, "opacity", mediaAppearanceDefaults.opacity),
|
|
282
288
|
});
|
|
283
289
|
}
|
|
284
290
|
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { SemanticTrack } from "@hypit/semantic-track";
|
|
1
|
+
import type { Timeline } from "@hypit/timeline";
|
|
3
2
|
import type { ComponentPackage, ProducerHandlerContext } from "@hypit/component-kit";
|
|
4
3
|
import type { CompositableSurfaceRef, SynchronizedMedia } from "@hypit/media";
|
|
5
4
|
import { canonicalize } from "@hypit/protocol";
|
|
6
5
|
import type { BlobRef, StoredValue } from "@hypit/protocol";
|
|
7
|
-
import type { ProgramSpace } from "@hypit/program-space";
|
|
8
6
|
import type { CanvasSpace, ContentFit, IntrinsicExtent, SpatialFrame, SpatialPath } from "@hypit/spatial";
|
|
9
7
|
import type { TemporalInstant, TemporalWindow } from "@hypit/temporal";
|
|
10
8
|
|
|
@@ -54,7 +52,7 @@ function itemInputs(inputs: ProducerHandlerContext["inputs"]) {
|
|
|
54
52
|
return {
|
|
55
53
|
set: inline<MediaTrackSet>(inputs.set?.value, "MediaTrackSet"),
|
|
56
54
|
header: inline<MediaTrackHeader>(inputs.header?.value, "MediaTrackHeader"),
|
|
57
|
-
|
|
55
|
+
timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
58
56
|
canvas: inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"),
|
|
59
57
|
layers: inline<MediaLayerSet>(inputs.layers?.value, "MediaLayerSet"),
|
|
60
58
|
frame: inline<SpatialFrame>(inputs.frame?.value, "SpatialFrame"),
|
|
@@ -67,7 +65,7 @@ function itemInputs(inputs: ProducerHandlerContext["inputs"]) {
|
|
|
67
65
|
function memberInputs(inputs: ProducerHandlerContext["inputs"]) {
|
|
68
66
|
return {
|
|
69
67
|
members: inline<MediaSequenceMemberSet>(inputs.members?.value, "MediaSequenceMemberSet"),
|
|
70
|
-
|
|
68
|
+
timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
71
69
|
layers: inline<MediaLayerSet>(inputs.layers?.value, "MediaLayerSet"),
|
|
72
70
|
spec: inline<MediaSequenceMemberSpec>(inputs.spec?.value, "MediaSequenceMemberSpec"),
|
|
73
71
|
activation: inline<TemporalInstant>(inputs.activation?.value, "TemporalInstant"),
|
|
@@ -78,7 +76,7 @@ function sequenceInputs(inputs: ProducerHandlerContext["inputs"]) {
|
|
|
78
76
|
return {
|
|
79
77
|
set: inline<MediaTrackSet>(inputs.set?.value, "MediaTrackSet"),
|
|
80
78
|
header: inline<MediaTrackHeader>(inputs.header?.value, "MediaTrackHeader"),
|
|
81
|
-
|
|
79
|
+
timeline: inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
82
80
|
canvas: inline<CanvasSpace>(inputs.canvas?.value, "CanvasSpace"),
|
|
83
81
|
members: inline<MediaSequenceMemberSet>(inputs.members?.value, "MediaSequenceMemberSet"),
|
|
84
82
|
frame: inline<SpatialFrame>(inputs.frame?.value, "SpatialFrame"),
|
|
@@ -90,10 +88,6 @@ function sequenceInputs(inputs: ProducerHandlerContext["inputs"]) {
|
|
|
90
88
|
|
|
91
89
|
export const mediaTrackComponent = {
|
|
92
90
|
producers: [
|
|
93
|
-
{ producer: mediaTrackProducers.appendPerformance, handler: ({ inputs }) => ({ outputs: { set: output(appendMediaPerformance(
|
|
94
|
-
itemInputs(inputs), inline<SemanticTrack>(inputs.semantic?.value, "SemanticTrack"),
|
|
95
|
-
inline<ContentFit>(inputs.fit?.value, "ContentFit"), inline<MediaSampleLayerSpec>(inputs.sampleSpec?.value, "MediaSampleLayerSpec"),
|
|
96
|
-
)) }, needs: {} }) },
|
|
97
91
|
{ producer: mediaTrackProducers.createLayers, handler: () => ({ outputs: { layers: output(createMediaLayerSet()) }, needs: {} }) },
|
|
98
92
|
{ producer: mediaTrackProducers.appendPaintLayer, handler: ({ inputs }) => ({ outputs: { layers: output(appendMediaPaintLayer(
|
|
99
93
|
inline<MediaLayerSet>(inputs.layers?.value, "MediaLayerSet"),
|
|
@@ -121,7 +115,7 @@ export const mediaTrackComponent = {
|
|
|
121
115
|
{ producer: mediaTrackProducers.createSet, handler: () => ({ outputs: { set: output(createMediaTrackSet()) }, needs: {} }) },
|
|
122
116
|
{ producer: mediaTrackProducers.appendItem, handler: ({ inputs }) => {
|
|
123
117
|
const value = itemInputs(inputs);
|
|
124
|
-
return { outputs: { set: output(appendMediaItem(value.set, value.header, value.
|
|
118
|
+
return { outputs: { set: output(appendMediaItem(value.set, value.header, value.timeline, value.canvas, value.layers, value.frame, value.spec, value.sounds, value.window)) }, needs: {} };
|
|
125
119
|
} },
|
|
126
120
|
{ producer: mediaTrackProducers.bindItemClipPath, handler: ({ inputs }) => ({ outputs: { spec: output(bindMediaItemClipPath(
|
|
127
121
|
inline<MediaItemSpec>(inputs.spec?.value, "MediaItemSpec"),
|
|
@@ -135,24 +129,24 @@ export const mediaTrackComponent = {
|
|
|
135
129
|
{ producer: mediaTrackProducers.appendMember, handler: ({ inputs }) => {
|
|
136
130
|
const value = memberInputs(inputs);
|
|
137
131
|
return { outputs: { members: output(appendMediaSequenceMember(
|
|
138
|
-
value.members, value.
|
|
132
|
+
value.members, value.timeline, value.layers, value.spec, value.activation,
|
|
139
133
|
)) }, needs: {} };
|
|
140
134
|
} },
|
|
141
135
|
{ producer: mediaTrackProducers.appendSequence, handler: ({ inputs }) => {
|
|
142
136
|
const value = sequenceInputs(inputs);
|
|
143
137
|
return { outputs: { set: output(appendMediaSequence(
|
|
144
|
-
value.set, value.header, value.
|
|
138
|
+
value.set, value.header, value.timeline, value.canvas, value.members, value.frame, value.spec, value.sounds, value.terminal,
|
|
145
139
|
)) }, needs: {} };
|
|
146
140
|
} },
|
|
147
141
|
{ producer: mediaTrackProducers.finalize, handler: ({ inputs }) => ({ outputs: { program: output(finalizeMediaTrack(
|
|
148
142
|
inline<MediaTrackSet>(inputs.set?.value, "MediaTrackSet"), inline<MediaTrackHeader>(inputs.header?.value, "MediaTrackHeader"),
|
|
149
|
-
inline<
|
|
143
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"),
|
|
150
144
|
)) }, needs: {} }) },
|
|
151
145
|
{ producer: mediaTrackProducers.projectVisual, handler: ({ inputs }) => ({ outputs: { track: output(projectMediaVisualTrack(
|
|
152
|
-
inline<
|
|
146
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<MediaTrackProgram>(inputs.program?.value, "MediaTrackProgram"),
|
|
153
147
|
)) }, needs: {} }) },
|
|
154
148
|
{ producer: mediaTrackProducers.projectAudio, handler: ({ inputs }) => ({ outputs: { track: output(projectMediaAudioTrack(
|
|
155
|
-
inline<
|
|
149
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<MediaTrackProgram>(inputs.program?.value, "MediaTrackProgram"),
|
|
156
150
|
)) }, needs: {} }) },
|
|
157
151
|
],
|
|
158
152
|
validators: [{
|