@hypit/hypit 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/public/caption.d.ts +206 -183
- package/dist/public/composition.d.ts +25 -3
- package/dist/public/endpoint-kit.d.ts +24 -2
- package/dist/public/generation.d.ts +5 -1
- package/dist/public/hyperframes.d.ts +19 -1
- package/dist/public/narrative.d.ts +17 -3
- package/dist/public/performance.d.ts +1590 -0
- package/dist/public/program-space.d.ts +179 -32
- package/dist/public/runtime-kit.d.ts +21 -8
- package/dist/public/sound.d.ts +822 -0
- package/dist/public/speech.d.ts +41 -0
- package/dist/public/studio-adapter.d.ts +107 -16
- package/dist/public/temporal-markup.d.ts +9 -44
- package/dist/public/temporal.d.ts +37 -28
- package/dist/public/{semantic-track.d.ts → timeline.d.ts} +62 -49
- package/examples/README.md +18 -10
- package/examples/minimal-author-package/packages/example-component/preview/preview.svml +19 -12
- package/examples/minimal-author-package/packages/example-component/src/component.ts +5 -5
- package/examples/minimal-author-package/packages/example-component/src/fragment.ts +3 -5
- package/examples/minimal-author-package/packages/example-component/src/manifest.ts +8 -10
- package/examples/minimal-author-package/packages/example-component/src/surface.ts +2 -2
- package/examples/provider-package/README.md +78 -0
- package/examples/provider-package/hypit.runtime.json +12 -0
- package/examples/provider-package/packages/provider-images/package.json +11 -0
- package/examples/provider-package/packages/provider-images/src/activation.ts +24 -0
- package/examples/provider-package/packages/provider-images/src/provider.ts +122 -0
- package/examples/provider-package/packages/provider-images/tsconfig.json +9 -0
- package/examples/semantic-composition/README.md +6 -0
- package/examples/semantic-composition/chat.svml +6 -5
- package/examples/semantic-composition/packages/chat-scene/README.md +3 -3
- package/examples/semantic-composition/packages/chat-scene/src/activation.ts +18 -21
- package/examples/semantic-composition/packages/chat-scene/src/render.ts +4 -4
- package/examples/semantic-composition/packages/performance-styles/README.md +42 -0
- package/examples/semantic-composition/packages/performance-styles/package.json +25 -0
- package/examples/semantic-composition/packages/performance-styles/src/activation.ts +57 -0
- package/examples/semantic-composition/packages/performance-styles/src/render.ts +54 -0
- package/examples/semantic-composition/packages/performance-styles/src/studio.ts +28 -0
- package/examples/semantic-composition/packages/performance-styles/tsconfig.json +18 -0
- package/examples/semantic-composition/packages/responsive-explainer/README.md +16 -9
- package/examples/semantic-composition/packages/responsive-explainer/src/activation.ts +12 -12
- package/examples/semantic-composition/packages/responsive-explainer/src/render.ts +5 -5
- package/examples/semantic-composition/packages/sound-styles/README.md +36 -0
- package/examples/semantic-composition/packages/sound-styles/package.json +25 -0
- package/examples/semantic-composition/packages/sound-styles/src/activation.ts +53 -0
- package/examples/semantic-composition/packages/sound-styles/src/render.ts +14 -0
- package/examples/semantic-composition/packages/sound-styles/tsconfig.json +18 -0
- package/package.json +35 -15
- package/packages/audio-track/README.md +20 -13
- package/packages/audio-track/package.json +1 -1
- package/packages/audio-track/src/component.ts +4 -4
- package/packages/audio-track/src/fragment.ts +6 -5
- package/packages/audio-track/src/index.ts +1 -1
- package/packages/audio-track/src/manifest.ts +17 -16
- package/packages/audio-track/src/program.ts +21 -25
- package/packages/audio-track/src/surface.ts +19 -18
- package/packages/audio-track-studio/README.md +23 -0
- package/packages/audio-track-studio/src/index.ts +33 -19
- package/packages/author-kit/README.md +1 -1
- package/packages/background-removal/README.md +4 -7
- package/packages/browser-capture/package.json +1 -1
- package/packages/build-result/README.md +69 -0
- package/packages/build-result/package.json +2 -1
- package/packages/build-result/src/decode.ts +12 -8
- package/packages/build-result/src/execution-log.ts +17 -0
- package/packages/build-result/src/file-reference.ts +42 -0
- package/packages/build-result/src/index.ts +4 -0
- package/packages/build-result/src/replace-file-windows.ts +58 -0
- package/packages/build-result/src/replace-file.ts +11 -0
- package/packages/build-result/src/store.ts +58 -14
- package/packages/build-result/src/types.ts +41 -8
- package/packages/build-result/src/writer.ts +12 -1
- package/packages/build-result-fs/README.md +23 -1
- package/packages/build-result-s3/README.md +5 -0
- package/packages/build-result-s3/src/repository.ts +23 -5
- package/packages/caption/README.md +61 -73
- package/packages/caption/package.json +3 -2
- package/packages/caption/src/activation.ts +2 -2
- package/packages/caption/src/component.ts +20 -5
- package/packages/caption/src/display.ts +3 -18
- package/packages/caption/src/fragment.ts +3 -7
- package/packages/caption/src/index.ts +6 -5
- package/packages/caption/src/manifest.ts +29 -46
- package/packages/caption/src/style.ts +24 -135
- package/packages/caption/src/surface.ts +12 -92
- package/packages/caption/src/temporalize.ts +18 -53
- package/packages/caption/src/types.ts +8 -35
- package/packages/caption/src/visibility.ts +23 -0
- package/packages/caption-fine/README.md +31 -11
- package/packages/caption-fine/package.json +4 -2
- package/packages/caption-fine/src/component.ts +3 -3
- package/packages/caption-fine/src/fragment.ts +7 -19
- package/packages/caption-fine/src/index.ts +2 -0
- package/packages/caption-fine/src/manifest.ts +27 -18
- package/packages/caption-fine/src/recipe.ts +7 -0
- package/packages/caption-fine/src/render.ts +62 -49
- package/packages/caption-fine/src/schedule.ts +39 -35
- package/packages/caption-fine/src/style.ts +10 -9
- package/packages/caption-fine/src/surface.ts +62 -35
- package/packages/caption-fine/src/types.ts +2 -0
- package/packages/caption-fine-studio/README.md +24 -2
- package/packages/caption-fine-studio/package.json +10 -3
- package/packages/caption-fine-studio/src/activation.ts +3 -3
- package/packages/caption-fine-studio/src/index.ts +61 -40
- package/packages/cli/README.md +81 -3
- package/packages/cli/package.json +1 -0
- package/packages/cli/src/arguments.ts +39 -15
- package/packages/cli/src/build-planning.ts +9 -3
- package/packages/cli/src/command.ts +7 -1
- package/packages/cli/src/commands/environment.ts +66 -27
- package/packages/cli/src/commands/execution.ts +81 -26
- package/packages/cli/src/commands/results.ts +7 -11
- package/packages/cli/src/index.ts +2 -2
- package/packages/cli/src/machine-view.ts +15 -5
- package/packages/cli/src/main.ts +38 -42
- package/packages/cli/src/observation.ts +7 -1
- package/packages/cli/src/output.ts +92 -34
- package/packages/cli/src/result-export.ts +22 -13
- package/packages/cli/src/run-file.ts +19 -8
- package/packages/cli/src/view.ts +64 -18
- package/packages/comment-sticker/README.md +3 -3
- package/packages/comment-sticker/package.json +1 -1
- package/packages/comment-sticker/src/component.ts +4 -4
- package/packages/comment-sticker/src/fragment.ts +5 -4
- package/packages/comment-sticker/src/manifest.ts +7 -6
- package/packages/comment-sticker/src/program.ts +9 -9
- package/packages/comment-sticker/src/surface.ts +6 -7
- package/packages/comment-sticker-studio/src/index.ts +2 -1
- package/packages/compiler-node/src/compiler.ts +1 -0
- package/packages/composition/README.md +21 -0
- package/packages/composition/src/audio-presentation.ts +44 -0
- package/packages/composition/src/index.ts +3 -0
- package/packages/composition/src/schema.ts +8 -3
- package/packages/composition/src/track.ts +15 -1
- package/packages/credential-store-env/README.md +1 -1
- package/packages/deck-track/README.md +3 -3
- package/packages/deck-track/package.json +1 -1
- package/packages/deck-track/src/component.ts +5 -5
- package/packages/deck-track/src/fragment.ts +6 -5
- package/packages/deck-track/src/lower.ts +12 -12
- package/packages/deck-track/src/manifest.ts +8 -7
- package/packages/deck-track/src/program.ts +13 -16
- package/packages/deck-track/src/surface.ts +9 -10
- package/packages/driver-node/src/driver.ts +41 -3
- package/packages/elevenlabs-speech/README.md +27 -0
- package/packages/{provider-xiaomi-mimo → elevenlabs-speech}/package.json +5 -8
- package/packages/elevenlabs-speech/src/activation.ts +26 -0
- package/packages/elevenlabs-speech/src/fragment.ts +11 -0
- package/packages/elevenlabs-speech/src/index.ts +111 -0
- package/packages/elevenlabs-speech/src/surface.ts +167 -0
- package/packages/endpoint-kit/README.md +24 -0
- package/packages/endpoint-kit/src/index.ts +7 -1
- package/packages/estimate/README.md +56 -3
- package/packages/estimate/src/program.ts +7 -8
- package/packages/film/README.md +12 -7
- package/packages/film/package.json +1 -1
- package/packages/film/src/component.ts +4 -4
- package/packages/film/src/fragment.ts +6 -5
- package/packages/film/src/manifest.ts +11 -10
- package/packages/film/src/program.ts +5 -5
- package/packages/film/src/recipe.ts +2 -1
- package/packages/film/src/surface.ts +6 -6
- package/packages/film-studio/package.json +1 -1
- package/packages/film-studio/src/index.ts +2 -2
- package/packages/fishaudio-speech/README.md +33 -0
- package/packages/fishaudio-speech/package.json +21 -0
- package/packages/fishaudio-speech/src/activation.ts +32 -0
- package/packages/fishaudio-speech/src/fragment.ts +11 -0
- package/packages/fishaudio-speech/src/index.ts +156 -0
- package/packages/fishaudio-speech/src/surface.ts +192 -0
- package/packages/fonts-open/README.md +5 -0
- package/packages/fonts-open/package.json +5 -1
- package/packages/fonts-open/src/studio.ts +21 -0
- package/packages/generation/README.md +11 -1
- package/packages/generation/src/mapping.ts +28 -30
- package/packages/gpt-image/README.md +1 -2
- package/packages/grok-imagine/README.md +1 -2
- package/packages/hyperframes/README.md +7 -3
- package/packages/hyperframes/src/browser-program.ts +11 -2
- package/packages/hyperframes/src/document.ts +15 -2
- package/packages/interview-emoji-reveal/README.md +4 -4
- package/packages/interview-emoji-reveal/package.json +1 -1
- package/packages/interview-emoji-reveal/src/component.ts +4 -4
- package/packages/interview-emoji-reveal/src/fragment.ts +6 -5
- package/packages/interview-emoji-reveal/src/manifest.ts +9 -8
- package/packages/interview-emoji-reveal/src/program.ts +14 -14
- package/packages/interview-emoji-reveal/src/surface.ts +8 -9
- package/packages/media-execution/README.md +7 -3
- package/packages/media-execution/src/audio-presentation.ts +23 -0
- package/packages/media-execution/src/execute.ts +2 -0
- package/packages/media-pipeline/README.md +7 -3
- package/packages/media-pipeline/src/audio-plan.ts +4 -1
- package/packages/media-pipeline/src/component.ts +16 -2
- package/packages/media-pipeline/src/manifest.ts +3 -1
- package/packages/media-pipeline/src/types.ts +2 -1
- package/packages/media-track/README.md +14 -47
- package/packages/media-track/package.json +1 -1
- package/packages/media-track/preview/preview.svml +5 -5
- package/packages/media-track/src/author.ts +12 -6
- package/packages/media-track/src/component.ts +10 -16
- package/packages/media-track/src/fragment.ts +8 -7
- package/packages/media-track/src/index.ts +3 -1
- package/packages/media-track/src/lower.ts +7 -7
- package/packages/media-track/src/manifest.ts +16 -38
- package/packages/media-track/src/program.ts +62 -67
- package/packages/media-track/src/sampling.ts +6 -6
- package/packages/media-track/src/sequence.ts +8 -8
- package/packages/media-track/src/surface.ts +25 -43
- package/packages/media-track-studio/README.md +9 -0
- package/packages/media-track-studio/src/index.ts +23 -13
- package/packages/mimo-speech/README.md +1 -1
- package/packages/minimax-h3/README.md +1 -1
- package/packages/nano-banana/README.md +1 -1
- package/packages/narrative/README.md +23 -1
- package/packages/narrative/src/identity.ts +11 -0
- package/packages/narrative/src/index.ts +3 -0
- package/packages/narrative/src/schema.ts +28 -27
- package/packages/narrative/src/selection.ts +52 -0
- package/packages/narrative/src/types.ts +2 -0
- package/packages/package-loader-node/README.md +30 -0
- package/packages/package-loader-node/package.json +5 -2
- package/packages/package-loader-node/src/distribution-resolution.ts +10 -3
- package/packages/package-loader-node/src/index.ts +1 -0
- package/packages/package-loader-node/src/loader.ts +12 -15
- package/packages/package-loader-node/src/location.ts +27 -1
- package/packages/package-loader-node/src/module-scope.ts +183 -0
- package/packages/package-loader-node/src/types.ts +4 -0
- package/packages/performance/README.md +83 -0
- package/packages/performance/package.json +30 -0
- package/packages/performance/src/activation.ts +11 -0
- package/packages/performance/src/component.ts +46 -0
- package/packages/performance/src/index.ts +6 -0
- package/packages/performance/src/manifest.ts +53 -0
- package/packages/{media-track/src/performance.ts → performance/src/media.ts} +9 -10
- package/packages/performance/src/program.ts +51 -0
- package/packages/performance/src/style.ts +35 -0
- package/packages/performance/src/surface.ts +99 -0
- package/packages/performance-studio/README.md +25 -0
- package/packages/performance-studio/package.json +21 -0
- package/packages/performance-studio/src/activation.ts +6 -0
- package/packages/performance-studio/src/index.ts +84 -0
- package/packages/program-space/README.md +9 -18
- package/packages/program-space/src/activation.ts +1 -5
- package/packages/program-space/src/index.ts +2 -11
- package/packages/program-space/src/surface.ts +1 -20
- package/packages/project-context-node/README.md +20 -0
- package/packages/project-context-node/package.json +10 -0
- package/packages/project-context-node/src/index.ts +3 -0
- package/packages/{cli → project-context-node}/src/runtime-selection.ts +7 -2
- package/packages/provider-hyperframes-local/README.md +43 -15
- package/packages/provider-hyperframes-local/src/activation.ts +4 -3
- package/packages/provider-hyperframes-local/src/capture-process.ts +26 -4
- package/packages/provider-hyperframes-local/src/capture.ts +96 -26
- package/packages/provider-hyperframes-local/src/concurrency.ts +86 -0
- package/packages/provider-hyperframes-local/src/opaque-capture.ts +92 -0
- package/packages/provider-hyperframes-local/src/options.ts +2 -0
- package/packages/provider-hyperframes-local/src/program.ts +6 -3
- package/packages/provider-hyperframes-local/src/progress.ts +53 -0
- package/packages/provider-hyperframes-local/src/provider.ts +18 -5
- package/packages/provider-hyperframes-local/src/render.ts +48 -7
- package/packages/provider-hypihub/README.md +48 -17
- package/packages/provider-hypihub/package.json +2 -0
- package/packages/provider-hypihub/src/mapping.ts +31 -7
- package/packages/provider-hypihub/src/oauth.ts +6 -0
- package/packages/provider-hypihub/src/provider.ts +25 -13
- package/packages/provider-hypihub/src/routes.ts +1 -2
- package/packages/provider-hypihub/src/upload.ts +2 -0
- package/packages/provider-media-local/README.md +3 -4
- package/packages/provider-whisperx-local/README.md +57 -0
- package/packages/provider-whisperx-local/src/program.ts +1 -0
- package/packages/provider-whisperx-local/src/provider.ts +3 -0
- package/packages/ranking/README.md +8 -6
- package/packages/ranking/package.json +1 -1
- package/packages/ranking/src/component.ts +6 -6
- package/packages/ranking/src/fragment.ts +11 -7
- package/packages/ranking/src/manifest.ts +21 -14
- package/packages/ranking/src/render.ts +33 -35
- package/packages/ranking/src/schedule.ts +16 -19
- package/packages/ranking/src/surface.ts +12 -13
- package/packages/ranking-studio/README.md +29 -0
- package/packages/ranking-studio/package.json +8 -3
- package/packages/ranking-studio/src/index.ts +71 -12
- package/packages/render-hyperframes/README.md +7 -7
- package/packages/render-hyperframes/package.json +1 -1
- package/packages/render-hyperframes/src/component.ts +11 -1
- package/packages/render-hyperframes/src/fragment.ts +7 -4
- package/packages/render-hyperframes/src/manifest.ts +4 -4
- package/packages/render-hyperframes/src/surface.ts +6 -6
- package/packages/runtime/README.md +8 -1
- package/packages/runtime/src/catalog.ts +2 -0
- package/packages/runtime/src/execution.ts +15 -4
- package/packages/runtime/src/index.ts +2 -1
- package/packages/runtime/src/log.ts +51 -0
- package/packages/runtime/src/types.ts +5 -8
- package/packages/runtime-host-node/README.md +30 -0
- package/packages/runtime-host-node/package.json +1 -0
- package/packages/runtime-host-node/src/index.ts +25 -9
- package/packages/runtime-host-node/src/packages.ts +47 -50
- package/packages/runtime-kit/README.md +5 -0
- package/packages/runtime-kit/src/index.ts +3 -1
- package/packages/runtime-local/README.md +111 -4
- package/packages/runtime-local/src/config.ts +202 -56
- package/packages/runtime-local/src/control.ts +9 -1
- package/packages/runtime-local/src/executor.ts +66 -0
- package/packages/runtime-local/src/host.ts +37 -17
- package/packages/runtime-local/src/log.ts +48 -0
- package/packages/runtime-local/src/programs.ts +41 -25
- package/packages/runtime-local/src/result-writer.ts +2 -0
- package/packages/runtime-local/src/runtime.ts +10 -6
- package/packages/runtime-local/src/supervisor.ts +142 -0
- package/packages/runtime-local/src/types.ts +9 -2
- package/packages/runtime-local/src/worker-process.ts +7 -24
- package/packages/runtime-local/src/worker.ts +55 -83
- package/packages/screen-overlay/README.md +3 -3
- package/packages/screen-overlay/package.json +1 -1
- package/packages/screen-overlay/src/component.ts +3 -3
- package/packages/screen-overlay/src/fragment.ts +5 -4
- package/packages/screen-overlay/src/manifest.ts +7 -6
- package/packages/screen-overlay/src/program.ts +9 -9
- package/packages/screen-overlay/src/surface.ts +6 -7
- package/packages/script/README.md +37 -2
- package/packages/script/src/edit.ts +123 -73
- package/packages/script/src/lexical.ts +40 -6
- package/packages/script/src/manifest.ts +2 -2
- package/packages/script/src/narrative.ts +1 -0
- package/packages/script/src/parser.ts +36 -8
- package/packages/script/src/surface.ts +4 -3
- package/packages/script/src/types.ts +5 -1
- package/packages/script-studio/package.json +9 -3
- package/packages/script-studio/src/index.ts +2 -0
- package/packages/script-studio/src/projection.ts +105 -0
- package/packages/seedance/README.md +30 -1
- package/packages/seedance/src/index.ts +18 -7
- package/packages/seedance/src/surface.ts +17 -4
- package/packages/seedance-kits/README.md +10 -2
- package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
- package/packages/seedream/README.md +1 -1
- package/packages/sound/README.md +81 -0
- package/packages/sound/package.json +25 -0
- package/packages/sound/src/activation.ts +11 -0
- package/packages/sound/src/component.ts +28 -0
- package/packages/sound/src/index.ts +5 -0
- package/packages/sound/src/manifest.ts +47 -0
- package/packages/sound/src/program.ts +84 -0
- package/packages/sound/src/style.ts +34 -0
- package/packages/sound/src/surface.ts +90 -0
- package/packages/sound-studio/README.md +22 -0
- package/packages/sound-studio/package.json +20 -0
- package/packages/sound-studio/src/activation.ts +6 -0
- package/packages/sound-studio/src/index.ts +74 -0
- package/packages/speech/README.md +2 -2
- package/packages/speech-alignment/src/align.ts +45 -21
- package/packages/speech-alignment/src/local.ts +8 -0
- package/packages/speech-alignment/src/locate.ts +1 -1
- package/packages/store-sqlite/README.md +7 -0
- package/packages/store-sqlite/src/store.ts +84 -83
- package/packages/studio/INSPECTOR.md +117 -0
- package/packages/studio/README.md +149 -14
- package/packages/studio/package.json +8 -7
- package/packages/studio/src/build-library.ts +99 -84
- package/packages/studio/src/companion-assembly.ts +1 -0
- package/packages/studio/src/domain.ts +1 -1
- package/packages/studio/src/fallback-companions.ts +3 -3
- package/packages/studio/src/feedback-server.ts +51 -0
- package/packages/studio/src/feedback-store.ts +66 -0
- package/packages/studio/src/feedback.ts +60 -0
- package/packages/studio/src/library-media.ts +19 -0
- package/packages/studio/src/parameter-values.ts +83 -1
- package/packages/studio/src/parameters.ts +132 -43
- package/packages/studio/src/preview/render.ts +5 -1
- package/packages/studio/src/preview/runtime-shim.ts +49 -3
- package/packages/studio/src/programme.ts +14 -30
- package/packages/studio/src/server.ts +66 -34
- package/packages/studio/src/shared.ts +24 -8
- package/packages/studio/src/snapshot.ts +21 -132
- package/packages/studio/src/studio-preflight.ts +3 -3
- package/packages/studio/src/studio-registry.ts +72 -6
- package/packages/studio/src/style.css +342 -190
- package/packages/studio/src/temporal-edit.ts +131 -0
- package/packages/studio/src/ui/artifact-name.ts +80 -0
- package/packages/studio/src/ui/artifact-preview.ts +99 -0
- package/packages/studio/src/ui/comments.ts +233 -0
- package/packages/studio/src/ui/icons.ts +10 -1
- package/packages/studio/src/ui/library.ts +373 -192
- package/packages/studio/src/ui/main.ts +291 -110
- package/packages/studio/src/ui/material-preview.ts +1 -1
- package/packages/studio/src/ui/overlay.ts +31 -26
- package/packages/studio/src/ui/scrub-preview.ts +108 -0
- package/packages/studio/src/ui/sidebar-panel.ts +31 -0
- package/packages/studio/src/ui/stage.ts +188 -9
- package/packages/studio/src/ui/timeline.ts +187 -281
- package/packages/studio/start.ts +19 -5
- package/packages/studio-adapter/README.md +151 -11
- package/packages/studio-adapter/src/index.ts +126 -14
- package/packages/temporal/README.md +6 -6
- package/packages/temporal/package.json +1 -1
- package/packages/temporal/src/component.ts +5 -6
- package/packages/temporal/src/index.ts +8 -6
- package/packages/temporal/src/location.ts +11 -11
- package/packages/temporal/src/projection.ts +19 -19
- package/packages/temporal/src/rational.ts +4 -4
- package/packages/temporal-markup/EDITING.md +183 -0
- package/packages/temporal-markup/README.md +31 -11
- package/packages/temporal-markup/package.json +1 -1
- package/packages/temporal-markup/src/index.ts +20 -25
- package/packages/temporal-markup/src/space.ts +10 -41
- package/packages/timeline/README.md +31 -0
- package/packages/{semantic-track → timeline}/package.json +1 -1
- package/packages/timeline/src/activation.ts +8 -0
- package/packages/timeline/src/component.ts +24 -0
- package/packages/timeline/src/identity.ts +60 -0
- package/packages/timeline/src/index.ts +6 -0
- package/packages/{semantic-track → timeline}/src/location.ts +20 -20
- package/packages/timeline/src/manifest.ts +39 -0
- package/packages/{semantic-track → timeline}/src/projection.ts +14 -14
- package/packages/timeline/src/types.ts +24 -0
- package/packages/timeline-author/README.md +68 -0
- package/packages/{speech-track → timeline-author}/package.json +6 -4
- package/packages/timeline-author/src/activation.ts +22 -0
- package/packages/{speech-track → timeline-author}/src/component.ts +15 -13
- package/packages/{speech-track → timeline-author}/src/fragment.ts +14 -23
- package/packages/timeline-author/src/index.ts +7 -0
- package/packages/timeline-author/src/manifest.ts +78 -0
- package/packages/timeline-author/src/program.ts +107 -0
- package/packages/timeline-author/src/surface.ts +46 -0
- package/packages/timeline-author/src/types.ts +6 -0
- package/packages/typography-track/README.md +4 -4
- package/packages/typography-track/package.json +1 -1
- package/packages/typography-track/src/component.ts +4 -4
- package/packages/typography-track/src/fragment.ts +4 -3
- package/packages/typography-track/src/manifest.ts +11 -9
- package/packages/typography-track/src/program.ts +15 -15
- package/packages/typography-track/src/surface.ts +17 -18
- package/packages/typography-track-studio/package.json +8 -3
- package/packages/typography-track-studio/src/index.ts +5 -1
- package/packages/video-cli/README.md +16 -4
- package/packages/video-cli/package.json +2 -1
- package/packages/video-cli/src/creation.ts +25 -9
- package/packages/video-cli/src/index.ts +1 -1
- package/packages/video-cli/src/studio-distribution.ts +2 -1
- package/packages/volcengine-matting/README.md +3 -3
- package/packages/whisperx/README.md +8 -1
- package/packages/workspace/src/index.ts +2 -0
- package/packages/workspace-fs-node/README.md +4 -1
- package/packages/workspace-fs-node/src/workspace.ts +3 -1
- package/services/whisperx/README.md +14 -0
- package/services/whisperx/pyproject.toml +2 -0
- package/services/whisperx/uv.lock +20 -20
- package/packages/provider-hyperframes-aws-lambda/README.md +0 -30
- package/packages/provider-hyperframes-aws-lambda/package.json +0 -30
- package/packages/provider-hyperframes-aws-lambda/src/activation.ts +0 -97
- package/packages/provider-hyperframes-aws-lambda/src/client.ts +0 -114
- package/packages/provider-hyperframes-aws-lambda/src/index.ts +0 -21
- package/packages/provider-hyperframes-aws-lambda/src/provider.ts +0 -522
- package/packages/provider-kie/README.md +0 -134
- package/packages/provider-kie/package.json +0 -43
- package/packages/provider-kie/src/activation.ts +0 -71
- package/packages/provider-kie/src/index.ts +0 -10
- package/packages/provider-kie/src/mapping.ts +0 -182
- package/packages/provider-kie/src/provider.ts +0 -657
- package/packages/provider-kie/src/routes.ts +0 -150
- package/packages/provider-xiaomi-mimo/README.md +0 -32
- package/packages/provider-xiaomi-mimo/src/activation.ts +0 -57
- package/packages/provider-xiaomi-mimo/src/index.ts +0 -5
- package/packages/provider-xiaomi-mimo/src/provider.ts +0 -214
- package/packages/runtime/src/environment.ts +0 -6
- package/packages/semantic-track/README.md +0 -21
- package/packages/semantic-track/src/activation.ts +0 -8
- package/packages/semantic-track/src/component.ts +0 -24
- package/packages/semantic-track/src/identity.ts +0 -58
- package/packages/semantic-track/src/index.ts +0 -6
- package/packages/semantic-track/src/manifest.ts +0 -38
- package/packages/semantic-track/src/types.ts +0 -26
- package/packages/speech-track/README.md +0 -51
- package/packages/speech-track/src/activation.ts +0 -19
- package/packages/speech-track/src/index.ts +0 -7
- package/packages/speech-track/src/manifest.ts +0 -73
- package/packages/speech-track/src/program.ts +0 -64
- package/packages/speech-track/src/surface.ts +0 -35
- package/packages/speech-track/src/types.ts +0 -6
- package/packages/speech-track-studio/README.md +0 -3
- package/packages/speech-track-studio/package.json +0 -14
- package/packages/speech-track-studio/src/activation.ts +0 -7
- package/packages/speech-track-studio/src/index.ts +0 -40
- /package/packages/{cli → project-context-node}/src/project-context.ts +0 -0
- /package/packages/{speech-track → timeline-author}/preview/Track.png +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveTemporalContext } from "@hypit/temporal-markup";
|
|
2
2
|
import {
|
|
3
3
|
assertEmptyElement as empty,
|
|
4
4
|
assertAttributes as allowed,
|
|
@@ -199,7 +199,7 @@ const variantDefinition = {
|
|
|
199
199
|
|
|
200
200
|
function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
|
|
201
201
|
return ({ element, resolveReference }) => {
|
|
202
|
-
const common = ["id", "
|
|
202
|
+
const common = ["id", "timeline", "frame", "during", "terminal", "style", "appear-sound", "move-sound"];
|
|
203
203
|
const attributes = variant === "column" || variant === "tier-board"
|
|
204
204
|
? [...common.filter((name) => name !== "terminal"), "canvas"]
|
|
205
205
|
: common;
|
|
@@ -207,31 +207,30 @@ function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
|
|
|
207
207
|
const id = text(element, "id");
|
|
208
208
|
const selected = variantDefinition[variant];
|
|
209
209
|
const context = resolveTemporalContext({ element, resolveReference });
|
|
210
|
-
const time = createTemporalSpace({ id, element, ...context });
|
|
211
210
|
const canvas = variant === "column" || variant === "tier-board"
|
|
212
211
|
? reference(element.attributes.canvas, `${element.name}.canvas`, spatialTypes.canvas, resolveReference)
|
|
213
212
|
: undefined;
|
|
214
213
|
const frame = reference(element.attributes.frame, `${element.name}.frame`, spatialTypes.frame, resolveReference);
|
|
215
|
-
const outerTemporal = createTemporalWindowProjection({ id: `${id}.outer`, subjectId: id, element, ...context,
|
|
214
|
+
const outerTemporal = createTemporalWindowProjection({ id: `${id}.outer`, subjectId: id, element, ...context, resolveReference });
|
|
216
215
|
const terminalTemporal = variant === "top-three"
|
|
217
216
|
? createTemporalInstantProjection({
|
|
218
|
-
id: `${id}.terminal`, subjectId: id, element, ...context,
|
|
217
|
+
id: `${id}.terminal`, subjectId: id, element, ...context, resolveReference,
|
|
219
218
|
semanticAttribute: "terminal", projectedAttribute: false,
|
|
220
219
|
})
|
|
221
220
|
: undefined;
|
|
222
221
|
const styleRaw = element.attributes.style;
|
|
223
222
|
const style = reference(styleRaw, `${element.name}.style`, selected.style, resolveReference);
|
|
224
223
|
const records: SurfaceRecordDraft[] = [...outerTemporal.records, ...(terminalTemporal?.records ?? [])];
|
|
225
|
-
const temporalComponents: SurfaceComponentDraft[] = [...
|
|
226
|
-
const temporalFragments = [...
|
|
224
|
+
const temporalComponents: SurfaceComponentDraft[] = [...outerTemporal.components, ...(terminalTemporal?.components ?? [])];
|
|
225
|
+
const temporalFragments = [...outerTemporal.fragments, ...(terminalTemporal?.fragments ?? [])];
|
|
227
226
|
const headerId = `${id}.header`;
|
|
228
227
|
records.push({
|
|
229
228
|
id: headerId, type: rankingTypes.header,
|
|
230
229
|
value: { kind: "inline", value: sealRankingHeader({ id, variant }) as unknown as CanonicalValue },
|
|
231
230
|
range: element.range,
|
|
232
231
|
});
|
|
233
|
-
const inputs: Record<string, typeof
|
|
234
|
-
header: { kind: "record", id: headerId },
|
|
232
|
+
const inputs: Record<string, typeof context.timeline.ref> = {
|
|
233
|
+
header: { kind: "record", id: headerId }, timeline: context.timeline.ref, frame: frame.ref,
|
|
235
234
|
outer: outerTemporal.ref, style: style.ref,
|
|
236
235
|
...(canvas === undefined ? {} : { canvas: canvas.ref }),
|
|
237
236
|
...(terminalTemporal === undefined ? {} : { terminal: terminalTemporal.ref }),
|
|
@@ -260,8 +259,8 @@ function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
|
|
|
260
259
|
const contentName = authored.content === undefined ? undefined : `item-${suffix}-content`;
|
|
261
260
|
if (authored.content !== undefined) inputs[contentName!] = authored.content.ref;
|
|
262
261
|
const itemTemporal = !authored.timed ? undefined : variant === "top-three"
|
|
263
|
-
? createTemporalInstantProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context,
|
|
264
|
-
: createTemporalWindowProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context,
|
|
262
|
+
? createTemporalInstantProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context, resolveReference })
|
|
263
|
+
: createTemporalWindowProjection({ id: `${id}.item.${suffix}`, subjectId: spec.id, element: child, ...context, resolveReference });
|
|
265
264
|
if (itemTemporal !== undefined) {
|
|
266
265
|
records.push(...itemTemporal.records);
|
|
267
266
|
temporalComponents.push(...itemTemporal.components);
|
|
@@ -307,12 +306,12 @@ function rankingSurface(variant: RankingVariant): StructuredSurfaceHandler {
|
|
|
307
306
|
id, fragment: fragment.id, inputs,
|
|
308
307
|
outputs: {
|
|
309
308
|
schedule: `${id}.schedule`, program: `${id}.program`, visual: `${id}.visual`,
|
|
310
|
-
...(sound.appearName === undefined && sound.moveName === undefined ? {} : { audio: `${id}.audio` }),
|
|
309
|
+
...(sound.appearName === undefined && sound.moveName === undefined ? {} : { events: `${id}.events`, audio: `${id}.audio` }),
|
|
311
310
|
},
|
|
312
311
|
range: element.range,
|
|
313
312
|
}],
|
|
314
313
|
fragments: [...temporalFragments, fragment],
|
|
315
|
-
exports: [`${id}.schedule`, `${id}.program`, `${id}.visual`, ...(sound.appearName === undefined && sound.moveName === undefined ? [] : [`${id}.audio`])],
|
|
314
|
+
exports: [`${id}.schedule`, `${id}.program`, `${id}.visual`, ...(sound.appearName === undefined && sound.moveName === undefined ? [] : [`${id}.events`, `${id}.audio`])],
|
|
316
315
|
};
|
|
317
316
|
};
|
|
318
317
|
}
|
|
@@ -1,3 +1,32 @@
|
|
|
1
1
|
# `@hypit/ranking-studio`
|
|
2
2
|
|
|
3
3
|
Hypit Studio Companion for the Ranking module's Column, Tier and Top Three surfaces.
|
|
4
|
+
|
|
5
|
+
Each surface has separate visual and audio Companion declarations in this one
|
|
6
|
+
package. Film chooses `.visual` and `.audio` independently; selecting the visual
|
|
7
|
+
output does not connect its sound.
|
|
8
|
+
|
|
9
|
+
The root lane represents the board; `attachments` expose reveal or activation
|
|
10
|
+
events on a detail lane. Both use Studio's ordinary item selection and overlap
|
|
11
|
+
behavior. Their time ranges remain the authored event ranges.
|
|
12
|
+
|
|
13
|
+
Ranking's renderer assigns `subjectId` to each item's rendered phases. The
|
|
14
|
+
Companion associates those phases with the item's `renderIds`, so clicking an
|
|
15
|
+
entering or settled icon selects the same detail entity. The board and preset
|
|
16
|
+
items without a detail event remain associated with the root. Studio measures
|
|
17
|
+
the visible parts at the current frame; the Companion does not duplicate motion
|
|
18
|
+
geometry or infer identities from rendered ID strings.
|
|
19
|
+
|
|
20
|
+
The audio Companion presents a `Ranking Sounds` lane. Each emitted clip shows
|
|
21
|
+
its item and phase (`Appear` or `Move`) with a waveform. It joins the board's
|
|
22
|
+
exported `.events` to the rendered audio clips by exact event identity, so a
|
|
23
|
+
phase without a supplied sound contributes no audio item. `Move` is the motion
|
|
24
|
+
into the board, not an exit sound.
|
|
25
|
+
|
|
26
|
+
Selecting a sound exposes the event trigger as a read-only fact and the shared
|
|
27
|
+
Ranking Style's sound gains and fade-in length as editable fields. Gain is
|
|
28
|
+
displayed as a percentage; edits write the original linear gain to the Style's
|
|
29
|
+
recipe. These fields affect every matching event using that recipe. Event
|
|
30
|
+
timing comes from the Ranking animation; changing the visual event timing
|
|
31
|
+
updates its sound too. The visual Companion owns layout and motion controls,
|
|
32
|
+
while the audio Companion owns the sound controls.
|
|
@@ -4,11 +4,16 @@
|
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"private": true,
|
|
6
6
|
"type": "module",
|
|
7
|
-
"exports": {
|
|
8
|
-
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./src/index.ts"
|
|
9
|
+
},
|
|
10
|
+
"hypit": {
|
|
11
|
+
"activation": "./src/activation.ts"
|
|
12
|
+
},
|
|
9
13
|
"dependencies": {
|
|
10
14
|
"@hypit/ranking": "workspace:*",
|
|
11
15
|
"@hypit/composition": "workspace:*",
|
|
12
|
-
"@hypit/studio-adapter": "workspace:*"
|
|
16
|
+
"@hypit/studio-adapter": "workspace:*",
|
|
17
|
+
"@hypit/fonts-open": "workspace:*"
|
|
13
18
|
}
|
|
14
19
|
}
|
|
@@ -1,17 +1,25 @@
|
|
|
1
|
+
import { openFontStudioFields } from "@hypit/fonts-open/studio";
|
|
1
2
|
import { rankingMarkupSurfaces, rankingModuleRef, rankingTypes } from "@hypit/ranking";
|
|
2
|
-
import type { RankingProgram, RankingSchedule } from "@hypit/ranking";
|
|
3
|
+
import type { RankingProgram, RankingSchedule, RankingSoundEventPlan } from "@hypit/ranking";
|
|
3
4
|
import { compositionTypes } from "@hypit/composition";
|
|
5
|
+
import type { AudioTrack } from "@hypit/composition";
|
|
4
6
|
import type { StudioTrackCompanion, StudioTrackCompanionContext, StudioEntityDraft, StudioInspectorFieldDeclaration, StudioSourceBindingDeclaration } from "@hypit/studio-adapter";
|
|
5
7
|
import { artifactPreview, authoredChildFor, previewLayer, requiredSurfaceValue, temporalLineageFor, temporalSemanticSource } from "@hypit/studio-adapter";
|
|
6
8
|
|
|
9
|
+
|
|
10
|
+
const fontInspector = openFontStudioFields("style");
|
|
11
|
+
|
|
7
12
|
const frameParameters: readonly StudioSourceBindingDeclaration[] = [
|
|
8
13
|
{ name: "within" },
|
|
9
14
|
...["left", "top", "right", "bottom", "x", "y", "width", "height"].map((name) => ({ name, writable: true })),
|
|
10
15
|
];
|
|
11
16
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
17
|
+
const soundProperties = new Set(["appear-gain", "move-gain", "sound-fade-frames"]);
|
|
18
|
+
|
|
19
|
+
function rankingProperties(surface: "column-style" | "tier-style" | "top-three-style", audio = false) {
|
|
20
|
+
return (rankingMarkupSurfaces.find((candidate) => candidate.name === surface)
|
|
21
|
+
?.vocabulary.attributes.find((attribute) => attribute.name === "recipe")?.recipe ?? [])
|
|
22
|
+
.filter((property) => soundProperties.has(property.name) === audio);
|
|
15
23
|
}
|
|
16
24
|
|
|
17
25
|
function title(name: string): string {
|
|
@@ -76,7 +84,7 @@ const rankingInspectorPlacement = {
|
|
|
76
84
|
} as const satisfies Readonly<Record<string, RankingInspectorPlacement>>;
|
|
77
85
|
|
|
78
86
|
function rankingInspector(surface: "column-style" | "tier-style" | "top-three-style"): readonly StudioInspectorFieldDeclaration[] {
|
|
79
|
-
return rankingProperties(surface).map((property) => {
|
|
87
|
+
return [...fontInspector.fields, ...rankingProperties(surface).map((property) => {
|
|
80
88
|
const placement = rankingInspectorPlacement[property.name as keyof typeof rankingInspectorPlacement];
|
|
81
89
|
if (placement === undefined) throw new Error(`Ranking Studio has no explicit placement for ${property.name}.`);
|
|
82
90
|
return {
|
|
@@ -85,13 +93,14 @@ function rankingInspector(surface: "column-style" | "tier-style" | "top-three-st
|
|
|
85
93
|
...placement,
|
|
86
94
|
...(property.summary === undefined ? {} : { summary: property.summary }),
|
|
87
95
|
};
|
|
88
|
-
});
|
|
96
|
+
})];
|
|
89
97
|
}
|
|
90
98
|
|
|
91
|
-
function rankingStyle(surface: "column-style" | "tier-style" | "top-three-style"): StudioSourceBindingDeclaration {
|
|
99
|
+
function rankingStyle(surface: "column-style" | "tier-style" | "top-three-style", audio = false): StudioSourceBindingDeclaration {
|
|
92
100
|
return {
|
|
93
101
|
name: "style",
|
|
94
|
-
|
|
102
|
+
...(audio ? {} : { referenced: [fontInspector.binding] }),
|
|
103
|
+
recipe: { through: ["recipe"], bindings: rankingProperties(surface, audio).map(({ name, schema, fallback }) => ({
|
|
95
104
|
name,
|
|
96
105
|
schema,
|
|
97
106
|
...(fallback === undefined ? {} : { fallback }),
|
|
@@ -133,6 +142,7 @@ function projectRanking(context: StudioTrackCompanionContext): readonly StudioEn
|
|
|
133
142
|
return [{
|
|
134
143
|
id: `${context.track.outputRef}:entity:${entry.itemId}`,
|
|
135
144
|
authoredId: entry.itemId,
|
|
145
|
+
renderIds: context.spans.filter((span) => span.subjectId === entry.itemId).map((span) => span.id),
|
|
136
146
|
...(semanticSource?.id === undefined ? {} : { markerId: semanticSource.id }),
|
|
137
147
|
display: {
|
|
138
148
|
title: label,
|
|
@@ -147,23 +157,72 @@ function projectRanking(context: StudioTrackCompanionContext): readonly StudioEn
|
|
|
147
157
|
...(temporal === undefined ? {} : { temporal }),
|
|
148
158
|
}];
|
|
149
159
|
}).sort((left, right) => left.startFrame - right.startFrame || left.id.localeCompare(right.id));
|
|
150
|
-
|
|
160
|
+
const childRenderIds = new Set(reveals.flatMap((entity) => entity.renderIds ?? []));
|
|
161
|
+
return [{ ...group, renderIds: group.renderIds!.filter((id) => !childRenderIds.has(id)) }, ...reveals];
|
|
151
162
|
}
|
|
152
163
|
|
|
153
164
|
const commonBindings: readonly StudioSourceBindingDeclaration[] = [
|
|
154
165
|
{ name: "frame", referenced: frameParameters },
|
|
155
|
-
{ name: "appear-sound" },
|
|
156
|
-
{ name: "move-sound" },
|
|
157
166
|
];
|
|
158
167
|
|
|
168
|
+
function projectRankingAudio(context: StudioTrackCompanionContext): readonly StudioEntityDraft[] {
|
|
169
|
+
const events = requiredSurfaceValue(context, "events") as RankingSoundEventPlan;
|
|
170
|
+
const byId = new Map(events.events.map((event) => [event.id, event]));
|
|
171
|
+
const clips = new Map((context.track.value as AudioTrack).clips.map((clip) => [clip.id, clip]));
|
|
172
|
+
const boardId = context.placement?.id ?? context.track.outputRef;
|
|
173
|
+
return context.spans.map((span): StudioEntityDraft => {
|
|
174
|
+
const event = byId.get(span.id);
|
|
175
|
+
const clip = clips.get(span.id);
|
|
176
|
+
if (event === undefined || clip === undefined) throw new Error(`Ranking sound ${span.id} has no event or audio clip.`);
|
|
177
|
+
const child = authoredChildFor(context, event.itemId, [rankingTypes.itemSpec, rankingTypes.textItemShell]);
|
|
178
|
+
const label = child?.attributes.label ?? event.itemId;
|
|
179
|
+
const phase = event.kind === "appear" ? "Appear" : "Move";
|
|
180
|
+
return {
|
|
181
|
+
id: `${context.track.outputRef}:entity:${event.id}`,
|
|
182
|
+
authoredId: boardId,
|
|
183
|
+
display: { title: `${label} · ${phase}`, layers: [previewLayer(artifactPreview("audio", clip.artifact.resource), "waveform")] },
|
|
184
|
+
startFrame: span.startFrame, endFrameExclusive: span.endFrameExclusive, stackOrder: span.stackOrder,
|
|
185
|
+
...(context.placement === undefined ? {} : { elementRange: context.placement.range }),
|
|
186
|
+
presentation: { entity: "ranking-sound", chrome: "standard" },
|
|
187
|
+
inspector: [{
|
|
188
|
+
id: "trigger", label: "Trigger", domain: "when", page: { id: "sound", label: "Sound" }, section: { id: "event", label: "Event" },
|
|
189
|
+
value: `${label} · ${phase} · ${event.frame}f`,
|
|
190
|
+
summary: "Follows the Ranking item's animation event. Adjust its visual timing to move the sound with it.",
|
|
191
|
+
}],
|
|
192
|
+
};
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function rankingAudioCompanion(surface: "column" | "tier" | "top-three"): StudioTrackCompanion {
|
|
197
|
+
const style = `${surface}-style` as const;
|
|
198
|
+
return {
|
|
199
|
+
id: `${surface}-audio`, role: "track",
|
|
200
|
+
output: { type: compositionTypes.audioTrack, surface, modules: [rankingModuleRef] },
|
|
201
|
+
family: "audio", tone: "green", label: "Ranking Sounds", icon: "waveform",
|
|
202
|
+
lane: { heightPx: 48 }, requiredValues: ["events"],
|
|
203
|
+
bindings: [{ name: "appear-sound" }, ...(surface === "top-three" ? [] : [{ name: "move-sound" }]), rankingStyle(style, true)],
|
|
204
|
+
inspector: rankingProperties(style, true).map((property) => ({
|
|
205
|
+
binding: `style.${property.name}`, label: property.name === "sound-fade-frames" ? "Fade In" : title(property.name),
|
|
206
|
+
...rankingInspectorPlacement[property.name as keyof typeof rankingInspectorPlacement],
|
|
207
|
+
control: "number",
|
|
208
|
+
...(property.name === "sound-fade-frames"
|
|
209
|
+
? { unit: "f", number: { minimum: 0, step: 1 } }
|
|
210
|
+
: { unit: "%", number: { scale: 100, minimum: 0, step: 1 } }),
|
|
211
|
+
summary: "Shared by every matching sound event using this Ranking style.",
|
|
212
|
+
})),
|
|
213
|
+
project: projectRankingAudio,
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
|
|
159
217
|
const frameInspector: readonly StudioInspectorFieldDeclaration[] = frameParameters
|
|
160
218
|
.filter(({ writable }) => writable === true)
|
|
161
219
|
.map(({ name }) => ({
|
|
162
220
|
binding: `frame.${name}`, label: title(name), domain: "where",
|
|
163
|
-
page: { id: "frame", label: "Frame" }, section: { id: "frame", label: "Frame" }, control: "
|
|
221
|
+
page: { id: "frame", label: "Frame" }, section: { id: "frame", label: "Frame" }, control: "number", number: { suffixes: ["%", "px"], step: 1 },
|
|
164
222
|
}));
|
|
165
223
|
|
|
166
224
|
export const rankingStudioTrackCompanions: readonly StudioTrackCompanion[] = [
|
|
225
|
+
...(["column", "tier", "top-three"] as const).map(rankingAudioCompanion),
|
|
167
226
|
{
|
|
168
227
|
id: "column", role: "track",
|
|
169
228
|
output: { type: compositionTypes.visualTrack, surface: "column", modules: [rankingModuleRef] },
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
# `@hypit/render-hyperframes`
|
|
2
2
|
|
|
3
|
-
The Surface accepts `
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
The Surface accepts `timeline={program.timeline}` and projects its complete ProgramSpace.
|
|
4
|
+
Its Fragment receives that range as `space`; rendering works with partial, overlapping or absent
|
|
5
|
+
semantic coverage through the same frame and audio pipeline.
|
|
6
6
|
|
|
7
7
|
Explicit author and capability boundary for final HyperFrames video rendering.
|
|
8
8
|
|
|
9
9
|
The package owns `<render:Video composition={...}/>` and lowers it to ordinary Operations that:
|
|
10
10
|
|
|
11
|
-
1. obtain the `ProgramSpace` from the
|
|
11
|
+
1. obtain the `ProgramSpace` from the Timeline input and compile the referenced `Composition` into a `HyperframesDocument`;
|
|
12
12
|
2. request a silent, frame-exact `RenderedVisual`;
|
|
13
13
|
3. compile every peer `AudioTrack` into one `AudioProgramPlan`;
|
|
14
14
|
4. request an exact 48 kHz `TimelineAudio`;
|
|
@@ -29,7 +29,7 @@ Core therefore sees three real byte-operation Needs, not one opaque mega-render.
|
|
|
29
29
|
contiguous or interleaved chunks, retries and image-sequence assembly remain inside the selected
|
|
30
30
|
visual Endpoint; clip decoding/mixing remains inside the audio Endpoint; container encoding remains
|
|
31
31
|
inside the mux Endpoint. A single Provider package may implement all three locally, or a Runtime may
|
|
32
|
-
bind them to separate
|
|
32
|
+
bind them to separate compatible Endpoints. The author still sees one `<render:Video>` result.
|
|
33
33
|
|
|
34
34
|
Film is not a dependency of this author meaning. Any package that produces the common Composition
|
|
35
35
|
contract can feed the render Surface. Conversely, targeting Composition never demands this package;
|
|
@@ -43,7 +43,7 @@ stream with the declared canvas, rational frame rate and frame count.
|
|
|
43
43
|
Select a contiguous interval using zero-based, half-open frame bounds:
|
|
44
44
|
|
|
45
45
|
```xml
|
|
46
|
-
<render:Video id="preview" composition={main.composition}
|
|
46
|
+
<render:Video id="preview" composition={main.composition} timeline={speech.timeline}
|
|
47
47
|
start-frame="240" end-frame-exclusive="360"/>
|
|
48
48
|
```
|
|
49
49
|
|
|
@@ -54,5 +54,5 @@ Provider's Runtime configuration.
|
|
|
54
54
|
|
|
55
55
|
In TypeScript, `hyperframesVisualRequest(document, { range })` constructs the visual request;
|
|
56
56
|
`createRenderHyperframesFragment(true)` accepts a `MediaFrameRange` input and connects it to visual
|
|
57
|
-
and audio requests.
|
|
57
|
+
and audio requests. Provider support checks establish range support for other deployments. Selection limits
|
|
58
58
|
final rendering work; it does not prune upstream generation dependencies.
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"@hypit/media-pipeline": "workspace:*",
|
|
21
21
|
"@hypit/program-space": "workspace:*",
|
|
22
22
|
"@hypit/protocol": "workspace:*",
|
|
23
|
-
"@hypit/
|
|
23
|
+
"@hypit/timeline": "workspace:*",
|
|
24
24
|
"@hypit/markup": "workspace:*",
|
|
25
25
|
"@hypit/temporal-markup": "workspace:*"
|
|
26
26
|
},
|
|
@@ -4,6 +4,7 @@ import type { ComponentPackage } from "@hypit/component-kit";
|
|
|
4
4
|
import type { StoredValue } from "@hypit/protocol";
|
|
5
5
|
|
|
6
6
|
import { hyperframesVisualRequest } from "./product.js";
|
|
7
|
+
import type { HyperframesVisualRequest } from "./product.js";
|
|
7
8
|
import { renderHyperframesCapabilities, renderHyperframesProducers } from "./manifest.js";
|
|
8
9
|
|
|
9
10
|
/** Declares the visual Need. It contains no renderer, queue, credentials or deployment choice. */
|
|
@@ -26,7 +27,16 @@ export const renderHyperframesComponent = {
|
|
|
26
27
|
return { constraints: {}, pendingInputs: plannedNeedInputs(state, step) };
|
|
27
28
|
},
|
|
28
29
|
present(specification) {
|
|
29
|
-
|
|
30
|
+
const request = specification.constraints as Partial<HyperframesVisualRequest>;
|
|
31
|
+
if (request.document === undefined) return { fields: {}, references: {} };
|
|
32
|
+
const { document, range } = request;
|
|
33
|
+
const startFrame = range?.startFrame ?? 0;
|
|
34
|
+
const endFrameExclusive = range?.endFrameExclusive ?? document.frameCount;
|
|
35
|
+
return { fields: {
|
|
36
|
+
width: [document.canvas.width], height: [document.canvas.height],
|
|
37
|
+
startFrame: [startFrame], endFrameExclusive: [endFrameExclusive],
|
|
38
|
+
frameRate: [`${document.frameRate.numerator}/${document.frameRate.denominator}`],
|
|
39
|
+
}, references: {} };
|
|
30
40
|
},
|
|
31
41
|
})),
|
|
32
42
|
} satisfies ComponentPackage;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { timelineProducers, timelineTypes } from "@hypit/timeline";
|
|
1
2
|
import { mediaTypes } from "@hypit/media";
|
|
2
3
|
import { artifactTypes } from "@hypit/artifact";
|
|
3
|
-
|
|
4
|
+
|
|
4
5
|
import { compositionTypes } from "@hypit/composition";
|
|
5
6
|
import { sealGraphFragment } from "@hypit/elaborator";
|
|
6
7
|
import { hyperframesProducers } from "@hypit/hyperframes";
|
|
@@ -17,14 +18,16 @@ export function createRenderHyperframesFragment(selectedRange = false) {
|
|
|
17
18
|
return sealGraphFragment({
|
|
18
19
|
inputs: [
|
|
19
20
|
{ name: "composition", type: compositionTypes.composition },
|
|
20
|
-
{ name: "
|
|
21
|
+
{ name: "timeline", type: timelineTypes.track },
|
|
21
22
|
...(selectedRange ? [{ name: "range", type: mediaTypes.frameRange }] : []),
|
|
22
23
|
],
|
|
23
24
|
operations: [
|
|
25
|
+
{ id: "render-range", producer: timelineProducers.projectProgramSpace,
|
|
26
|
+
inputs: { track: input("timeline") }, result: { kind: "output", name: "space" } },
|
|
24
27
|
{
|
|
25
28
|
id: "compile-document",
|
|
26
29
|
producer: hyperframesProducers.compile,
|
|
27
|
-
inputs: { composition: input("composition"), space:
|
|
30
|
+
inputs: { composition: input("composition"), space: operation("render-range") },
|
|
28
31
|
result: { kind: "output", name: "document" },
|
|
29
32
|
},
|
|
30
33
|
{
|
|
@@ -36,7 +39,7 @@ export function createRenderHyperframesFragment(selectedRange = false) {
|
|
|
36
39
|
{
|
|
37
40
|
id: "compile-audio-program",
|
|
38
41
|
producer: mediaPipelineProducers.planAudio,
|
|
39
|
-
inputs: { composition: input("composition"), space:
|
|
42
|
+
inputs: { composition: input("composition"), space: operation("render-range") },
|
|
40
43
|
result: { kind: "output", name: "plan" },
|
|
41
44
|
},
|
|
42
45
|
{
|
|
@@ -2,7 +2,7 @@ import { temporalContextAttributeVocabulary } from "@hypit/temporal-markup";
|
|
|
2
2
|
import { artifactDependency, artifactTypes } from "@hypit/artifact";
|
|
3
3
|
import { mediaDependency, mediaTypes } from "@hypit/media";
|
|
4
4
|
import { compositionDependency, compositionTypes } from "@hypit/composition";
|
|
5
|
-
import {
|
|
5
|
+
import { timelineDependency } from "@hypit/timeline";
|
|
6
6
|
import {
|
|
7
7
|
hyperframesManifest,
|
|
8
8
|
hyperframesModuleRef,
|
|
@@ -48,9 +48,9 @@ export const renderHyperframesMarkupSurfaces = [{
|
|
|
48
48
|
{ name: "video", type: artifactTypes.blob,
|
|
49
49
|
summary: "The final muxed video Artifact, addressed as `<id>.video`." },
|
|
50
50
|
],
|
|
51
|
-
example: '<render:Video id="final" composition={main.composition}
|
|
51
|
+
example: '<render:Video id="final" composition={main.composition} timeline={speech.timeline}/>',
|
|
52
52
|
notes: [
|
|
53
|
-
"Supply id, composition and
|
|
53
|
+
"Supply id, composition and timeline. Write both frame bounds to select a range. The element is empty.",
|
|
54
54
|
"The visual render, the audio render and the mux are three separate Needs, each realized by a Provider this package does not choose.",
|
|
55
55
|
"The published Artifact carries no duration or lineage metadata, so a consumer that needs stream facts requests explicit media inspection.",
|
|
56
56
|
],
|
|
@@ -66,7 +66,7 @@ export const renderHyperframesManifest: ModuleManifest = {
|
|
|
66
66
|
artifactDependency,
|
|
67
67
|
mediaDependency,
|
|
68
68
|
compositionDependency,
|
|
69
|
-
|
|
69
|
+
timelineDependency,
|
|
70
70
|
{ module: hyperframesModuleRef },
|
|
71
71
|
{ module: mediaPipelineModuleRef },
|
|
72
72
|
],
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveTemporalContext } from "@hypit/temporal-markup";
|
|
2
2
|
import { compositionTypes } from "@hypit/composition";
|
|
3
3
|
import { mediaTypes, verifyMediaFrameRange } from "@hypit/media";
|
|
4
4
|
import type {
|
|
@@ -25,7 +25,7 @@ function referenceAttribute(element: StructuredElement, name: string): string {
|
|
|
25
25
|
|
|
26
26
|
export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ element, resolveReference }) => {
|
|
27
27
|
const names = Object.keys(element.attributes).sort();
|
|
28
|
-
if (names.some((name) => !["composition", "id", "
|
|
28
|
+
if (names.some((name) => !["composition", "id", "timeline", "start-frame", "end-frame-exclusive"].includes(name))) {
|
|
29
29
|
throw new Error(`${element.name} contains unsupported attributes`);
|
|
30
30
|
}
|
|
31
31
|
if (element.children.some((child) => child.kind === "element" || child.value.trim().length > 0)) {
|
|
@@ -40,7 +40,7 @@ export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ eleme
|
|
|
40
40
|
|| composition.type.name !== compositionTypes.composition.name) {
|
|
41
41
|
throw new Error(`${element.name}.composition must reference Composition`);
|
|
42
42
|
}
|
|
43
|
-
const
|
|
43
|
+
const context = resolveTemporalContext({ element, resolveReference });
|
|
44
44
|
const selected = element.attributes["start-frame"] !== undefined || element.attributes["end-frame-exclusive"] !== undefined;
|
|
45
45
|
const frame = (name: string): number => {
|
|
46
46
|
const text = stringAttribute(element, name);
|
|
@@ -53,13 +53,13 @@ export const decodeHyperframesRenderSurface: StructuredSurfaceHandler = ({ eleme
|
|
|
53
53
|
const rangeId = `${id}.frame-range`;
|
|
54
54
|
return {
|
|
55
55
|
records: range === undefined ? [] : [{ id: rangeId, type: mediaTypes.frameRange, value: { kind: "inline", value: range }, range: element.range }],
|
|
56
|
-
components: [
|
|
56
|
+
components: [{
|
|
57
57
|
id,
|
|
58
58
|
fragment: fragment.id,
|
|
59
|
-
inputs: { composition: composition.ref,
|
|
59
|
+
inputs: { composition: composition.ref, timeline: context.timeline.ref, ...(selected ? { range: { kind: "record" as const, id: rangeId } } : {}) },
|
|
60
60
|
outputs: { video: `${id}.video` },
|
|
61
61
|
range: element.range,
|
|
62
62
|
}],
|
|
63
|
-
fragments: [
|
|
63
|
+
fragments: [fragment],
|
|
64
64
|
};
|
|
65
65
|
};
|
|
@@ -7,7 +7,7 @@ The package defines the small ports used by a runtime:
|
|
|
7
7
|
* `BuildStore` keeps one active Build definition and its accepted facts until the Result is saved and active state is removed.
|
|
8
8
|
* `OperationStore` keeps asynchronous external work only while the owning Build is active.
|
|
9
9
|
* `PendingBuildStore` owns the short submission transaction before the Build becomes active.
|
|
10
|
-
* `BuildExecutionStore` owns active scheduling facts, a stop request, the immutable decision, attention and shared capacity reservations.
|
|
10
|
+
* `BuildExecutionStore` owns active scheduling facts, opaque Host execution choices, a stop request, the immutable decision, attention and shared capacity reservations.
|
|
11
11
|
* `ResourceStore` is the transient byte gateway used during Provider execution.
|
|
12
12
|
* `CredentialStore` resolves secrets outside source and build state.
|
|
13
13
|
* `RuntimeCommandExecutor` turns the commands regenerated by Core into component or endpoint calls.
|
|
@@ -37,3 +37,10 @@ Capacity claims describe occupancy; action rate budgets describe admissions over
|
|
|
37
37
|
Operation holds its declared occupancy while Runtime manages the remote task. Its submit, poll and
|
|
38
38
|
collect actions can have separate concurrency and rate limits. Waiting claims park until a resource
|
|
39
39
|
release or their next eligible time; polling does not require rematerializing the whole Build.
|
|
40
|
+
|
|
41
|
+
The local Host uses one code context per Build. `claim(owner, now, build)` limits an executor to its
|
|
42
|
+
own work; `start` records launch, and `interrupt` concludes a lost executor after its owner confirms
|
|
43
|
+
exit. These stores do not prescribe processes or module loading. They retain one active execution
|
|
44
|
+
record, while components and Providers remain ordinary replaceable implementations.
|
|
45
|
+
There is no turn-reclaim operation that makes a lost attempt runnable again. Result-writer ownership
|
|
46
|
+
can be cleared independently so an already decided outcome can still be saved.
|
|
@@ -10,7 +10,9 @@ export type BuildOutcome = "complete" | "failed" | "cancelled";
|
|
|
10
10
|
|
|
11
11
|
export type BuildExecutionRequest = {
|
|
12
12
|
readonly build: string;
|
|
13
|
-
/**
|
|
13
|
+
/** Host-owned execution choices. Opaque to the graph and Core. */
|
|
14
|
+
readonly context?: import("@hypit/protocol").CanonicalValue;
|
|
15
|
+
/** Installed component packages loaded when this execution context starts. */
|
|
14
16
|
readonly componentPackages: readonly string[];
|
|
15
17
|
/** Exact project Result Repository selected at submission. */
|
|
16
18
|
readonly result: BuildResultRepositoryLocation;
|
|
@@ -48,6 +50,8 @@ export type BuildResultWriteLease = BuildExecutionTurn;
|
|
|
48
50
|
*/
|
|
49
51
|
export type BuildExecutionSnapshot = BuildExecutionRequest & {
|
|
50
52
|
readonly createdAt: number;
|
|
53
|
+
/** An execution context has been assigned; losing it ends this attempt. */
|
|
54
|
+
readonly startedAt?: number;
|
|
51
55
|
/** Absent when waiting for a resource release. */
|
|
52
56
|
readonly wakeAt?: number;
|
|
53
57
|
/** Only these Operations can advance the Build until their next outcome. */
|
|
@@ -79,10 +83,14 @@ export type BuildExecutionStore = {
|
|
|
79
83
|
create(request: BuildExecutionRequest, options?: { readonly now?: number }): Promise<BuildExecutionSnapshot>;
|
|
80
84
|
read(build: string): Promise<BuildExecutionSnapshot | undefined>;
|
|
81
85
|
list(): Promise<readonly BuildExecutionSnapshot[]>;
|
|
86
|
+
/** Lightweight scheduling views; no Definition, Profile or Operation payloads are loaded. */
|
|
87
|
+
listUnstarted(): Promise<readonly string[]>;
|
|
88
|
+
listReady(now?: number): Promise<readonly string[]>;
|
|
82
89
|
/** Atomically take one ready, undecided execution turn for this Worker owner. */
|
|
83
|
-
claim(owner: string, now?: number): Promise<BuildExecutionSnapshot | undefined>;
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
claim(owner: string, now?: number, build?: string): Promise<BuildExecutionSnapshot | undefined>;
|
|
91
|
+
start(build: string, now?: number): Promise<BuildExecutionSnapshot>;
|
|
92
|
+
/** Conclude after the owner confirms this execution context has ended. Never repeats external work. */
|
|
93
|
+
interrupt(build: string, reason: string): Promise<BuildExecutionSnapshot>;
|
|
86
94
|
/** An unobserved stop wakes the next turn immediately to finish the attempt. */
|
|
87
95
|
releaseTurn(build: string, owner: string, wakeAt: number | undefined, operationWait?: readonly string[]): Promise<BuildExecutionSnapshot>;
|
|
88
96
|
/** Freeze the one conclusion. An execution with a decision can never be claimed again. */
|
|
@@ -106,6 +114,8 @@ export type CommandExecutionReceipt = {
|
|
|
106
114
|
readonly command: string;
|
|
107
115
|
readonly status: "started" | "completed";
|
|
108
116
|
readonly event?: CommandResult;
|
|
117
|
+
/** Current Provider-reported activity; discarded when this call completes. */
|
|
118
|
+
readonly activity?: { readonly endpoint: string; readonly progress: import("./operations.js").OperationProgress };
|
|
109
119
|
};
|
|
110
120
|
|
|
111
121
|
export type CommandExecutionBegin = {
|
|
@@ -119,6 +129,7 @@ export type CommandExecutionBegin = {
|
|
|
119
129
|
*/
|
|
120
130
|
export type CommandExecutionStore = {
|
|
121
131
|
begin(build: string, command: string): Promise<CommandExecutionBegin>;
|
|
132
|
+
reportProgress(build: string, command: string, activity: NonNullable<CommandExecutionReceipt["activity"]>): Promise<void>;
|
|
122
133
|
complete(build: string, command: string, event: CommandResult): Promise<CommandExecutionReceipt>;
|
|
123
134
|
list(build: string): Promise<readonly CommandExecutionReceipt[]>;
|
|
124
135
|
removeBuild(build: string): Promise<void>;
|
|
@@ -14,7 +14,6 @@ export type * from "./capacity.js";
|
|
|
14
14
|
export { capacityUnits } from "./capacity.js";
|
|
15
15
|
export { buildExecutionActivity } from "./execution.js";
|
|
16
16
|
export type * from "./execution.js";
|
|
17
|
-
export type * from "./environment.js";
|
|
18
17
|
export type * from "./operations.js";
|
|
19
18
|
export { LocalBuildScheduler } from "./scheduler.js";
|
|
20
19
|
export type * from "./submission.js";
|
|
@@ -22,3 +21,5 @@ export {
|
|
|
22
21
|
isStreamingResourceStore,
|
|
23
22
|
} from "./types.js";
|
|
24
23
|
export type * from "./types.js";
|
|
24
|
+
export type * from "./log.js";
|
|
25
|
+
export { readExecutionLog } from "./log.js";
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** Provider-authored diagnostic text suitable for users; never credentials or request bodies. */
|
|
2
|
+
export type ExecutionDiagnostic = {
|
|
3
|
+
readonly level: "info" | "warning" | "error";
|
|
4
|
+
readonly message: string;
|
|
5
|
+
readonly stream?: "stdout" | "stderr";
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export type ExecutionLogEvent = { readonly endpoint: string } & (
|
|
9
|
+
| { readonly kind: "started" | "completed" }
|
|
10
|
+
| { readonly kind: "failed"; readonly message: string }
|
|
11
|
+
| { readonly kind: "phase"; readonly phase: string }
|
|
12
|
+
| ({ readonly kind: "diagnostic" } & ExecutionDiagnostic)
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
export type ExecutionLogRecord = ExecutionLogEvent & {
|
|
16
|
+
readonly format: "hypit.execution-log@1";
|
|
17
|
+
readonly time: number;
|
|
18
|
+
readonly command: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type ExecutionLogView = {
|
|
22
|
+
readonly records: readonly ExecutionLogRecord[];
|
|
23
|
+
readonly total: number;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/** Read a bounded tail without loading the whole log. Storage and transport remain caller-owned. */
|
|
27
|
+
export async function readExecutionLog(chunks: AsyncIterable<Uint8Array>, limit: number): Promise<ExecutionLogView> {
|
|
28
|
+
if (!Number.isSafeInteger(limit) || limit < 1) throw new Error("Log line count must be a positive integer");
|
|
29
|
+
const decoder = new TextDecoder();
|
|
30
|
+
const records: ExecutionLogRecord[] = [];
|
|
31
|
+
let pending = "";
|
|
32
|
+
let total = 0;
|
|
33
|
+
const consume = (line: string) => {
|
|
34
|
+
if (!line.trim()) return;
|
|
35
|
+
const record = JSON.parse(line) as ExecutionLogRecord;
|
|
36
|
+
if (record.format !== "hypit.execution-log@1") throw new Error("Unsupported execution log format");
|
|
37
|
+
records[total % limit] = record;
|
|
38
|
+
total++;
|
|
39
|
+
};
|
|
40
|
+
for await (const chunk of chunks) {
|
|
41
|
+
pending += decoder.decode(chunk, { stream: true });
|
|
42
|
+
let newline: number;
|
|
43
|
+
while ((newline = pending.indexOf("\n")) >= 0) {
|
|
44
|
+
consume(pending.slice(0, newline));
|
|
45
|
+
pending = pending.slice(newline + 1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// A running writer may still be appending its last record; only complete lines are visible.
|
|
49
|
+
const offset = total > limit ? total % limit : 0;
|
|
50
|
+
return { records: [...records.slice(offset), ...records.slice(0, offset)], total };
|
|
51
|
+
}
|