@allyhub/sdk 0.1.0-alpha.8 → 0.2.0-next.1
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/LICENSE.md +241 -0
- package/NOTICE +85 -0
- package/client.d.ts +45 -1
- package/dist/anim.js +2 -75
- package/dist/define.d.ts +10 -4
- package/dist/define.js +2 -95
- package/dist/dom.d.ts +1 -1
- package/dist/dom.js +2 -457
- package/dist/fit.js +2 -60
- package/dist/free.d.ts +18 -0
- package/dist/free.js +2 -0
- package/dist/index.d.ts +28 -13
- package/dist/index.js +2 -11
- package/dist/input.d.ts +306 -0
- package/dist/input.js +2 -0
- package/dist/media.d.ts +3 -6
- package/dist/media.js +2 -27
- package/dist/messages.d.ts +3 -2
- package/dist/messages.js +2 -2
- package/dist/module.d.ts +24 -0
- package/dist/module.js +2 -0
- package/dist/noise.js +2 -233
- package/dist/parts.d.ts +98 -22
- package/dist/parts.js +2 -414
- package/dist/paths.d.ts +1 -1
- package/dist/paths.js +2 -720
- package/dist/phone.d.ts +26 -0
- package/dist/phone.js +2 -0
- package/dist/piece.d.ts +106 -35
- package/dist/piece.js +2 -38
- package/dist/props.d.ts +1 -1
- package/dist/props.js +2 -35
- package/dist/scenery.d.ts +2 -0
- package/dist/scenery.js +2 -0
- package/dist/text.js +2 -38
- package/dist/written.d.ts +12 -0
- package/dist/written.js +2 -0
- package/docs/README.md +18 -0
- package/docs/batches.md +148 -0
- package/docs/contract.md +51 -0
- package/docs/defaults.md +703 -0
- package/docs/docs.md +148 -0
- package/docs/footage.md +249 -0
- package/docs/layers.md +317 -0
- package/docs/modeling.md +143 -0
- package/docs/project.md +265 -0
- package/docs/scenery.md +308 -0
- package/docs/sheets.md +119 -0
- package/docs/slides.md +111 -0
- package/docs/sound.md +170 -0
- package/docs/speech.md +289 -0
- package/docs/video.md +265 -0
- package/node_modules/@allyhub-next/audio/LICENSE +241 -0
- package/node_modules/@allyhub-next/audio/dist/at-cut.d.ts +52 -0
- package/node_modules/@allyhub-next/audio/dist/at-cut.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/decode.d.ts +33 -0
- package/node_modules/@allyhub-next/audio/dist/decode.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/envelope.d.ts +37 -0
- package/node_modules/@allyhub-next/audio/dist/envelope.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/index.d.ts +17 -0
- package/node_modules/@allyhub-next/audio/dist/index.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/levels.d.ts +97 -0
- package/node_modules/@allyhub-next/audio/dist/levels.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/master.d.ts +29 -0
- package/node_modules/@allyhub-next/audio/dist/master.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/music.d.ts +11 -0
- package/node_modules/@allyhub-next/audio/dist/music.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/decode.d.ts +39 -0
- package/node_modules/@allyhub-next/audio/dist/node/decode.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/ebur128.d.ts +25 -0
- package/node_modules/@allyhub-next/audio/dist/node/ebur128.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/ffmpeg.d.ts +31 -0
- package/node_modules/@allyhub-next/audio/dist/node/ffmpeg.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/index.d.ts +8 -0
- package/node_modules/@allyhub-next/audio/dist/node/index.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/loudness.d.ts +18 -0
- package/node_modules/@allyhub-next/audio/dist/node/loudness.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/master.d.ts +42 -0
- package/node_modules/@allyhub-next/audio/dist/node/master.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/measure.d.ts +60 -0
- package/node_modules/@allyhub-next/audio/dist/node/measure.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/node/mix.d.ts +31 -0
- package/node_modules/@allyhub-next/audio/dist/node/mix.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/plan.d.ts +143 -0
- package/node_modules/@allyhub-next/audio/dist/plan.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recorded.d.ts +26 -0
- package/node_modules/@allyhub-next/audio/dist/recorded.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/bandwidth.d.ts +47 -0
- package/node_modules/@allyhub-next/audio/dist/recording/bandwidth.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/chain.d.ts +89 -0
- package/node_modules/@allyhub-next/audio/dist/recording/chain.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/dynamics.d.ts +64 -0
- package/node_modules/@allyhub-next/audio/dist/recording/dynamics.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fft.d.ts +26 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fft.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/filters.d.ts +42 -0
- package/node_modules/@allyhub-next/audio/dist/recording/filters.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fit.d.ts +56 -0
- package/node_modules/@allyhub-next/audio/dist/recording/fit.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/index.d.ts +10 -0
- package/node_modules/@allyhub-next/audio/dist/recording/index.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/loudness.d.ts +12 -0
- package/node_modules/@allyhub-next/audio/dist/recording/loudness.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/measure.d.ts +67 -0
- package/node_modules/@allyhub-next/audio/dist/recording/measure.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/mic.d.ts +32 -0
- package/node_modules/@allyhub-next/audio/dist/recording/mic.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/noise.d.ts +27 -0
- package/node_modules/@allyhub-next/audio/dist/recording/noise.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/presets.d.ts +64 -0
- package/node_modules/@allyhub-next/audio/dist/recording/presets.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/room.d.ts +78 -0
- package/node_modules/@allyhub-next/audio/dist/recording/room.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/setup.d.ts +111 -0
- package/node_modules/@allyhub-next/audio/dist/recording/setup.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/recording/vec.d.ts +3 -0
- package/node_modules/@allyhub-next/audio/dist/recording/vec.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/render.d.ts +26 -0
- package/node_modules/@allyhub-next/audio/dist/render.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/sfx.d.ts +10 -0
- package/node_modules/@allyhub-next/audio/dist/sfx.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/shape.d.ts +118 -0
- package/node_modules/@allyhub-next/audio/dist/shape.js +2 -0
- package/node_modules/@allyhub-next/audio/dist/voice.d.ts +45 -0
- package/node_modules/@allyhub-next/audio/dist/voice.js +2 -0
- package/node_modules/@allyhub-next/audio/package.json +17 -0
- package/node_modules/@allyhub-next/formats/LICENSE +241 -0
- package/node_modules/@allyhub-next/formats/dist/data/comments.d.ts +94 -0
- package/node_modules/@allyhub-next/formats/dist/data/comments.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/config.d.ts +10 -0
- package/node_modules/@allyhub-next/formats/dist/data/config.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/edits.d.ts +28 -0
- package/node_modules/@allyhub-next/formats/dist/data/edits.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/elements.d.ts +6 -0
- package/node_modules/@allyhub-next/formats/dist/data/elements.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/faces.d.ts +38 -0
- package/node_modules/@allyhub-next/formats/dist/data/faces.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/file.d.ts +11 -0
- package/node_modules/@allyhub-next/formats/dist/data/file.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/gen.d.ts +31 -0
- package/node_modules/@allyhub-next/formats/dist/data/gen.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/messages.d.ts +34 -0
- package/node_modules/@allyhub-next/formats/dist/data/messages.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/reference.d.ts +676 -0
- package/node_modules/@allyhub-next/formats/dist/data/reference.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/script.d.ts +37 -0
- package/node_modules/@allyhub-next/formats/dist/data/script.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/sheet.d.ts +214 -0
- package/node_modules/@allyhub-next/formats/dist/data/sheet.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/data/words.d.ts +25 -0
- package/node_modules/@allyhub-next/formats/dist/data/words.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/index.d.ts +16 -0
- package/node_modules/@allyhub-next/formats/dist/index.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/items.d.ts +94 -0
- package/node_modules/@allyhub-next/formats/dist/items.js +2 -0
- package/node_modules/@allyhub-next/formats/dist/layout.d.ts +50 -0
- package/node_modules/@allyhub-next/formats/dist/layout.js +5 -0
- package/node_modules/@allyhub-next/formats/dist/schemas.d.ts +301 -0
- package/node_modules/@allyhub-next/formats/dist/schemas.js +2 -0
- package/node_modules/@allyhub-next/formats/package.json +14 -0
- package/node_modules/@allyhub-next/protocol/LICENSE +241 -0
- package/node_modules/@allyhub-next/protocol/dist/app.d.ts +98 -0
- package/node_modules/@allyhub-next/protocol/dist/app.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/auth.d.ts +116 -0
- package/node_modules/@allyhub-next/protocol/dist/auth.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/cli.d.ts +59 -0
- package/node_modules/@allyhub-next/protocol/dist/cli.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/cloud.d.ts +274 -0
- package/node_modules/@allyhub-next/protocol/dist/cloud.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/editor.d.ts +405 -0
- package/node_modules/@allyhub-next/protocol/dist/editor.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/files.d.ts +101 -0
- package/node_modules/@allyhub-next/protocol/dist/files.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/index.d.ts +12 -0
- package/node_modules/@allyhub-next/protocol/dist/index.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/jsonrpc.d.ts +83 -0
- package/node_modules/@allyhub-next/protocol/dist/jsonrpc.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/registry.d.ts +53 -0
- package/node_modules/@allyhub-next/protocol/dist/registry.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/runtimes.d.ts +93 -0
- package/node_modules/@allyhub-next/protocol/dist/runtimes.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/teams.d.ts +67 -0
- package/node_modules/@allyhub-next/protocol/dist/teams.js +2 -0
- package/node_modules/@allyhub-next/protocol/dist/tools.d.ts +345 -0
- package/node_modules/@allyhub-next/protocol/dist/tools.js +2 -0
- package/node_modules/@allyhub-next/protocol/package.json +13 -0
- package/node_modules/@allyhub-next/runtimes/LICENSE +241 -0
- package/node_modules/@allyhub-next/runtimes/dist/bundled.d.ts +10 -0
- package/node_modules/@allyhub-next/runtimes/dist/bundled.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/download.d.ts +15 -0
- package/node_modules/@allyhub-next/runtimes/dist/download.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/errors.d.ts +16 -0
- package/node_modules/@allyhub-next/runtimes/dist/errors.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/home.d.ts +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/home.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/index.d.ts +9 -0
- package/node_modules/@allyhub-next/runtimes/dist/index.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/lock.d.ts +6 -0
- package/node_modules/@allyhub-next/runtimes/dist/lock.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/manifest.d.ts +3 -0
- package/node_modules/@allyhub-next/runtimes/dist/manifest.js +2 -0
- package/node_modules/@allyhub-next/runtimes/dist/runtimes.d.ts +63 -0
- package/node_modules/@allyhub-next/runtimes/dist/runtimes.js +3 -0
- package/node_modules/@allyhub-next/runtimes/dist/unpack.d.ts +7 -0
- package/node_modules/@allyhub-next/runtimes/dist/unpack.js +2 -0
- package/node_modules/@allyhub-next/runtimes/manifest.json +395 -0
- package/node_modules/@allyhub-next/runtimes/package.json +14 -0
- package/node_modules/@allyhub-next/runtimes/schemas/runtimes.schema.json +153 -0
- package/node_modules/@allyhub-next/scenery/LICENSE +241 -0
- package/node_modules/@allyhub-next/scenery/NOTICE +42 -0
- package/node_modules/@allyhub-next/scenery/dist/aim.d.ts +55 -0
- package/node_modules/@allyhub-next/scenery/dist/aim.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/bake.d.ts +203 -0
- package/node_modules/@allyhub-next/scenery/dist/bake.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/camera.d.ts +150 -0
- package/node_modules/@allyhub-next/scenery/dist/camera.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/curve.d.ts +40 -0
- package/node_modules/@allyhub-next/scenery/dist/curve.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/define.d.ts +164 -0
- package/node_modules/@allyhub-next/scenery/dist/define.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/fit.d.ts +64 -0
- package/node_modules/@allyhub-next/scenery/dist/fit.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/glass.d.ts +34 -0
- package/node_modules/@allyhub-next/scenery/dist/glass.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/handheld.d.ts +184 -0
- package/node_modules/@allyhub-next/scenery/dist/handheld.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/hull.d.ts +23 -0
- package/node_modules/@allyhub-next/scenery/dist/hull.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/index.d.ts +22 -0
- package/node_modules/@allyhub-next/scenery/dist/index.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/lens.d.ts +48 -0
- package/node_modules/@allyhub-next/scenery/dist/lens.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/moire.d.ts +136 -0
- package/node_modules/@allyhub-next/scenery/dist/moire.js +93 -0
- package/node_modules/@allyhub-next/scenery/dist/motion.d.ts +48 -0
- package/node_modules/@allyhub-next/scenery/dist/motion.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/move.d.ts +260 -0
- package/node_modules/@allyhub-next/scenery/dist/move.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/noise.d.ts +41 -0
- package/node_modules/@allyhub-next/scenery/dist/noise.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/phone.d.ts +34 -0
- package/node_modules/@allyhub-next/scenery/dist/phone.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/report.d.ts +677 -0
- package/node_modules/@allyhub-next/scenery/dist/report.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/screen-focus.d.ts +55 -0
- package/node_modules/@allyhub-next/scenery/dist/screen-focus.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/screen.d.ts +71 -0
- package/node_modules/@allyhub-next/scenery/dist/screen.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/solve.d.ts +82 -0
- package/node_modules/@allyhub-next/scenery/dist/solve.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/timing.d.ts +26 -0
- package/node_modules/@allyhub-next/scenery/dist/timing.js +2 -0
- package/node_modules/@allyhub-next/scenery/dist/vec.d.ts +19 -0
- package/node_modules/@allyhub-next/scenery/dist/vec.js +2 -0
- package/node_modules/@allyhub-next/scenery/package.json +13 -0
- package/node_modules/@allyhub-next/video-core/LICENSE +241 -0
- package/node_modules/@allyhub-next/video-core/dist/anchors.d.ts +164 -0
- package/node_modules/@allyhub-next/video-core/dist/anchors.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/audio-types.d.ts +148 -0
- package/node_modules/@allyhub-next/video-core/dist/audio-types.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/backdrop.d.ts +87 -0
- package/node_modules/@allyhub-next/video-core/dist/backdrop.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/captions.d.ts +122 -0
- package/node_modules/@allyhub-next/video-core/dist/captions.js +11 -0
- package/node_modules/@allyhub-next/video-core/dist/console.d.ts +91 -0
- package/node_modules/@allyhub-next/video-core/dist/console.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/contrast.d.ts +98 -0
- package/node_modules/@allyhub-next/video-core/dist/contrast.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/cut-report.d.ts +77 -0
- package/node_modules/@allyhub-next/video-core/dist/cut-report.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/edit.d.ts +77 -0
- package/node_modules/@allyhub-next/video-core/dist/edit.js +13 -0
- package/node_modules/@allyhub-next/video-core/dist/edits.d.ts +163 -0
- package/node_modules/@allyhub-next/video-core/dist/edits.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/export.d.ts +96 -0
- package/node_modules/@allyhub-next/video-core/dist/export.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/fact.d.ts +965 -0
- package/node_modules/@allyhub-next/video-core/dist/fact.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/footage-motion.d.ts +168 -0
- package/node_modules/@allyhub-next/video-core/dist/footage-motion.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/formats.d.ts +240 -0
- package/node_modules/@allyhub-next/video-core/dist/formats.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/gen.d.ts +37 -0
- package/node_modules/@allyhub-next/video-core/dist/gen.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/index.d.ts +40 -0
- package/node_modules/@allyhub-next/video-core/dist/index.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/look.d.ts +66 -0
- package/node_modules/@allyhub-next/video-core/dist/look.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/marks.d.ts +34 -0
- package/node_modules/@allyhub-next/video-core/dist/marks.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/matrix.d.ts +289 -0
- package/node_modules/@allyhub-next/video-core/dist/matrix.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/measure.d.ts +465 -0
- package/node_modules/@allyhub-next/video-core/dist/measure.js +5 -0
- package/node_modules/@allyhub-next/video-core/dist/media.d.ts +226 -0
- package/node_modules/@allyhub-next/video-core/dist/media.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/messages.d.ts +88 -0
- package/node_modules/@allyhub-next/video-core/dist/messages.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/motion.d.ts +56 -0
- package/node_modules/@allyhub-next/video-core/dist/motion.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/music.d.ts +110 -0
- package/node_modules/@allyhub-next/video-core/dist/music.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/piece.d.ts +1146 -0
- package/node_modules/@allyhub-next/video-core/dist/piece.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/placement.d.ts +37 -0
- package/node_modules/@allyhub-next/video-core/dist/placement.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/problem.d.ts +262 -0
- package/node_modules/@allyhub-next/video-core/dist/problem.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/render-types.d.ts +49 -0
- package/node_modules/@allyhub-next/video-core/dist/render-types.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/schema.d.ts +352 -0
- package/node_modules/@allyhub-next/video-core/dist/schema.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/script-edit.d.ts +176 -0
- package/node_modules/@allyhub-next/video-core/dist/script-edit.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/script.d.ts +67 -0
- package/node_modules/@allyhub-next/video-core/dist/script.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/seams.d.ts +214 -0
- package/node_modules/@allyhub-next/video-core/dist/seams.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/slides.d.ts +37 -0
- package/node_modules/@allyhub-next/video-core/dist/slides.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/sound-under.d.ts +72 -0
- package/node_modules/@allyhub-next/video-core/dist/sound-under.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/speech.d.ts +83 -0
- package/node_modules/@allyhub-next/video-core/dist/speech.js +5 -0
- package/node_modules/@allyhub-next/video-core/dist/timeline.d.ts +616 -0
- package/node_modules/@allyhub-next/video-core/dist/timeline.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/timing.d.ts +88 -0
- package/node_modules/@allyhub-next/video-core/dist/timing.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/transcript.d.ts +288 -0
- package/node_modules/@allyhub-next/video-core/dist/transcript.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/transition.d.ts +289 -0
- package/node_modules/@allyhub-next/video-core/dist/transition.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/voice.d.ts +175 -0
- package/node_modules/@allyhub-next/video-core/dist/voice.js +2 -0
- package/node_modules/@allyhub-next/video-core/dist/words.d.ts +128 -0
- package/node_modules/@allyhub-next/video-core/dist/words.js +2 -0
- package/node_modules/@allyhub-next/video-core/package.json +14 -0
- package/package.json +52 -41
- package/README.md +0 -17
- package/dist/anim.d.ts.map +0 -1
- package/dist/anim.js.map +0 -1
- package/dist/define.d.ts.map +0 -1
- package/dist/define.js.map +0 -1
- package/dist/dom.d.ts.map +0 -1
- package/dist/dom.js.map +0 -1
- package/dist/fit.d.ts.map +0 -1
- package/dist/fit.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/media.d.ts.map +0 -1
- package/dist/media.js.map +0 -1
- package/dist/messages.d.ts.map +0 -1
- package/dist/messages.js.map +0 -1
- package/dist/noise.d.ts.map +0 -1
- package/dist/noise.js.map +0 -1
- package/dist/parts.d.ts.map +0 -1
- package/dist/parts.js.map +0 -1
- package/dist/paths.d.ts.map +0 -1
- package/dist/paths.js.map +0 -1
- package/dist/piece.d.ts.map +0 -1
- package/dist/piece.js.map +0 -1
- package/dist/props.d.ts.map +0 -1
- package/dist/props.js.map +0 -1
- package/dist/text.d.ts.map +0 -1
- package/dist/text.js.map +0 -1
package/docs/docs.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Docs
|
|
2
|
+
|
|
3
|
+
A doc is prose a person reads and edits as a page and an agent writes as text: one file, `doc.mdx`. It is not a piece: it has no format, languages or combos. `allyhub check` checks it, `allyhub dev` shows it in its editor, `allyhub render` prints it.
|
|
4
|
+
|
|
5
|
+
## A doc item
|
|
6
|
+
|
|
7
|
+
A doc is a folder whose entry file is `doc.mdx`:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
launch/plan/
|
|
11
|
+
doc.mdx the doc
|
|
12
|
+
comments.json optional: what was said about it
|
|
13
|
+
shot.png anything else it shows, kept beside it
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
- The folder may be anywhere in the project but its root, a folder whose name starts with a dot, or `node_modules`. Its place is its path from the project (`launch/plan`), which commands take: `allyhub render launch/plan`.
|
|
17
|
+
- Everything in its folder is the doc's own. A doc is never inside another item's folder (AK-M008), and no item is inside a doc's folder (AK-M003).
|
|
18
|
+
|
|
19
|
+
## Title
|
|
20
|
+
|
|
21
|
+
The title is the first-level heading the file opens with, when nothing folds under it:
|
|
22
|
+
|
|
23
|
+
```mdx
|
|
24
|
+
# Launch plan
|
|
25
|
+
|
|
26
|
+
What we ship, and when.
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
It is the doc's name in the project's lists and the PDF's title. A file that opens with anything else has no title, and its PDF is titled by its place.
|
|
30
|
+
|
|
31
|
+
## What a doc reads
|
|
32
|
+
|
|
33
|
+
The file is MDX: Markdown with GFM tables, strike-through and task lists, plus tags and `import` lines. Bare addresses are not links (no autolinks): write `[text](https://…)`.
|
|
34
|
+
|
|
35
|
+
| Written | Block |
|
|
36
|
+
| --- | --- |
|
|
37
|
+
| A paragraph | paragraph |
|
|
38
|
+
| `#` … `######` | heading, levels 1 to 6 |
|
|
39
|
+
| `- item` | bullet item |
|
|
40
|
+
| `1. item` | numbered item; a list that does not start at 1 keeps its start, and a numbered list right after another is a list of its own |
|
|
41
|
+
| `- [ ] item`, `- [x] item` | task, unchecked or checked |
|
|
42
|
+
| `> line` | quote |
|
|
43
|
+
| A fenced code block | code, with its language |
|
|
44
|
+
| A GFM table | table, its first row the head |
|
|
45
|
+
| `` alone on a line | picture |
|
|
46
|
+
| `---` | divider |
|
|
47
|
+
|
|
48
|
+
Items and quotes hold blocks under them by indentation. Inside a line: `**bold**`, `*italic*`, `~~struck~~`, `` `code` ``, `[link](href)`, and a hard line break.
|
|
49
|
+
|
|
50
|
+
`{` and `<` are MDX syntax: write `\{` and `\<` for the characters.
|
|
51
|
+
|
|
52
|
+
### What Markdown cannot say
|
|
53
|
+
|
|
54
|
+
Tags with plain string attributes (`name="value"`, or the bare name for `toggle`). An attribute that is not listed, or a value in `{…}`, is a problem (AK-M008).
|
|
55
|
+
|
|
56
|
+
| Written | Means |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| `<u>…</u>` | Underlined |
|
|
59
|
+
| `<span color="red" bg="yellow">…</span>` | Text in a colour, on a colour |
|
|
60
|
+
| `<strong>` `<b>`, `<em>` `<i>`, `<del>` `<s>`, `<code>` | The marks `**`, `*`, `~~` and a backtick make, where Markdown's own would not read back (`**“引号”**` between Chinese characters is not bold; `<strong>“引号”</strong>` is) |
|
|
61
|
+
| `<br />` | Inside a line, a line break; on a line of its own, an empty paragraph |
|
|
62
|
+
| `<Block align color bg toggle>` | One block's look. Inside it: the block, then the blocks under it. `align` is `center`, `right` or `justify`; `toggle` makes a heading or a line fold the blocks after it |
|
|
63
|
+
| `<Callout icon color bg>` | A line set apart in a box with a sign before it (💡 when `icon` is absent). Inside it: the line, then the blocks under it |
|
|
64
|
+
| `<img src alt title width align />` | A picture with a width in px or a place (`align`: `center` or `right`); `title` is its caption. Without those, write `` |
|
|
65
|
+
| `<Table widths head>` around one GFM table | Column widths in px, comma-separated, an empty entry for a column that keeps its own (`widths="120,,200"`); `head` is `row` (the default), `column`, `both` or `none` |
|
|
66
|
+
|
|
67
|
+
A colour is one of `gray`, `brown`, `red`, `orange`, `yellow`, `green`, `blue`, `purple`, `pink`, or a CSS colour (`#0b6e99`, `rgb(…)`, `hsl(…)`).
|
|
68
|
+
|
|
69
|
+
`<Block>`, `<Callout>` and `<Table>` go on lines of their own, with what they hold between them:
|
|
70
|
+
|
|
71
|
+
```mdx
|
|
72
|
+
<Block align="center" color="blue">
|
|
73
|
+
|
|
74
|
+
A centred line, in blue.
|
|
75
|
+
|
|
76
|
+
</Block>
|
|
77
|
+
|
|
78
|
+
<Block toggle>
|
|
79
|
+
|
|
80
|
+
## Details
|
|
81
|
+
|
|
82
|
+
Folded under the heading.
|
|
83
|
+
|
|
84
|
+
</Block>
|
|
85
|
+
|
|
86
|
+
<Callout icon="⚠️" bg="yellow">
|
|
87
|
+
|
|
88
|
+
Check the dates.
|
|
89
|
+
|
|
90
|
+
</Callout>
|
|
91
|
+
|
|
92
|
+
<Table widths="120,,200" head="none">
|
|
93
|
+
|
|
94
|
+
| a | b | c |
|
|
95
|
+
| --- | --- | --- |
|
|
96
|
+
| 1 | 2 | 3 |
|
|
97
|
+
|
|
98
|
+
</Table>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### Kept as written
|
|
102
|
+
|
|
103
|
+
- **Embeds**: any other tag on lines of its own (`<Chart kind="bar" />`) is kept as written and not drawn: on paper it is a box with the tag's name.
|
|
104
|
+
- **Imports, exports and link definitions** are kept as written and not shown.
|
|
105
|
+
|
|
106
|
+
An edit to some blocks in the editor rewrites only those blocks' lines: the rest of the file keeps its bytes (how a paragraph was wrapped, which marker a list uses).
|
|
107
|
+
|
|
108
|
+
## Pictures and links
|
|
109
|
+
|
|
110
|
+
- A picture's path is relative to the doc's folder (`./shot.png`, `../../assets/media/logo.svg`) and names a file of the project; one that is not there is AK-M008. An address (`https://…`) is not checked.
|
|
111
|
+
- A link to another item is a relative path to its entry file or its folder: `[the film](../film/video.ts)`, `[the notes](../notes/doc.mdx)`. Moving an item in `allyhub dev` or Studio writes the relative links and pictures that point into it, or out of it, again.
|
|
112
|
+
|
|
113
|
+
## comments.json
|
|
114
|
+
|
|
115
|
+
Threads about a doc are kept beside it in `comments.json` (JSON Schema: `https://allyhub.com/schemas/comments.schema.json`). An agent answers a thread by writing its reply into the file.
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"threads": [
|
|
120
|
+
{
|
|
121
|
+
"id": "c1",
|
|
122
|
+
"quote": "Forms that fill themselves in",
|
|
123
|
+
"text": "Shorter?",
|
|
124
|
+
"at": "2026-10-14T09:30:00Z",
|
|
125
|
+
"replies": [
|
|
126
|
+
{ "by": "agent", "text": "Cut to five words.", "at": "2026-10-14T09:41:00Z" }
|
|
127
|
+
],
|
|
128
|
+
"resolved": true
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
| Field | Type | |
|
|
135
|
+
| --- | --- | --- |
|
|
136
|
+
| `threads[].id` | string, required | `c1`, `c2`…: how a reply names its thread |
|
|
137
|
+
| `threads[].text` | string, required | What was said |
|
|
138
|
+
| `threads[].quote` | string | The doc's words it is about; empty for a place or the whole doc |
|
|
139
|
+
| `threads[].at` | string | When, ISO 8601 |
|
|
140
|
+
| `threads[].replies[]` | `{ by, text, at }` | `by` is `person` or `agent` (anything but `person` reads as `agent`); `text` is required |
|
|
141
|
+
| `threads[].resolved` | boolean | Done; absent is false |
|
|
142
|
+
|
|
143
|
+
A thread without an `id` or a `text` is left out when the file is read.
|
|
144
|
+
|
|
145
|
+
## Check and render
|
|
146
|
+
|
|
147
|
+
- `allyhub check` reports AK-M008 for a doc whose file is not MDX, that holds what a doc does not draw (`{…}`, a tag inside a line other than the marks above, a wrong attribute or value), that shows a picture which is not in the project, or that is inside another item's folder; each problem has its file and line.
|
|
148
|
+
- `allyhub render` prints each doc to `.allyhub/out/<place>/doc.pdf`; `--type png` writes a picture of the whole page (`doc.png`), `--type md` plain Markdown (`doc.md`: what the doc says without what only a doc can say), and `--type pdf,png,md` all three. A doc with a problem is not rendered: the command fails and says why. `allyhub help render` has every option.
|
package/docs/footage.md
ADDED
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
# Footage
|
|
2
|
+
|
|
3
|
+
`footage()` is a layer that shows a video in a part: `footage()` alone is the part's own take in sync with its speech, `footage(file, opts)` another file, `footage(videoItem, opts)` another video item of the project. It stacks with the part's other layers in the order they are listed ([video.md](video.md)). A take, its cut list and its captions are in [speech.md](speech.md).
|
|
4
|
+
|
|
5
|
+
```ts file=talk/short/video.ts
|
|
6
|
+
import { footage, part, take, video } from "@allyhub/sdk";
|
|
7
|
+
|
|
8
|
+
import broll from "./broll/inbox.mp4";
|
|
9
|
+
|
|
10
|
+
export default video({
|
|
11
|
+
format: "9x16",
|
|
12
|
+
parts: () => [
|
|
13
|
+
part({
|
|
14
|
+
key: "intro",
|
|
15
|
+
speech: take("./host.mp4").range("So here is", "every time"),
|
|
16
|
+
layers: [
|
|
17
|
+
footage({
|
|
18
|
+
reframe: "face",
|
|
19
|
+
punchIn: ["free", "insane@1.15"],
|
|
20
|
+
pullback: true,
|
|
21
|
+
}),
|
|
22
|
+
footage(broll, {
|
|
23
|
+
at: "inbox",
|
|
24
|
+
dur: 1.5,
|
|
25
|
+
box: [0.55, 0.1, 0.4, 0.3],
|
|
26
|
+
radius: 24,
|
|
27
|
+
}),
|
|
28
|
+
footage("./screen.mp4", {
|
|
29
|
+
from: 3,
|
|
30
|
+
crop: [0, 0, 0.5, 1],
|
|
31
|
+
speed: 2,
|
|
32
|
+
fit: "contain",
|
|
33
|
+
audio: true,
|
|
34
|
+
gainDb: -6,
|
|
35
|
+
}),
|
|
36
|
+
],
|
|
37
|
+
}),
|
|
38
|
+
part({
|
|
39
|
+
key: "inset",
|
|
40
|
+
speech: take("./host.mp4").range("Now look"),
|
|
41
|
+
layers: [
|
|
42
|
+
footage({
|
|
43
|
+
box: {
|
|
44
|
+
portrait: [0.1, 0.6, 0.8, 0.3],
|
|
45
|
+
default: [
|
|
46
|
+
{ t: 0, box: "full" },
|
|
47
|
+
{ t: "look", box: [0.6, 0.6, 0.35, 0.35], ease: "in-out" },
|
|
48
|
+
],
|
|
49
|
+
},
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
}),
|
|
53
|
+
],
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## The file
|
|
58
|
+
|
|
59
|
+
- **A file**: an import (`import clip from "./clip.mp4"`) or a path. A path is relative to the folder of the module that wrote the `footage()` call, also once its part is spread into another piece ([project.md](project.md)).
|
|
60
|
+
- **No file**: the part's take, in sync with its speech, following its cut list. A part with no take is AK-A001; a take that is not a video is AK-A003. A take played at another speed (`take(…).speed(1.2)`) cannot show its own picture: `part()` throws.
|
|
61
|
+
- **A video item**: an imported `video()` of the project ([below](#a-video-item-as-footage)).
|
|
62
|
+
- A file that is not a video (mp4, webm or mov) is AK-A003; a file that is not there AK-A001.
|
|
63
|
+
- When the layer lasts longer than the file, its last frame holds; before a take's file starts (speech in the lead), its first frame holds. A video with alpha (ProRes 4444, VP9 with alpha) shows what is under its transparent pixels.
|
|
64
|
+
|
|
65
|
+
## Options
|
|
66
|
+
|
|
67
|
+
Besides `at`, `until` and `dur` (word references or seconds; default the whole part):
|
|
68
|
+
|
|
69
|
+
| Option | Type | Default | What it is |
|
|
70
|
+
| --- | --- | --- | --- |
|
|
71
|
+
| `from` | seconds | 0 | Seconds into the file at the layer's start. A take's own footage follows its speech instead |
|
|
72
|
+
| `speed` | over 0, up to 16 | 1 | Playback speed; its sound follows, pitch too |
|
|
73
|
+
| `audio` | boolean | false | Mix the file's own sound in. A take's own footage sounds as the part's speech |
|
|
74
|
+
| `gainDb` | dB | 0 | Its sound's gain |
|
|
75
|
+
| `box` | `Rect`, `"full"`, `BoxKey[]`, or per frame shape | `"full"` | Where it shows, `[x, y, w, h]` as fractions of the frame, inside it |
|
|
76
|
+
| `fit` | `"cover"`, `"contain"` | `"cover"` | How the picture fills its box |
|
|
77
|
+
| `crop` | `Rect`, or per frame shape | none | A part of the source (fractions of it), then fitted to the box |
|
|
78
|
+
| `shape` | `"rect"`, `"circle"` | `"rect"` | `"circle"`: the ellipse inscribed in the box |
|
|
79
|
+
| `radius` | px at 1080p | 0 | Rounds the box's corners, at most half its shorter side; what is outside the corners shows what is under the layer. Not with `"circle"` |
|
|
80
|
+
| `reframe` | `"face"`, `{ face: true, faceY? }`, `"center"`, `{ x, y }` | none | Crops the source to the box's shape round the speaker's face (a smoothed path; the face's centre at `faceY` of the crop's height, default 0.4), its centre, or a point of the source |
|
|
81
|
+
| `speaker` | a face id (whole number from 0) | the track's default speaker | The face the layer follows: for a face reframe, punch-ins, the pullback and `ctx.face` |
|
|
82
|
+
| `punchIn` | `(WordRef \| PunchIn)[]` | none | Zooms in on words ([below](#punch-ins-and-the-pullback)) |
|
|
83
|
+
| `pullback` | `true` or `Pullback` | none | Opens zoomed in and eases back to the whole picture |
|
|
84
|
+
| `sharpen` | 0 to 1 | none | Sharpens after scaling, for footage drawn larger than its pixels (the `footage-scale` fact). Renders and stills only |
|
|
85
|
+
| `background` | `FootageBackground` | none | The picture behind the person treated apart from them ([below](#the-background-behind-the-person)) |
|
|
86
|
+
|
|
87
|
+
- **Lengths** in px at 1080p (`radius`, a background's `blur`, `feather`, `shrink`) scale with the format's shorter side, and `radius` with a keyframed box.
|
|
88
|
+
- **A reframe** with no face (no face track yet, or none seen then) is centred on `{ x: 0.5, y: 0.4 }` of the source.
|
|
89
|
+
- **Per frame shape**: `box` and `crop` take a `PerOrient`, `{ landscape?, portrait?, square?, default? }`. Each piece takes the entry for its `ctx.dims.orient`, else `default`, else none (the full frame, no crop). So pieces of one film in two formats can share their parts.
|
|
90
|
+
|
|
91
|
+
### Box keyframes
|
|
92
|
+
|
|
93
|
+
`box` as `BoxKey[]`: `[{ t, box, ease? }]`, `t` a word reference or seconds, `box` a rectangle or `"full"`, `ease` the move into that key (`"linear"`, `"in"`, `"out"`, `"in-out"`; default `"linear"`).
|
|
94
|
+
|
|
95
|
+
- The picture keeps its shape in every box, fitted as `fit` says: a box that changes shape shows more or less of it, never a stretched one.
|
|
96
|
+
- Every key lies inside the frame; `footage()` throws for one that reaches past it. A push-in larger than the frame is a punch-in.
|
|
97
|
+
- A keyframed box takes no `reframe`, `punchIn` or `pullback` (`footage()` throws).
|
|
98
|
+
|
|
99
|
+
### Punch-ins and the pullback
|
|
100
|
+
|
|
101
|
+
- **A punch-in** is a word reference, `"free"` (scale 1.12), `"free@1.15"` (a decimal after `@` is the scale; `"free@2"` is still the second "free"), or `{ at, until?, scale?, in?, out?, ease?, center? }`. It eases in over `in` seconds (default 0.2) centred on `at`, holds for the word (or until `until`), and eases out over `out` (default 0.25) with `ease` (default `"in-out"`). `scale` is over 1, up to 3; `in` and `out` are over 0, up to 30.
|
|
102
|
+
- **A pullback** starts at `scale` (default 1.12, up to 3) and eases (`ease`, default `"out"`) back to the whole picture over `dur` seconds (default 0.6, up to 10).
|
|
103
|
+
- Both zoom about `center`, a point `{ x, y }` as fractions of the box; default the speaker's face, else `{ x: 0.5, y: 0.42 }`.
|
|
104
|
+
|
|
105
|
+
## Faces and mattes
|
|
106
|
+
|
|
107
|
+
A face track and a person matte are what AllyHub measures once from a video and keeps in the project's media index (`.allyhub/cache/index/<sha256 of the file>/`).
|
|
108
|
+
|
|
109
|
+
- The **face track** is read by `reframe: "face"`, the punch-in and pullback centres, `speaker`, and in a layer by `ctx.face(t, id?)` (one face's box `[x, y, w, h]` in the frame's pixels at part time `t`, by default the layer's speaker; `undefined` when none) and `ctx.faces(t)` (`[{ id, box }]`), from the topmost footage showing at `t` that has one. Every face has a stable id; `allyhub frames --overlay` draws them with their ids.
|
|
110
|
+
- The **person matte** is read by graphic layers drawn `z: "behind-person"` and by a footage layer's `background`.
|
|
111
|
+
- Every command that draws a piece (`check`, `render`, `dev`, `frames`, …) makes what the media index lacks first; the first time downloads the runtime and models into `~/.allyhub/`. `ALLYHUB_NO_INDEX=1` skips it.
|
|
112
|
+
- Until one is made, a face reframe is centred, layers behind the person are drawn in front, and a background is left as it is; a `speaker` that is not a face of the track is centred too. Each is a `fallback` fact, which `allyhub inspect` prints.
|
|
113
|
+
|
|
114
|
+
## Stacking with graphic layers
|
|
115
|
+
|
|
116
|
+
A part's `layers` are listed back to front: each is drawn over those before it, footage and graphics alike. A graphic layer listed before a footage layer is under it (the `graphics-under-footage` fact lists such layers).
|
|
117
|
+
|
|
118
|
+
A graphic layer with `z: "behind-person"` is drawn with the part's own footage (`footage()` without a file) wherever that is listed: right over its picture and under its speaker, who is cut out with the take's person matte. Without the part's own footage it is drawn in front (a `fallback` fact). `z: "overlay"` is over the finished picture ([video.md](video.md)).
|
|
119
|
+
|
|
120
|
+
## The background behind the person
|
|
121
|
+
|
|
122
|
+
`background` treats the picture behind the person apart from the person, through the file's person matte.
|
|
123
|
+
|
|
124
|
+
```ts
|
|
125
|
+
import { footage } from "@allyhub/sdk";
|
|
126
|
+
|
|
127
|
+
export const backgrounds = [
|
|
128
|
+
footage({ background: { blur: 24 } }),
|
|
129
|
+
footage({ background: { dim: 0.4, desaturate: 1 } }),
|
|
130
|
+
footage({ background: { color: "var(--ak-color-bg)" } }),
|
|
131
|
+
footage({ background: { image: "./studio.jpg", blur: 6 } }),
|
|
132
|
+
footage({ background: { color: "transparent" } }),
|
|
133
|
+
];
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
| Field | Range | What it is |
|
|
137
|
+
| --- | --- | --- |
|
|
138
|
+
| `blur` | 0 to 200 | The background's Gaussian blur, its standard deviation as CSS `blur()`, px at 1080p |
|
|
139
|
+
| `dim` | 0 to 1 | Darker, to black |
|
|
140
|
+
| `desaturate` | 0 to 1 | Greyer, to gray |
|
|
141
|
+
| `color` | a CSS colour | A flat colour instead; `"transparent"` draws the person alone over what is under the layer. Not with `blur`, `dim`, `desaturate` or `image` |
|
|
142
|
+
| `image` | PNG, JPEG or WebP | An image instead (an import or a path from the module), filling the box (cover); `blur`, `dim` and `desaturate` then treat it |
|
|
143
|
+
| `feather` | 0 to 40, default 2 | The softness of the person's edge, px at 1080p (`MATTE_FEATHER`) |
|
|
144
|
+
| `shrink` | −40 to 40, default 4 | How far the person's edge is pulled in, px at 1080p; negative lets it out (`MATTE_SHRINK`) |
|
|
145
|
+
|
|
146
|
+
- The order is: the treated background, graphic layers drawn `z: "behind-person"`, the person, the layers in front.
|
|
147
|
+
- The matte is made firm, then softened by `feather` and moved by `shrink`.
|
|
148
|
+
- An image that is not a picture is AK-A003. Until the file has a matte the footage shows as it is (a `fallback` fact).
|
|
149
|
+
|
|
150
|
+
## The preview and the render
|
|
151
|
+
|
|
152
|
+
The render and stills draw footage with ffmpeg, the exact frame of the file for every frame. The live preview plays each footage layer as a muted `<video>` kept to the clock, placed by the same plan. Where they differ: the preview plays `sharpen` unsharpened, and approximates a `background` (its blur is of the whole picture, its matte edge coarser). `allyhub frames` draws as the render does.
|
|
153
|
+
|
|
154
|
+
## A video item as footage
|
|
155
|
+
|
|
156
|
+
A video item of the project, imported, is drawn by the stage at its own time, never rendered first.
|
|
157
|
+
|
|
158
|
+
```ts file=demo/video.ts
|
|
159
|
+
import { custom, part, video } from "@allyhub/sdk";
|
|
160
|
+
|
|
161
|
+
export default video({
|
|
162
|
+
format: "16x9",
|
|
163
|
+
deliverable: false,
|
|
164
|
+
parts: () => [
|
|
165
|
+
part({
|
|
166
|
+
key: "open",
|
|
167
|
+
dur: 3,
|
|
168
|
+
anchors: { turn: 1.5 },
|
|
169
|
+
layers: [custom({ render() {} })],
|
|
170
|
+
}),
|
|
171
|
+
],
|
|
172
|
+
});
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
```ts file=film/video.ts
|
|
176
|
+
import { footage, part, video } from "@allyhub/sdk";
|
|
177
|
+
|
|
178
|
+
import demo from "../demo/video.ts";
|
|
179
|
+
|
|
180
|
+
export default video({
|
|
181
|
+
format: "9x16",
|
|
182
|
+
parts: () => [
|
|
183
|
+
part({
|
|
184
|
+
key: "inset",
|
|
185
|
+
dur: 6,
|
|
186
|
+
layers: [footage(demo, { box: [0.55, 0.1, 0.4, 0.3], from: "@turn" })],
|
|
187
|
+
}),
|
|
188
|
+
],
|
|
189
|
+
});
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
- `footage(videoItem, opts)` takes `at`, `until`, `dur`, `from` (its own moment at the layer's start: seconds, an anchor of one of its parts such as `"@turn"`, or a part's key), `speed` (over 0, up to 16), `box` and `fit`, `audio` and `gainDb` (its speech, room and sound effects; at speed 1 only), `camera` and `cameras` (the camera its scenery layers are drawn from, on its clock: one for all, or by layer name), and `quality: { scale }` (how finely its scenery layers are drawn here, over 0 up to 4, as `scenery()`'s; [scenery.md](scenery.md)). `crop`, `reframe`, `speaker`, `punchIn`, `pullback`, `sharpen`, `background`, `shape` and `radius` throw.
|
|
193
|
+
- It draws its graphic layers only: a video item with footage of its own cannot be shown inside another yet (the load fails and says so).
|
|
194
|
+
- What it reads counts as the outer video's, so the part cache and the check follow it. A video that reaches itself through the videos it shows is AK-M010.
|
|
195
|
+
- `deliverable: false` marks a video only shown inside others: it is not rendered as a film of its own unless named.
|
|
196
|
+
- `take(videoItem).range(from, to)` makes a part that plays a stretch of it, hearing its sound and saying its words; `footage()` without a file in that part draws its picture in sync ([speech.md](speech.md)).
|
|
197
|
+
- `ctx.video(videoItem, el)` draws it in an element of a layer and resolves to an `EmbeddedVideo` (`{ id, duration, width, height, seek(t, layout?), at(ref) }`); seek it from `render` through `ctx.wait`:
|
|
198
|
+
|
|
199
|
+
```ts file=film/screen.ts
|
|
200
|
+
import { custom, part, type EmbeddedVideo } from "@allyhub/sdk";
|
|
201
|
+
|
|
202
|
+
import demo from "../demo/video.ts";
|
|
203
|
+
|
|
204
|
+
const shown = new WeakMap<HTMLElement, EmbeddedVideo>();
|
|
205
|
+
|
|
206
|
+
export const screen = part({
|
|
207
|
+
key: "screen",
|
|
208
|
+
dur: 6,
|
|
209
|
+
layers: [
|
|
210
|
+
custom({
|
|
211
|
+
mount(el, ctx) {
|
|
212
|
+
if (!ctx.video) return;
|
|
213
|
+
ctx.wait(ctx.video(demo, el).then((v) => shown.set(el, v)));
|
|
214
|
+
},
|
|
215
|
+
render(el, t, ctx) {
|
|
216
|
+
const v = shown.get(el);
|
|
217
|
+
if (!v) return;
|
|
218
|
+
const at = Math.min(Math.max(t, 0), v.duration - 1e-3);
|
|
219
|
+
ctx.wait(v.seek(at, ctx.layoutOnly === true));
|
|
220
|
+
},
|
|
221
|
+
}),
|
|
222
|
+
],
|
|
223
|
+
});
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Two recordings of one moment
|
|
227
|
+
|
|
228
|
+
A separate microphone and a camera start at different moments. `allyhub align <reference> <other>` measures the offset between them from their sound (other = reference + offset), how sharply they match, and how it drifts. Writing it in is the piece's: the microphone is the part's speech, the camera its picture.
|
|
229
|
+
|
|
230
|
+
```ts file=talk/two/video.ts
|
|
231
|
+
import { footage, part, take, video } from "@allyhub/sdk";
|
|
232
|
+
|
|
233
|
+
const OFFSET = 1.5; // from allyhub align mic.wav cam.mp4
|
|
234
|
+
|
|
235
|
+
export default video({
|
|
236
|
+
format: "16x9",
|
|
237
|
+
parts: () => [
|
|
238
|
+
part({
|
|
239
|
+
key: "intro",
|
|
240
|
+
speech: take("./mic.wav").range("So here is", "every time"),
|
|
241
|
+
layers: [footage("./cam.mp4", { from: 12.84 + OFFSET })],
|
|
242
|
+
}),
|
|
243
|
+
],
|
|
244
|
+
});
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
- `align` also prints the drift as a line, offset(t) = at0 + slope × t, and the speed (1 + slope) that keeps the camera in step; and, in its JSON, `pictureOffset`: the offset for the camera's picture when its file's sound starts later on its own clock.
|
|
248
|
+
- Only a take's own footage follows its cut list: to cut both, make the two one file first.
|
|
249
|
+
- `allyhub frames cuts` draws a review sheet per cut (a cut take's jumps, part joins) to look at the result.
|