@hypit/hypit 0.1.4 → 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 +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 +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 +32 -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 +14 -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 +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/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 +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/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 +92 -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 +15 -2
- package/packages/script/src/manifest.ts +2 -2
- package/packages/script/src/narrative.ts +1 -0
- 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/README.md +88 -14
- 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/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 +209 -48
- package/packages/studio/src/ui/comments.ts +233 -0
- package/packages/studio/src/ui/icons.ts +5 -0
- package/packages/studio/src/ui/main.ts +145 -86
- package/packages/studio/src/ui/overlay.ts +12 -8
- package/packages/studio/src/ui/scrub-preview.ts +108 -0
- package/packages/studio/src/ui/stage.ts +67 -4
- package/packages/studio/src/ui/timeline.ts +177 -108
- package/packages/studio/start.ts +4 -2
- 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
|
@@ -8,16 +8,23 @@ With prepared Takes, a Canvas and an exact FontStack already available:
|
|
|
8
8
|
```svml
|
|
9
9
|
<import as="explainer" from="@example/responsive-explainer@1"/>
|
|
10
10
|
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
<time:Clock id="clock" frame-rate="30"/>
|
|
12
|
+
<time:Timeline id="speech" clock={clock}>
|
|
13
|
+
<time:Take source={opening.take}/>
|
|
14
|
+
<time:Take source={explanation.take}/>
|
|
15
|
+
</time:Timeline>
|
|
16
|
+
<explainer:Scene id="scene" timeline={speech.timeline} canvas={canvas} font={font}
|
|
16
17
|
during="program" reveal={story.moment.demonstrate} title="Make room for meaning"
|
|
17
18
|
transition-frames="24" stack-order="0"/>
|
|
18
|
-
<
|
|
19
|
+
<import as="sound" from="@hypit/sound@1"/>
|
|
20
|
+
<sound:Style id="voice-style"/>
|
|
21
|
+
<sound:Track id="voice" timeline={speech.timeline}>
|
|
22
|
+
<sound:Use style={voice-style}/>
|
|
23
|
+
</sound:Track>
|
|
24
|
+
|
|
25
|
+
<film:Film id="main" canvas={canvas} timeline={speech.timeline} appearance={look.film}>
|
|
19
26
|
<film:Track source={scene.visual}/>
|
|
20
|
-
<film:Track source={
|
|
27
|
+
<film:Track source={voice.audio}/>
|
|
21
28
|
<film:Track source={captions.track}/>
|
|
22
29
|
</film:Film>
|
|
23
30
|
```
|
|
@@ -28,11 +35,11 @@ the Script or using another delivery changes the projected frame while retaining
|
|
|
28
35
|
`transition-frames` is the duration of that change, separate from the scene's lifetime. `stack-order`
|
|
29
36
|
places this scene among other contributions. The caller supplies its title and exact fonts.
|
|
30
37
|
|
|
31
|
-
`
|
|
38
|
+
`projectTimelineMedia` selects all intersecting prepared Takes. Each video's target interval is
|
|
32
39
|
Present-local and its source offset is preserved. The parent viewport changes size and position;
|
|
33
40
|
playback is never restarted by the layout change. The component owns the diagram and the viewport,
|
|
34
41
|
so its internal overlap, rounded clipping and backdrop blur are ordinary HTML/CSS relationships.
|
|
35
|
-
|
|
42
|
+
Sound independently presents the existing audio as `voice.audio`.
|
|
36
43
|
|
|
37
44
|
`src/activation.ts` declares the Module, Surface, semantic projections and Producer Fragment.
|
|
38
45
|
`src/render.ts` emits a browser program with HTML slots for typed video and text children. Its render
|
|
@@ -5,8 +5,8 @@ import { compositionTypes } from "@hypit/hypit/composition";
|
|
|
5
5
|
import { mediaTypes } from "@hypit/hypit/media";
|
|
6
6
|
import type { FontStackRef } from "@hypit/hypit/media";
|
|
7
7
|
import { narrativeTypes } from "@hypit/hypit/narrative";
|
|
8
|
-
import {
|
|
9
|
-
import type {
|
|
8
|
+
import { timelineTypes } from "@hypit/hypit/timeline";
|
|
9
|
+
import type { Timeline } from "@hypit/hypit/timeline";
|
|
10
10
|
import { spatialTypes } from "@hypit/hypit/spatial";
|
|
11
11
|
import type { CanvasSpace } from "@hypit/hypit/spatial";
|
|
12
12
|
import { temporalTypes } from "@hypit/hypit/temporal";
|
|
@@ -20,12 +20,12 @@ const module = { name: "@example/responsive-explainer", version: "1" } as const;
|
|
|
20
20
|
const optionsType = { module, name: "ExplainerOptions" };
|
|
21
21
|
const producer = { module, name: "compose" };
|
|
22
22
|
const inputs = [
|
|
23
|
-
{ name: "
|
|
23
|
+
{ name: "timeline", type: timelineTypes.track }, { name: "canvas", type: spatialTypes.canvas },
|
|
24
24
|
{ name: "window", type: temporalTypes.window }, { name: "reveal", type: temporalTypes.instant },
|
|
25
25
|
{ name: "font", type: mediaTypes.fontStack }, { name: "options", type: optionsType },
|
|
26
26
|
];
|
|
27
27
|
export const manifest: ModuleManifest = { format: "hypit.module@1", ...module,
|
|
28
|
-
dependencies: [compositionTypes.visualTrack, mediaTypes.fontStack,
|
|
28
|
+
dependencies: [compositionTypes.visualTrack, mediaTypes.fontStack, timelineTypes.track,
|
|
29
29
|
spatialTypes.canvas, temporalTypes.window].map(type => ({ module: type.module })),
|
|
30
30
|
types: [{ name: optionsType.name }], capabilities: [],
|
|
31
31
|
producers: [{ name: producer.name, inputs, outputs: [{ name: "visual", type: compositionTypes.visualTrack }], needs: [] }],
|
|
@@ -40,12 +40,12 @@ const inline = <T>(record: { value: { kind: string; value?: unknown } } | undefi
|
|
|
40
40
|
return record.value.value as T;
|
|
41
41
|
};
|
|
42
42
|
const component: ComponentPackage = { producers: [{ producer, handler: ({ inputs }) => ({ needs: {}, outputs: {
|
|
43
|
-
visual: { kind: "inline", value: canonicalize(renderExplainer(inline<
|
|
43
|
+
visual: { kind: "inline", value: canonicalize(renderExplainer(inline<Timeline>(inputs.timeline),
|
|
44
44
|
inline<CanvasSpace>(inputs.canvas), inline<TemporalWindow>(inputs.window), inline<TemporalInstant>(inputs.reveal),
|
|
45
45
|
inline<FontStackRef>(inputs.font).faces, inline<ExplainerOptions>(inputs.options))) },
|
|
46
46
|
} }) }] };
|
|
47
47
|
export const decodeSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
|
|
48
|
-
assertAttributes(element, ["id", "
|
|
48
|
+
assertAttributes(element, ["id", "timeline", "canvas", "font", "reveal", "title", "transition-frames", "stack-order", ...temporalWindowAttributeNames]);
|
|
49
49
|
assertEmptyElement(element);
|
|
50
50
|
const id = textAttribute(element, "id");
|
|
51
51
|
const reference = (name: string, type: TypeRef): SurfaceResolvedReference => {
|
|
@@ -55,19 +55,19 @@ export const decodeSurface: StructuredSurfaceHandler = ({ element, resolveRefere
|
|
|
55
55
|
if (value === undefined || !sameType(type, value.type)) throw new Error(`${name} has the wrong type.`);
|
|
56
56
|
return value;
|
|
57
57
|
};
|
|
58
|
-
const
|
|
59
|
-
const window = createTemporalWindowProjection({ id: `${id}.window`, element,
|
|
58
|
+
const timeline = reference("timeline", timelineTypes.track);
|
|
59
|
+
const window = createTemporalWindowProjection({ id: `${id}.window`, element, timeline, resolveReference });
|
|
60
60
|
// Reveal has its own Moment; the outer Window independently controls this scene's lifetime.
|
|
61
61
|
reference("reveal", narrativeTypes.moment);
|
|
62
62
|
const reveal = createTemporalInstantProjection({ id: `${id}.reveal`,
|
|
63
|
-
element: { ...element, attributes: { at: element.attributes.reveal! } },
|
|
63
|
+
element: { ...element, attributes: { at: element.attributes.reveal! } }, timeline, resolveReference });
|
|
64
64
|
const options: ExplainerOptions = { id, title: textAttribute(element, "title"),
|
|
65
65
|
transitionFrames: Number(textAttribute(element, "transition-frames")), stackingOrder: Number(textAttribute(element, "stack-order")) };
|
|
66
66
|
return { records: [...window.records, ...reveal.records, { id: `${id}.options`, type: optionsType,
|
|
67
67
|
value: { kind: "inline", value: canonicalize(options) }, range: element.range }],
|
|
68
68
|
fragments: [...window.fragments, ...reveal.fragments, fragment],
|
|
69
69
|
components: [...window.components, ...reveal.components, { id, fragment: fragment.id,
|
|
70
|
-
inputs: {
|
|
70
|
+
inputs: { timeline: timeline.ref, canvas: reference("canvas", spatialTypes.canvas).ref,
|
|
71
71
|
font: reference("font", mediaTypes.fontStack).ref, window: window.ref, reveal: reveal.ref,
|
|
72
72
|
options: { kind: "record", id: `${id}.options` } }, outputs: { visual: `${id}.visual` }, range: element.range }],
|
|
73
73
|
exports: [`${id}.visual`] };
|
|
@@ -77,12 +77,12 @@ const declaration = { name: "scene", tag: "Scene", mode: "structured" as const,
|
|
|
77
77
|
vocabulary: { summary: "A continuously playing performance makes room for a diagram on a semantic Moment.",
|
|
78
78
|
attributes: [
|
|
79
79
|
...["id", "title", "transition-frames", "stack-order"].map(name => ({ name, kind: "literal" as const, required: true, summary: name })),
|
|
80
|
-
...[{ name: "
|
|
80
|
+
...[{ name: "timeline", type: timelineTypes.track }, { name: "canvas", type: spatialTypes.canvas },
|
|
81
81
|
{ name: "font", type: mediaTypes.fontStack }, { name: "reveal", type: narrativeTypes.moment }]
|
|
82
82
|
.map(({ name, type }) => ({ name, kind: "reference" as const, required: true, accepts: [type], summary: name })),
|
|
83
83
|
...temporalWindowAttributeVocabulary,
|
|
84
84
|
], ports: [{ name: "visual", type: compositionTypes.visualTrack, summary: "The coordinated scene." }],
|
|
85
|
-
example: '<explainer:Scene id="scene"
|
|
85
|
+
example: '<explainer:Scene id="scene" timeline={speech.timeline} canvas={canvas} font={font} during="program" reveal={story.moment.reveal} title="How it works" transition-frames="18" stack-order="0"/>',
|
|
86
86
|
},
|
|
87
87
|
};
|
|
88
88
|
export const hypitPackage = { format: "hypit.node-package@1" as const, modules: [{ manifest }], components: [component],
|
|
@@ -2,22 +2,22 @@ import { sealVisualTrack } from "@hypit/hypit/composition";
|
|
|
2
2
|
import type { VisualElement } from "@hypit/hypit/composition";
|
|
3
3
|
import { browserProgram } from "@hypit/hypit/hyperframes";
|
|
4
4
|
import type { FontArtifactRef } from "@hypit/hypit/media";
|
|
5
|
-
import {
|
|
6
|
-
import type {
|
|
5
|
+
import { projectTimelineMedia, projectTimelineSpace } from "@hypit/hypit/timeline";
|
|
6
|
+
import type { Timeline } from "@hypit/hypit/timeline";
|
|
7
7
|
import type { CanvasSpace } from "@hypit/hypit/spatial";
|
|
8
8
|
import type { TemporalInstant, TemporalWindow } from "@hypit/hypit/temporal";
|
|
9
9
|
|
|
10
10
|
export type ExplainerOptions = { id: string; title: string; transitionFrames: number; stackingOrder: number };
|
|
11
11
|
|
|
12
12
|
/** One scene owns the moving performance viewport and the diagram it makes room for. */
|
|
13
|
-
export function renderExplainer(semantic:
|
|
13
|
+
export function renderExplainer(semantic: Timeline, canvas: CanvasSpace, window: TemporalWindow,
|
|
14
14
|
reveal: TemporalInstant, fonts: readonly FontArtifactRef[], options: ExplainerOptions) {
|
|
15
|
-
const space =
|
|
15
|
+
const space = projectTimelineSpace(semantic);
|
|
16
16
|
if (window.start.source.spaceId !== space.id || reveal.source.spaceId !== space.id)
|
|
17
17
|
throw new Error("Explainer timing must belong to its semantic performance.");
|
|
18
18
|
if (!Number.isSafeInteger(options.transitionFrames) || options.transitionFrames < 1)
|
|
19
19
|
throw new Error("Explainer transitionFrames must be a positive integer.");
|
|
20
|
-
const clips =
|
|
20
|
+
const clips = projectTimelineMedia(semantic, window.span).filter(clip => clip.media.visual !== undefined);
|
|
21
21
|
const videos: VisualElement[] = clips.map((clip, i) => ({
|
|
22
22
|
id: `take-${i}`, parent: "scene", kind: "video", order: i + 1,
|
|
23
23
|
artifact: clip.media.visual!.artifact, muted: true,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Project sound Style: explicit crossfade
|
|
2
|
+
|
|
3
|
+
This ordinary project package demonstrates `soundStyle(fragment, bindings)`. It publishes one
|
|
4
|
+
`Crossfade` Style with explicit outgoing and incoming Segment inputs. It uses public
|
|
5
|
+
`@hypit/hypit/*` imports and returns ordinary AudioTrack data. Copy it into a video's `packages/`,
|
|
6
|
+
select the installed Hypit version as its development dependency, build it and declare it in the
|
|
7
|
+
project's ordinary package configuration.
|
|
8
|
+
|
|
9
|
+
```svml
|
|
10
|
+
<import as="sound" from="@hypit/sound@1"/>
|
|
11
|
+
<import as="mix" from="@example/sound-styles@1"/>
|
|
12
|
+
<sound:Style id="normal"/>
|
|
13
|
+
<mix:Crossfade id="handoff"
|
|
14
|
+
outgoing={story.segment.first} incoming={story.segment.second}/>
|
|
15
|
+
<sound:Track id="voice" timeline={program.timeline}>
|
|
16
|
+
<sound:Use style={normal}/>
|
|
17
|
+
<sound:Use style={handoff}
|
|
18
|
+
start-source={story.segment.second} start="segment.start"
|
|
19
|
+
end-source={story.segment.first} end="segment.end"/>
|
|
20
|
+
</sound:Track>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The Window describes an actual overlap, even though its endpoints are reversed in Script order.
|
|
24
|
+
The two Style inputs declare roles; temporal endpoints do not infer them. Outgoing gain decreases
|
|
25
|
+
from 1 to 0 and incoming gain increases from 0 to 1 across that Window. Playback stays at each
|
|
26
|
+
Take's existing source position. A known source with no audio contributes nothing; an unknown source
|
|
27
|
+
is an error. Both roles must name distinct Segments.
|
|
28
|
+
|
|
29
|
+
Linear crossfade is this family's chosen behavior, not a universal acoustic rule. A different
|
|
30
|
+
project family can use another envelope or more sources without changing Timeline or the renderer.
|
|
31
|
+
For intentional simultaneous speech, a family can return both explicit `sourceSound` results at
|
|
32
|
+
unity gain. Independently included Sound Tracks can also coexist.
|
|
33
|
+
|
|
34
|
+
The implementation is in [render.ts](src/render.ts); [activation.ts](src/activation.ts) declares the
|
|
35
|
+
Surface, typed inputs, fragment and Producer. Build with `pnpm --filter @example/sound-styles build`
|
|
36
|
+
inside this repository after public declarations are available.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@example/sound-styles",
|
|
3
|
+
"version": "0.0.0-dev",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"hypit": {
|
|
7
|
+
"activation": "./dist/activation.js"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": "./dist/render.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc -p tsconfig.json",
|
|
18
|
+
"prepack": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@hypit/hypit": "workspace:*",
|
|
22
|
+
"typescript": "5.9.3",
|
|
23
|
+
"@types/node": "24.10.1"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { assertAttributes, assertEmptyElement, canonicalize, createMarkupSurfaceHostFacet, sameType, sealGraphFragment, textAttribute } from "@hypit/hypit/author-kit";
|
|
2
|
+
import type { ComponentPackage, ModuleManifest, StructuredSurfaceHandler, SurfaceResolvedReference } from "@hypit/hypit/author-kit";
|
|
3
|
+
import { compositionTypes } from "@hypit/hypit/composition";
|
|
4
|
+
import { soundStyle, soundTypes, soundModuleRef } from "@hypit/hypit/sound";
|
|
5
|
+
import { timelineTypes } from "@hypit/hypit/timeline";
|
|
6
|
+
import type { Timeline } from "@hypit/hypit/timeline";
|
|
7
|
+
import { temporalTypes } from "@hypit/hypit/temporal";
|
|
8
|
+
import type { TemporalWindow } from "@hypit/hypit/temporal";
|
|
9
|
+
import { narrativeTypes } from "@hypit/hypit/narrative";
|
|
10
|
+
import type { NarrativeExcerpt } from "@hypit/hypit/narrative";
|
|
11
|
+
import { crossfadeSound } from "./render.js";
|
|
12
|
+
|
|
13
|
+
const module = { name: "@example/sound-styles", version: "1" } as const;
|
|
14
|
+
const common = [{ name: "timeline", type: timelineTypes.track }, { name: "window", type: temporalTypes.window }];
|
|
15
|
+
const mixInputs = [...common, { name: "outgoing", type: narrativeTypes.excerpt }, { name: "incoming", type: narrativeTypes.excerpt }];
|
|
16
|
+
const families = [{ name: "crossfade", tag: "Crossfade", ports: mixInputs }];
|
|
17
|
+
export const manifest: ModuleManifest = { format: "hypit.module@1", ...module,
|
|
18
|
+
dependencies: [soundModuleRef, compositionTypes.audioTrack.module, timelineTypes.track.module, temporalTypes.window.module, narrativeTypes.excerpt.module].map(module => ({ module })),
|
|
19
|
+
types: [], capabilities: [], producers: families.map(family => ({ name: family.name, inputs: family.ports, outputs: [{ name: "audio", type: compositionTypes.audioTrack }], needs: [] })) };
|
|
20
|
+
const fragments = families.map(family => sealGraphFragment({ inputs: family.ports,
|
|
21
|
+
operations: [{ id: "render", producer: { module, name: family.name }, inputs: Object.fromEntries(family.ports.map(port => [port.name, { kind: "fragment-input" as const, name: port.name }])), result: { kind: "output", name: "audio" } }],
|
|
22
|
+
exports: [{ name: "audio", type: compositionTypes.audioTrack, root: { kind: "fragment-operation", operation: "render" } }] }));
|
|
23
|
+
const component: ComponentPackage = { producers: families.map(family => ({ producer: { module, name: family.name }, handler: ({ inputs }) => {
|
|
24
|
+
const values = Object.fromEntries(Object.entries(inputs).map(([key, record]) => {
|
|
25
|
+
if (record.value.kind !== "inline") throw new Error(`${key} must be inline`);
|
|
26
|
+
return [key, record.value.value];
|
|
27
|
+
}));
|
|
28
|
+
const audio = crossfadeSound(values.timeline as unknown as Timeline, values.window as unknown as TemporalWindow,
|
|
29
|
+
values.outgoing as unknown as NarrativeExcerpt, values.incoming as unknown as NarrativeExcerpt);
|
|
30
|
+
return { outputs: { audio: { kind: "inline", value: canonicalize(audio) } }, needs: {} };
|
|
31
|
+
} })) };
|
|
32
|
+
const hostFacets = families.map((family,index) => {
|
|
33
|
+
const params = family.ports.slice(common.length);
|
|
34
|
+
const handler: StructuredSurfaceHandler = ({ element, resolveReference }) => {
|
|
35
|
+
assertAttributes(element, ["id", ...params.map(port => port.name)]); assertEmptyElement(element);
|
|
36
|
+
const bindings: Record<string, SurfaceResolvedReference> = {};
|
|
37
|
+
for (const param of params) {
|
|
38
|
+
const raw = element.attributes[param.name];
|
|
39
|
+
if (typeof raw !== "object" || raw.kind !== "reference") throw new Error(`${param.name} must be a reference`);
|
|
40
|
+
const value = resolveReference(raw.path);
|
|
41
|
+
if (value === undefined || !sameType(value.type,param.type)) throw new Error(`${param.name} has the wrong Type`);
|
|
42
|
+
bindings[param.name] = value;
|
|
43
|
+
}
|
|
44
|
+
return { records: [{ id: textAttribute(element,"id"), type: soundTypes.style,
|
|
45
|
+
value: { kind: "inline", value: canonicalize(soundStyle(fragments[index]!,bindings)) }, range: element.range }], components: [], fragments: [] };
|
|
46
|
+
};
|
|
47
|
+
return createMarkupSurfaceHostFacet({ module, declaration: { name: family.name, tag: family.tag, mode: "structured", outputs: [soundTypes.style], vocabulary: {
|
|
48
|
+
summary: `Project-owned ${family.name} presentation Style.`, example: `<styles:${family.tag} id="look" ${params.map(port => `${port.name}={${port.name}}`).join(' ')}/>`,
|
|
49
|
+
attributes: [{ name: "id", kind: "identifier", required: true, summary: "Style identity." }, ...params.map(port => ({ name: port.name, kind: "reference" as const, required: true, accepts: [port.type], summary: `Explicit ${port.name} input.` }))],
|
|
50
|
+
} }, handler });
|
|
51
|
+
});
|
|
52
|
+
export const hypitPackage = { format: "hypit.node-package@1" as const, modules: [{ manifest }], components: [component], hostFacets };
|
|
53
|
+
export default hypitPackage;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { sealAudioTrack } from "@hypit/hypit/composition";
|
|
2
|
+
import { sourceSound } from "@hypit/hypit/sound";
|
|
3
|
+
import type { Timeline } from "@hypit/hypit/timeline";
|
|
4
|
+
import type { TemporalWindow } from "@hypit/hypit/temporal";
|
|
5
|
+
import type { NarrativeExcerpt } from "@hypit/hypit/narrative";
|
|
6
|
+
|
|
7
|
+
/** The family explicitly chooses the two roles; the Window only controls the blend progress. */
|
|
8
|
+
export function crossfadeSound(timeline: Timeline, window: TemporalWindow,
|
|
9
|
+
outgoing: NarrativeExcerpt, incoming: NarrativeExcerpt) {
|
|
10
|
+
if (outgoing.id === incoming.id && outgoing.narrativeId === incoming.narrativeId) throw new Error("Crossfade needs two distinct sources.");
|
|
11
|
+
const left = sourceSound(timeline, window, outgoing, { gain: 1, endGain: 0 });
|
|
12
|
+
const right = sourceSound(timeline, window, incoming, { gain: 0, endGain: 1 });
|
|
13
|
+
return sealAudioTrack({ id: window.subjectId, programSpaceId: timeline.id, clips: [...left.clips, ...right.clips] });
|
|
14
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2023",
|
|
4
|
+
"module": "NodeNext",
|
|
5
|
+
"moduleResolution": "NodeNext",
|
|
6
|
+
"lib": ["ES2023"],
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noUncheckedIndexedAccess": true,
|
|
9
|
+
"exactOptionalPropertyTypes": true,
|
|
10
|
+
"verbatimModuleSyntax": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"sourceMap": true,
|
|
13
|
+
"rootDir": "src",
|
|
14
|
+
"outDir": "dist",
|
|
15
|
+
"skipLibCheck": true
|
|
16
|
+
},
|
|
17
|
+
"include": ["src/**/*.ts"]
|
|
18
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypit/hypit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"homepage": "https://hypit.ai",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -58,9 +58,9 @@
|
|
|
58
58
|
"types": "./dist/public/runtime-kit.d.ts",
|
|
59
59
|
"import": "./packages/runtime-kit/src/index.ts"
|
|
60
60
|
},
|
|
61
|
-
"./
|
|
62
|
-
"types": "./dist/public/
|
|
63
|
-
"import": "./packages/
|
|
61
|
+
"./timeline": {
|
|
62
|
+
"types": "./dist/public/timeline.d.ts",
|
|
63
|
+
"import": "./packages/timeline/src/index.ts"
|
|
64
64
|
},
|
|
65
65
|
"./spatial": {
|
|
66
66
|
"types": "./dist/public/spatial.d.ts",
|
|
@@ -97,6 +97,14 @@
|
|
|
97
97
|
"./hyperframes": {
|
|
98
98
|
"types": "./dist/public/hyperframes.d.ts",
|
|
99
99
|
"import": "./packages/hyperframes/src/index.ts"
|
|
100
|
+
},
|
|
101
|
+
"./performance": {
|
|
102
|
+
"types": "./dist/public/performance.d.ts",
|
|
103
|
+
"import": "./packages/performance/src/index.ts"
|
|
104
|
+
},
|
|
105
|
+
"./sound": {
|
|
106
|
+
"types": "./dist/public/sound.d.ts",
|
|
107
|
+
"import": "./packages/sound/src/index.ts"
|
|
100
108
|
}
|
|
101
109
|
},
|
|
102
110
|
"bin": {
|
|
@@ -149,7 +157,12 @@
|
|
|
149
157
|
"examples/semantic-composition/*.svml",
|
|
150
158
|
"examples/semantic-composition/*.svrun",
|
|
151
159
|
"examples/semantic-composition/*.svs",
|
|
152
|
-
"examples/semantic-composition/hypit.runtime.json"
|
|
160
|
+
"examples/semantic-composition/hypit.runtime.json",
|
|
161
|
+
"examples/provider-package/README.md",
|
|
162
|
+
"examples/provider-package/packages/*/package.json",
|
|
163
|
+
"examples/provider-package/packages/*/tsconfig.json",
|
|
164
|
+
"examples/provider-package/packages/*/src/**/*",
|
|
165
|
+
"examples/provider-package/hypit.runtime.json"
|
|
153
166
|
],
|
|
154
167
|
"scripts": {
|
|
155
168
|
"pack:distribution": "node scripts/pack-distribution.mjs",
|
|
@@ -166,15 +179,15 @@
|
|
|
166
179
|
"prepack": "npm run build:public-types"
|
|
167
180
|
},
|
|
168
181
|
"engines": {
|
|
169
|
-
"node": ">=22.
|
|
182
|
+
"node": ">=22.15.0"
|
|
170
183
|
},
|
|
171
184
|
"devDependencies": {
|
|
172
|
-
"@hypit/browser-capture": "workspace:*",
|
|
173
185
|
"@hypit/artifact": "workspace:*",
|
|
174
186
|
"@hypit/audio-track": "workspace:*",
|
|
175
187
|
"@hypit/audio-track-studio": "workspace:*",
|
|
176
188
|
"@hypit/author-kit": "workspace:*",
|
|
177
189
|
"@hypit/background-removal": "workspace:*",
|
|
190
|
+
"@hypit/browser-capture": "workspace:*",
|
|
178
191
|
"@hypit/build-result": "workspace:*",
|
|
179
192
|
"@hypit/build-result-fs": "workspace:*",
|
|
180
193
|
"@hypit/build-result-kit": "workspace:*",
|
|
@@ -189,9 +202,11 @@
|
|
|
189
202
|
"@hypit/credential-store-os": "workspace:*",
|
|
190
203
|
"@hypit/deck-track": "workspace:*",
|
|
191
204
|
"@hypit/deck-track-studio": "workspace:*",
|
|
205
|
+
"@hypit/elevenlabs-speech": "workspace:*",
|
|
192
206
|
"@hypit/estimate": "workspace:*",
|
|
193
207
|
"@hypit/film": "workspace:*",
|
|
194
208
|
"@hypit/film-studio": "workspace:*",
|
|
209
|
+
"@hypit/fishaudio-speech": "workspace:*",
|
|
195
210
|
"@hypit/fonts-open": "workspace:*",
|
|
196
211
|
"@hypit/generation": "workspace:*",
|
|
197
212
|
"@hypit/gpt-image": "workspace:*",
|
|
@@ -209,16 +224,16 @@
|
|
|
209
224
|
"@hypit/minimax-h3": "workspace:*",
|
|
210
225
|
"@hypit/nano-banana": "workspace:*",
|
|
211
226
|
"@hypit/narrative": "workspace:*",
|
|
227
|
+
"@hypit/performance": "workspace:*",
|
|
228
|
+
"@hypit/performance-studio": "workspace:*",
|
|
212
229
|
"@hypit/program-space": "workspace:*",
|
|
230
|
+
"@hypit/project-context-node": "workspace:*",
|
|
213
231
|
"@hypit/protocol": "workspace:*",
|
|
214
|
-
"@hypit/provider-hyperframes-aws-lambda": "workspace:*",
|
|
215
232
|
"@hypit/provider-hyperframes-local": "workspace:*",
|
|
216
233
|
"@hypit/provider-hypihub": "workspace:*",
|
|
217
234
|
"@hypit/provider-image-opencv-local": "workspace:*",
|
|
218
|
-
"@hypit/provider-kie": "workspace:*",
|
|
219
235
|
"@hypit/provider-media-local": "workspace:*",
|
|
220
236
|
"@hypit/provider-whisperx-local": "workspace:*",
|
|
221
|
-
"@hypit/provider-xiaomi-mimo": "workspace:*",
|
|
222
237
|
"@hypit/ranking": "workspace:*",
|
|
223
238
|
"@hypit/ranking-studio": "workspace:*",
|
|
224
239
|
"@hypit/raster": "workspace:*",
|
|
@@ -236,19 +251,20 @@
|
|
|
236
251
|
"@hypit/seedance": "workspace:*",
|
|
237
252
|
"@hypit/seedance-kits": "workspace:*",
|
|
238
253
|
"@hypit/seedream": "workspace:*",
|
|
239
|
-
"@hypit/
|
|
254
|
+
"@hypit/sound": "workspace:*",
|
|
255
|
+
"@hypit/sound-studio": "workspace:*",
|
|
240
256
|
"@hypit/spatial": "workspace:*",
|
|
241
257
|
"@hypit/speech": "workspace:*",
|
|
242
258
|
"@hypit/speech-alignment": "workspace:*",
|
|
243
259
|
"@hypit/speech-evidence": "workspace:*",
|
|
244
|
-
"@hypit/speech-track": "workspace:*",
|
|
245
|
-
"@hypit/speech-track-studio": "workspace:*",
|
|
246
260
|
"@hypit/store-sqlite": "workspace:*",
|
|
247
261
|
"@hypit/studio-adapter": "workspace:*",
|
|
248
262
|
"@hypit/svs": "workspace:*",
|
|
249
263
|
"@hypit/temporal": "workspace:*",
|
|
250
264
|
"@hypit/temporal-markup": "workspace:*",
|
|
251
265
|
"@hypit/text": "workspace:*",
|
|
266
|
+
"@hypit/timeline": "workspace:*",
|
|
267
|
+
"@hypit/timeline-author": "workspace:*",
|
|
252
268
|
"@hypit/typography-track": "workspace:*",
|
|
253
269
|
"@hypit/typography-track-studio": "workspace:*",
|
|
254
270
|
"@hypit/visual-ir": "workspace:*",
|
|
@@ -263,10 +279,11 @@
|
|
|
263
279
|
"@puppeteer/browsers": "3.2.2",
|
|
264
280
|
"koffi": "3.2.1",
|
|
265
281
|
"puppeteer-core": "25.10.0",
|
|
266
|
-
"sharp": "0.35.
|
|
282
|
+
"sharp": "0.35.4",
|
|
267
283
|
"cmu-pronouncing-dictionary": "3.0.0",
|
|
268
284
|
"tsx": "4.21.0",
|
|
269
285
|
"typescript": "5.9.3",
|
|
270
|
-
"vite": "8.2.2"
|
|
286
|
+
"vite": "8.2.2",
|
|
287
|
+
"cjs-module-lexer": "2.2.1"
|
|
271
288
|
}
|
|
272
289
|
}
|
|
@@ -1,37 +1,37 @@
|
|
|
1
1
|
# `@hypit/audio-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
|
|
|
7
7
|
Place music, ambience and sound effects in the assembled video. A reveal sound can follow a Script
|
|
8
8
|
Moment; music can occupy a Segment or the program; an explicitly timed sound can use clock placement.
|
|
9
|
-
Performance audio
|
|
9
|
+
Performance audio is presented by [Sound](../sound/README.md) from the assembled Timeline and can continue
|
|
10
10
|
under these independent sounds and [Media Track](../media-track/README.md) coverage.
|
|
11
11
|
|
|
12
|
-
Each
|
|
12
|
+
Each Item consumes normalized audio-bearing media and a projected Window. Gain, fades, trim and
|
|
13
13
|
playback express the mix. Normalization preserves the source level; choose the balance and any
|
|
14
|
-
music ducking for the actual performance. The resulting `.
|
|
14
|
+
music ducking for the actual performance. The resulting `.audio` is a peer AudioTrack in Film.
|
|
15
15
|
|
|
16
|
-
## Authoring
|
|
16
|
+
## Authoring items
|
|
17
17
|
|
|
18
|
-
The Markup Track selects `
|
|
19
|
-
Each
|
|
18
|
+
The Markup Track selects `timeline`; its Fragment receives the same Timeline.
|
|
19
|
+
Each Item accepts one shared temporal Window form: `during="program"`, a Selection or Segment,
|
|
20
20
|
a Moment paired with `for`, or explicit `start`/`end` expressions. The source must already contain
|
|
21
|
-
normalized audio. This excerpt assumes imports, Script,
|
|
21
|
+
normalized audio. This excerpt assumes imports, Script, Timeline, Clock and source media exist:
|
|
22
22
|
|
|
23
23
|
```svml
|
|
24
24
|
<pipeline:Normalize id="hit-media" source={hit-source}
|
|
25
25
|
video="none" audio="default" span-authority="audio" clock={clock}/>
|
|
26
|
-
<audio:Track id="effects"
|
|
27
|
-
<audio:
|
|
26
|
+
<audio:Track id="effects" timeline={speech.timeline}>
|
|
27
|
+
<audio:Item source={hit-media.media} at={story.moment.reveal} for="600ms"
|
|
28
28
|
playback="once" gain="0.45" fade-in="0f" fade-out="3f"/>
|
|
29
29
|
</audio:Track>
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
The Track publishes `.program` and `.
|
|
32
|
+
The Track publishes `.program` and `.audio`; include the latter as a peer Film Track. `gain` is a
|
|
33
33
|
linear multiplier, defaulting to `1`; fade durations default to `0f`. Trim boundaries are source
|
|
34
|
-
durations (`f`, integer `ms`, or fractional `s`), distinct from the
|
|
34
|
+
durations (`f`, integer `ms`, or fractional `s`), distinct from the Item's destination Window.
|
|
35
35
|
`trim-end` is the exclusive source endpoint, not an amount to subtract from the tail. For example,
|
|
36
36
|
`trim-start="1s" trim-end="3s"` selects the source interval from one to three seconds.
|
|
37
37
|
|
|
@@ -41,3 +41,10 @@ requires authored `min-rate` and `max-rate` bounds. Other playback modes reject
|
|
|
41
41
|
Choose occupancy from the intended sound; the Track does not silently loop music or stretch a hit
|
|
42
42
|
to fill a longer Window. Its source level is retained unless gain or another explicit audio operation
|
|
43
43
|
changes it.
|
|
44
|
+
|
|
45
|
+
Media Track and Audio Track both place independent Items on the same Timeline.
|
|
46
|
+
Overlapping pictures compose by draw order; overlapping sounds mix together.
|
|
47
|
+
Give an Item an `id` when it needs a recognizable author name. Studio otherwise
|
|
48
|
+
displays its source reference; the generated internal identity still owns
|
|
49
|
+
selection and writeback. Reusing a source in two Items keeps two independent
|
|
50
|
+
placements, even when their displayed names match.
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
"@hypit/narrative": "workspace:*",
|
|
19
19
|
"@hypit/program-space": "workspace:*",
|
|
20
20
|
"@hypit/protocol": "workspace:*",
|
|
21
|
-
"@hypit/
|
|
21
|
+
"@hypit/timeline": "workspace:*",
|
|
22
22
|
"@hypit/temporal": "workspace:*",
|
|
23
23
|
"@hypit/temporal-markup": "workspace:*",
|
|
24
24
|
"@hypit/markup": "workspace:*"
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import type { Timeline } from "@hypit/timeline";
|
|
1
2
|
import type { ComponentPackage } from "@hypit/component-kit";
|
|
2
3
|
import type { SynchronizedMedia } from "@hypit/media";
|
|
3
4
|
import { canonicalize } from "@hypit/protocol";
|
|
4
5
|
import type { StoredValue } from "@hypit/protocol";
|
|
5
|
-
import type { ProgramSpace } from "@hypit/program-space";
|
|
6
6
|
|
|
7
7
|
import { audioTrackProducers, audioTrackTypes } from "./manifest.js";
|
|
8
8
|
import { appendProjectedAudioItem, assertAudioTrackProgram, createAudioTrackSet, finalizeAudioTrack, renderAudioTrack } from "./program.js";
|
|
@@ -15,14 +15,14 @@ function inline<T>(value: StoredValue | undefined, label: string): T {
|
|
|
15
15
|
}
|
|
16
16
|
const output = (value: unknown) => ({ kind: "inline" as const, value: canonicalize(value) });
|
|
17
17
|
|
|
18
|
-
const base = (inputs: [AudioTrackSet, AudioTrackHeader,
|
|
18
|
+
const base = (inputs: [AudioTrackSet, AudioTrackHeader, Timeline, SynchronizedMedia, AudioClipSpec, TemporalWindow]) => output(appendProjectedAudioItem(...inputs));
|
|
19
19
|
|
|
20
20
|
export const audioTrackComponent = {
|
|
21
21
|
producers: [
|
|
22
22
|
{ producer: audioTrackProducers.createSet, handler: () => ({ outputs: { set: output(createAudioTrackSet()) }, needs: {} }) },
|
|
23
23
|
{ producer: audioTrackProducers.appendItem, handler: ({ inputs }) => ({ outputs: { set: base([
|
|
24
24
|
inline<AudioTrackSet>(inputs.set?.value, "AudioTrackSet"), inline<AudioTrackHeader>(inputs.header?.value, "AudioTrackHeader"),
|
|
25
|
-
inline<
|
|
25
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<SynchronizedMedia>(inputs.media?.value, "SynchronizedMedia"),
|
|
26
26
|
inline<AudioClipSpec>(inputs.spec?.value, "AudioClipSpec"),
|
|
27
27
|
inline<TemporalWindow>(inputs.window?.value, "TemporalWindow"),
|
|
28
28
|
]) }, needs: {} }) },
|
|
@@ -30,7 +30,7 @@ export const audioTrackComponent = {
|
|
|
30
30
|
inline<AudioTrackSet>(inputs.set?.value, "AudioTrackSet"), inline<AudioTrackHeader>(inputs.header?.value, "AudioTrackHeader"),
|
|
31
31
|
)) }, needs: {} }) },
|
|
32
32
|
{ producer: audioTrackProducers.render, handler: ({ inputs }) => ({ outputs: { track: output(renderAudioTrack(
|
|
33
|
-
inline<
|
|
33
|
+
inline<Timeline>(inputs.timeline?.value, "Timeline"), inline<AudioTrackProgram>(inputs.program?.value, "AudioTrackProgram"),
|
|
34
34
|
)) }, needs: {} }) },
|
|
35
35
|
],
|
|
36
36
|
validators: [{
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { timelineTypes } from "@hypit/timeline";
|
|
2
|
+
|
|
2
3
|
import { compositionTypes } from "@hypit/composition";
|
|
3
4
|
import { sealGraphFragment } from "@hypit/elaborator";
|
|
4
5
|
import type { FragmentOperation } from "@hypit/elaborator";
|
|
@@ -32,7 +33,7 @@ export function createAudioTrackFragment(items: readonly AudioTrackFragmentItem[
|
|
|
32
33
|
id,
|
|
33
34
|
producer: audioTrackProducers.appendItem,
|
|
34
35
|
inputs: {
|
|
35
|
-
set: operation(current), header: input("header"),
|
|
36
|
+
set: operation(current), header: input("header"), timeline: input("timeline"),
|
|
36
37
|
media: input(item.mediaName), spec: input(item.specName),
|
|
37
38
|
window: input(item.windowName),
|
|
38
39
|
},
|
|
@@ -42,18 +43,18 @@ export function createAudioTrackFragment(items: readonly AudioTrackFragmentItem[
|
|
|
42
43
|
});
|
|
43
44
|
operations.push(
|
|
44
45
|
{ id: "audio:program", producer: audioTrackProducers.finalize, inputs: { set: operation(current), header: input("header") }, result: { kind: "output", name: "program" } },
|
|
45
|
-
{ id: "audio:track", producer: audioTrackProducers.render, inputs: {
|
|
46
|
+
{ id: "audio:track", producer: audioTrackProducers.render, inputs: { timeline: input("timeline"), program: operation("audio:program") }, result: { kind: "output", name: "track" } },
|
|
46
47
|
);
|
|
47
48
|
return sealGraphFragment({
|
|
48
49
|
inputs: [
|
|
49
50
|
{ name: "header", type: audioTrackTypes.header },
|
|
50
|
-
{ name: "
|
|
51
|
+
{ name: "timeline", type: timelineTypes.track },
|
|
51
52
|
...[...inputTypes].map(([inputName, type]) => ({ name: inputName, type })),
|
|
52
53
|
],
|
|
53
54
|
operations,
|
|
54
55
|
exports: [
|
|
55
56
|
{ name: "program", type: audioTrackTypes.program, root: operation("audio:program") },
|
|
56
|
-
{ name: "
|
|
57
|
+
{ name: "audio", type: compositionTypes.audioTrack, root: operation("audio:track") },
|
|
57
58
|
],
|
|
58
59
|
});
|
|
59
60
|
}
|
|
@@ -2,6 +2,6 @@ export { audioTrackComponent } from "./component.js";
|
|
|
2
2
|
export { createAudioTrackFragment, programAudioTrackFragment } from "./fragment.js";
|
|
3
3
|
export type { AudioTrackFragmentItem } from "./fragment.js";
|
|
4
4
|
export { audioClipSpecSchema, audioTrackDependency, audioTrackHeaderSchema, audioTrackManifest, audioTrackMarkupSurfaces, audioTrackModuleRef, audioTrackProducers, audioTrackProgramSchema, audioTrackSetSchema, audioTrackTypes } from "./manifest.js";
|
|
5
|
-
export { decodeAudioTrackSurface } from "./surface.js";
|
|
5
|
+
export { decodeAudioTrackSurface, audioItemDefaults } from "./surface.js";
|
|
6
6
|
export { appendProjectedAudioItem, assertAudioClipSpec, assertAudioTrackHeader, assertAudioTrackProgram, assertAudioTrackSet, createAudioTrackSet, finalizeAudioTrack, renderAudioTrack, sealAudioClipSpec, sealAudioTrackHeader, sealAudioTrackProgram } from "./program.js";
|
|
7
7
|
export type * from "./types.js";
|