@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
|
@@ -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.6",
|
|
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": {
|
|
@@ -117,6 +125,8 @@
|
|
|
117
125
|
"packages/*/README.md",
|
|
118
126
|
"packages/temporal-markup/EDITING.md",
|
|
119
127
|
"packages/studio/INSPECTOR.md",
|
|
128
|
+
"packages/studio/LOCALIZATION.md",
|
|
129
|
+
"packages/studio/locales/*.json",
|
|
120
130
|
"services/image-opencv/pyproject.toml",
|
|
121
131
|
"services/image-opencv/package.json",
|
|
122
132
|
"services/image-opencv/uv.lock",
|
|
@@ -149,7 +159,12 @@
|
|
|
149
159
|
"examples/semantic-composition/*.svml",
|
|
150
160
|
"examples/semantic-composition/*.svrun",
|
|
151
161
|
"examples/semantic-composition/*.svs",
|
|
152
|
-
"examples/semantic-composition/hypit.runtime.json"
|
|
162
|
+
"examples/semantic-composition/hypit.runtime.json",
|
|
163
|
+
"examples/provider-package/README.md",
|
|
164
|
+
"examples/provider-package/packages/*/package.json",
|
|
165
|
+
"examples/provider-package/packages/*/tsconfig.json",
|
|
166
|
+
"examples/provider-package/packages/*/src/**/*",
|
|
167
|
+
"examples/provider-package/hypit.runtime.json"
|
|
153
168
|
],
|
|
154
169
|
"scripts": {
|
|
155
170
|
"pack:distribution": "node scripts/pack-distribution.mjs",
|
|
@@ -159,6 +174,7 @@
|
|
|
159
174
|
"docs:build": "vitepress build docs",
|
|
160
175
|
"docs:preview": "vitepress preview docs",
|
|
161
176
|
"test": "node test/run.mjs",
|
|
177
|
+
"test:runtime-scale": "node test/run.mjs runtime-scale",
|
|
162
178
|
"test:whisperx-service": "uv run --project services/whisperx --frozen python -m unittest discover -s services/whisperx/tests -p \"test_*.py\"",
|
|
163
179
|
"test:image-opencv": "node test/run.mjs image-opencv",
|
|
164
180
|
"hypit": "node bin/hypit.mjs",
|
|
@@ -166,15 +182,15 @@
|
|
|
166
182
|
"prepack": "npm run build:public-types"
|
|
167
183
|
},
|
|
168
184
|
"engines": {
|
|
169
|
-
"node": ">=22.
|
|
185
|
+
"node": ">=22.15.0"
|
|
170
186
|
},
|
|
171
187
|
"devDependencies": {
|
|
172
|
-
"@hypit/browser-capture": "workspace:*",
|
|
173
188
|
"@hypit/artifact": "workspace:*",
|
|
174
189
|
"@hypit/audio-track": "workspace:*",
|
|
175
190
|
"@hypit/audio-track-studio": "workspace:*",
|
|
176
191
|
"@hypit/author-kit": "workspace:*",
|
|
177
192
|
"@hypit/background-removal": "workspace:*",
|
|
193
|
+
"@hypit/browser-capture": "workspace:*",
|
|
178
194
|
"@hypit/build-result": "workspace:*",
|
|
179
195
|
"@hypit/build-result-fs": "workspace:*",
|
|
180
196
|
"@hypit/build-result-kit": "workspace:*",
|
|
@@ -189,9 +205,11 @@
|
|
|
189
205
|
"@hypit/credential-store-os": "workspace:*",
|
|
190
206
|
"@hypit/deck-track": "workspace:*",
|
|
191
207
|
"@hypit/deck-track-studio": "workspace:*",
|
|
208
|
+
"@hypit/elevenlabs-speech": "workspace:*",
|
|
192
209
|
"@hypit/estimate": "workspace:*",
|
|
193
210
|
"@hypit/film": "workspace:*",
|
|
194
211
|
"@hypit/film-studio": "workspace:*",
|
|
212
|
+
"@hypit/fishaudio-speech": "workspace:*",
|
|
195
213
|
"@hypit/fonts-open": "workspace:*",
|
|
196
214
|
"@hypit/generation": "workspace:*",
|
|
197
215
|
"@hypit/gpt-image": "workspace:*",
|
|
@@ -209,16 +227,16 @@
|
|
|
209
227
|
"@hypit/minimax-h3": "workspace:*",
|
|
210
228
|
"@hypit/nano-banana": "workspace:*",
|
|
211
229
|
"@hypit/narrative": "workspace:*",
|
|
230
|
+
"@hypit/performance": "workspace:*",
|
|
231
|
+
"@hypit/performance-studio": "workspace:*",
|
|
212
232
|
"@hypit/program-space": "workspace:*",
|
|
233
|
+
"@hypit/project-context-node": "workspace:*",
|
|
213
234
|
"@hypit/protocol": "workspace:*",
|
|
214
|
-
"@hypit/provider-hyperframes-aws-lambda": "workspace:*",
|
|
215
235
|
"@hypit/provider-hyperframes-local": "workspace:*",
|
|
216
236
|
"@hypit/provider-hypihub": "workspace:*",
|
|
217
237
|
"@hypit/provider-image-opencv-local": "workspace:*",
|
|
218
|
-
"@hypit/provider-kie": "workspace:*",
|
|
219
238
|
"@hypit/provider-media-local": "workspace:*",
|
|
220
239
|
"@hypit/provider-whisperx-local": "workspace:*",
|
|
221
|
-
"@hypit/provider-xiaomi-mimo": "workspace:*",
|
|
222
240
|
"@hypit/ranking": "workspace:*",
|
|
223
241
|
"@hypit/ranking-studio": "workspace:*",
|
|
224
242
|
"@hypit/raster": "workspace:*",
|
|
@@ -236,19 +254,20 @@
|
|
|
236
254
|
"@hypit/seedance": "workspace:*",
|
|
237
255
|
"@hypit/seedance-kits": "workspace:*",
|
|
238
256
|
"@hypit/seedream": "workspace:*",
|
|
239
|
-
"@hypit/
|
|
257
|
+
"@hypit/sound": "workspace:*",
|
|
258
|
+
"@hypit/sound-studio": "workspace:*",
|
|
240
259
|
"@hypit/spatial": "workspace:*",
|
|
241
260
|
"@hypit/speech": "workspace:*",
|
|
242
261
|
"@hypit/speech-alignment": "workspace:*",
|
|
243
262
|
"@hypit/speech-evidence": "workspace:*",
|
|
244
|
-
"@hypit/speech-track": "workspace:*",
|
|
245
|
-
"@hypit/speech-track-studio": "workspace:*",
|
|
246
263
|
"@hypit/store-sqlite": "workspace:*",
|
|
247
264
|
"@hypit/studio-adapter": "workspace:*",
|
|
248
265
|
"@hypit/svs": "workspace:*",
|
|
249
266
|
"@hypit/temporal": "workspace:*",
|
|
250
267
|
"@hypit/temporal-markup": "workspace:*",
|
|
251
268
|
"@hypit/text": "workspace:*",
|
|
269
|
+
"@hypit/timeline": "workspace:*",
|
|
270
|
+
"@hypit/timeline-author": "workspace:*",
|
|
252
271
|
"@hypit/typography-track": "workspace:*",
|
|
253
272
|
"@hypit/typography-track-studio": "workspace:*",
|
|
254
273
|
"@hypit/visual-ir": "workspace:*",
|
|
@@ -263,10 +282,11 @@
|
|
|
263
282
|
"@puppeteer/browsers": "3.2.2",
|
|
264
283
|
"koffi": "3.2.1",
|
|
265
284
|
"puppeteer-core": "25.10.0",
|
|
266
|
-
"sharp": "0.35.
|
|
285
|
+
"sharp": "0.35.4",
|
|
267
286
|
"cmu-pronouncing-dictionary": "3.0.0",
|
|
268
287
|
"tsx": "4.21.0",
|
|
269
288
|
"typescript": "5.9.3",
|
|
270
|
-
"vite": "8.2.2"
|
|
289
|
+
"vite": "8.2.2",
|
|
290
|
+
"cjs-module-lexer": "2.2.1"
|
|
271
291
|
}
|
|
272
292
|
}
|
|
@@ -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";
|