aivee 0.1.0-alpha.0 → 0.1.0-dev.d34a6ba

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.
Files changed (73) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +120 -118
  3. package/docs/architecture.md +401 -401
  4. package/docs/aspect-ratio-presets.md +72 -72
  5. package/docs/releasing.md +19 -19
  6. package/docs/usage.md +1193 -1193
  7. package/package.json +52 -52
  8. package/requirements-otio.txt +1 -1
  9. package/src/capabilities.mjs +307 -307
  10. package/src/cli.mjs +646 -646
  11. package/src/doctor.mjs +133 -133
  12. package/src/edits/analysis-to-edl.mjs +43 -43
  13. package/src/edits/detect-silence.mjs +51 -51
  14. package/src/edits/find-mistake-candidates.mjs +42 -42
  15. package/src/edits/plan-shot-placements.mjs +105 -105
  16. package/src/edits/plan-silence-cuts.mjs +49 -49
  17. package/src/edits/retime-transcript.mjs +105 -105
  18. package/src/files.mjs +80 -80
  19. package/src/index.mjs +44 -44
  20. package/src/interchange/otio.mjs +204 -204
  21. package/src/interchange/otio_bridge.py +521 -521
  22. package/src/media/analysis-provider.mjs +75 -75
  23. package/src/media/compatibility.mjs +45 -45
  24. package/src/media/ffmpeg-capabilities.mjs +129 -129
  25. package/src/media/frame-rate.mjs +58 -58
  26. package/src/media/frame-time.mjs +22 -22
  27. package/src/media/preview-assets.mjs +350 -350
  28. package/src/media/probe.mjs +149 -149
  29. package/src/media/render-cuts.mjs +90 -90
  30. package/src/media/scene-detection.mjs +107 -107
  31. package/src/media/scene-review.mjs +205 -205
  32. package/src/project/assets.mjs +1194 -1194
  33. package/src/project/create.mjs +100 -100
  34. package/src/project/presets.mjs +44 -44
  35. package/src/render/checkpoints.mjs +192 -192
  36. package/src/render/formats.mjs +163 -163
  37. package/src/render/hyperframes.mjs +590 -590
  38. package/src/render/process.mjs +111 -111
  39. package/src/render/progress.mjs +46 -46
  40. package/src/render/timeline-control.mjs +53 -53
  41. package/src/timeline/assemble.mjs +119 -119
  42. package/src/timeline/audio-effects.mjs +75 -75
  43. package/src/timeline/audio-mastering.mjs +236 -236
  44. package/src/timeline/audio-mix.mjs +105 -105
  45. package/src/timeline/audio-track-effects.mjs +139 -139
  46. package/src/timeline/audio-volume.mjs +63 -63
  47. package/src/timeline/background.mjs +8 -8
  48. package/src/timeline/blend-mode.mjs +34 -34
  49. package/src/timeline/caption-layouts.mjs +62 -61
  50. package/src/timeline/captions.mjs +80 -80
  51. package/src/timeline/edit.mjs +965 -965
  52. package/src/timeline/fingerprint.mjs +6 -6
  53. package/src/timeline/from-edl.mjs +31 -31
  54. package/src/timeline/history-store.mjs +281 -281
  55. package/src/timeline/history.mjs +69 -69
  56. package/src/timeline/inspect.mjs +117 -117
  57. package/src/timeline/keyframes.mjs +158 -158
  58. package/src/timeline/layers.mjs +18 -18
  59. package/src/timeline/mask.mjs +53 -53
  60. package/src/timeline/project.mjs +52 -52
  61. package/src/timeline/render.mjs +759 -759
  62. package/src/timeline/sidechain-render.mjs +209 -209
  63. package/src/timeline/source-fit.mjs +15 -15
  64. package/src/timeline/speech-bubble.mjs +26 -26
  65. package/src/timeline/speed-ramp.mjs +188 -188
  66. package/src/timeline/track-state.mjs +22 -22
  67. package/src/timeline/transition.mjs +34 -34
  68. package/src/timeline/validate.mjs +322 -322
  69. package/src/transcript/corrections.mjs +21 -21
  70. package/src/transcript/normalize.mjs +17 -17
  71. package/src/transcript/provider.mjs +42 -42
  72. package/src/transcript/subtitles.mjs +57 -57
  73. package/src/transcript/validate.mjs +39 -39
@@ -1,72 +1,72 @@
1
- # Social Video Aspect-Ratio Presets
2
-
3
- This document defines the platform-informed aspect-ratio presets exposed by
4
- AIVEE. The engine remains general-purpose: presets are
5
- convenience defaults, and callers can continue to use arbitrary dimensions.
6
-
7
- ## Initial preset baseline
8
-
9
- | Preset | Ratio | Default dimensions | Common destinations |
10
- | --- | --- | --- | --- |
11
- | `vertical` | 9:16 | 1080 × 1920 | TikTok, Instagram/Facebook Reels and Stories, YouTube Shorts |
12
- | `portrait-feed` | 4:5 | 1080 × 1350 | Instagram feed, LinkedIn vertical feed video |
13
- | `square` | 1:1 | 1080 × 1080 | TikTok, Instagram/LinkedIn feed placements |
14
- | `landscape` | 16:9 | 1920 × 1080 | YouTube standard video, LinkedIn landscape feed video |
15
-
16
- The ratio is the platform-oriented choice; the pixel dimensions are practical
17
- HD defaults, not a promise that every platform requires those exact pixels.
18
- Where a platform publishes a lower or different maximum, export dimensions can
19
- be lowered while preserving the selected ratio. Keep dimensions configurable.
20
-
21
- The JavaScript API exports `CANVAS_PRESETS`, `listCanvasPresets()`, and
22
- `resolveCanvasPreset(id)` from the package entry point. The CLI exposes the same
23
- catalog with `node src/cli.mjs presets list`; create projects with
24
- `node src/cli.mjs project create <slug> --preset <id> [fps] [durationSeconds]`.
25
- The selected identifier is stored as `canvasPreset` beside the resolved
26
- `width` and `height` in `meta.json`. Existing custom-dimension project creation
27
- remains supported.
28
-
29
- ## Selection guidance
30
-
31
- - Recommend `vertical` for full-screen short-form video. YouTube identifies
32
- Shorts as vertical; TikTok recommends 9:16 and lists 16:9 and 1:1 as other
33
- supported ad shapes.
34
- - Recommend `portrait-feed` for tall feed placements where a full-screen 9:16
35
- canvas is not wanted. LinkedIn explicitly recommends 4:5 vertical video and
36
- allows up to 1080 × 1350 pixels.
37
- - Recommend `square` for flexible feed distribution. TikTok and LinkedIn list
38
- 1:1 as a supported video shape.
39
- - Recommend `landscape` for conventional long-form video and landscape feeds.
40
- YouTube's standard desktop player ratio is 16:9, with 1920 × 1080 listed as
41
- its 1080p resolution.
42
- - Keep 4:3 and other ratios available through custom width/height settings;
43
- this initial preset list does not restrict the renderer.
44
-
45
- ## Rendering behavior
46
-
47
- Choosing a preset sets the output canvas only. Source-to-canvas behavior is a
48
- separate policy with these options:
49
-
50
- - `contain` scales the full source frame inside the clip bounds, leaving empty
51
- canvas around it when the aspect ratios differ. This is the default because
52
- it preserves the full source image.
53
- - `cover` fills the clip bounds and center-crops any overflow.
54
- - `fill` stretches the source to the clip bounds and can distort its shape.
55
-
56
- Set `sourceFit` on project metadata or `timeline.project` for the project-wide
57
- default; a video clip's `fit` field overrides that policy. The CLI accepts
58
- `--fit contain|cover|fill` during project creation. The renderer validates these
59
- values rather than silently substituting a crop mode. Platform safe-area guides
60
- are separate and are not implied by a ratio preset.
61
-
62
- ## Sources
63
-
64
- - [YouTube: Video resolution and aspect ratios](https://support.google.com/youtube/answer/6375112)
65
- - [YouTube: Shorts upload tips](https://support.google.com/youtube/answer/12921536)
66
- - [TikTok Business Help: Reservation in-feed ad specifications](https://ads.tiktok.com/resources/help/article/tiktok-reservation-in-feed-ads-reach-frequency)
67
- - [LinkedIn Help: Video ads advertising specifications](https://www.linkedin.com/help/linkedin/answer/a424737)
68
- - [Vimeo Help: Instagram video aspect-ratio options](https://help.vimeo.com/hc/en-us/articles/12426476775953-How-to-select-a-ratio-in-the-video-editor-for-Instagram-posts)
69
-
70
- Platform specifications can change and may differ between organic uploads,
71
- advertising placements, and publishing tools. Recheck the destination's current
72
- requirements before adding validation that rejects an export.
1
+ # Social Video Aspect-Ratio Presets
2
+
3
+ This document defines the platform-informed aspect-ratio presets exposed by
4
+ AIVEE. The engine remains general-purpose: presets are
5
+ convenience defaults, and callers can continue to use arbitrary dimensions.
6
+
7
+ ## Initial preset baseline
8
+
9
+ | Preset | Ratio | Default dimensions | Common destinations |
10
+ | --- | --- | --- | --- |
11
+ | `vertical` | 9:16 | 1080 × 1920 | TikTok, Instagram/Facebook Reels and Stories, YouTube Shorts |
12
+ | `portrait-feed` | 4:5 | 1080 × 1350 | Instagram feed, LinkedIn vertical feed video |
13
+ | `square` | 1:1 | 1080 × 1080 | TikTok, Instagram/LinkedIn feed placements |
14
+ | `landscape` | 16:9 | 1920 × 1080 | YouTube standard video, LinkedIn landscape feed video |
15
+
16
+ The ratio is the platform-oriented choice; the pixel dimensions are practical
17
+ HD defaults, not a promise that every platform requires those exact pixels.
18
+ Where a platform publishes a lower or different maximum, export dimensions can
19
+ be lowered while preserving the selected ratio. Keep dimensions configurable.
20
+
21
+ The JavaScript API exports `CANVAS_PRESETS`, `listCanvasPresets()`, and
22
+ `resolveCanvasPreset(id)` from the package entry point. The CLI exposes the same
23
+ catalog with `node src/cli.mjs presets list`; create projects with
24
+ `node src/cli.mjs project create <slug> --preset <id> [fps] [durationSeconds]`.
25
+ The selected identifier is stored as `canvasPreset` beside the resolved
26
+ `width` and `height` in `meta.json`. Existing custom-dimension project creation
27
+ remains supported.
28
+
29
+ ## Selection guidance
30
+
31
+ - Recommend `vertical` for full-screen short-form video. YouTube identifies
32
+ Shorts as vertical; TikTok recommends 9:16 and lists 16:9 and 1:1 as other
33
+ supported ad shapes.
34
+ - Recommend `portrait-feed` for tall feed placements where a full-screen 9:16
35
+ canvas is not wanted. LinkedIn explicitly recommends 4:5 vertical video and
36
+ allows up to 1080 × 1350 pixels.
37
+ - Recommend `square` for flexible feed distribution. TikTok and LinkedIn list
38
+ 1:1 as a supported video shape.
39
+ - Recommend `landscape` for conventional long-form video and landscape feeds.
40
+ YouTube's standard desktop player ratio is 16:9, with 1920 × 1080 listed as
41
+ its 1080p resolution.
42
+ - Keep 4:3 and other ratios available through custom width/height settings;
43
+ this initial preset list does not restrict the renderer.
44
+
45
+ ## Rendering behavior
46
+
47
+ Choosing a preset sets the output canvas only. Source-to-canvas behavior is a
48
+ separate policy with these options:
49
+
50
+ - `contain` scales the full source frame inside the clip bounds, leaving empty
51
+ canvas around it when the aspect ratios differ. This is the default because
52
+ it preserves the full source image.
53
+ - `cover` fills the clip bounds and center-crops any overflow.
54
+ - `fill` stretches the source to the clip bounds and can distort its shape.
55
+
56
+ Set `sourceFit` on project metadata or `timeline.project` for the project-wide
57
+ default; a video clip's `fit` field overrides that policy. The CLI accepts
58
+ `--fit contain|cover|fill` during project creation. The renderer validates these
59
+ values rather than silently substituting a crop mode. Platform safe-area guides
60
+ are separate and are not implied by a ratio preset.
61
+
62
+ ## Sources
63
+
64
+ - [YouTube: Video resolution and aspect ratios](https://support.google.com/youtube/answer/6375112)
65
+ - [YouTube: Shorts upload tips](https://support.google.com/youtube/answer/12921536)
66
+ - [TikTok Business Help: Reservation in-feed ad specifications](https://ads.tiktok.com/resources/help/article/tiktok-reservation-in-feed-ads-reach-frequency)
67
+ - [LinkedIn Help: Video ads advertising specifications](https://www.linkedin.com/help/linkedin/answer/a424737)
68
+ - [Vimeo Help: Instagram video aspect-ratio options](https://help.vimeo.com/hc/en-us/articles/12426476775953-How-to-select-a-ratio-in-the-video-editor-for-Instagram-posts)
69
+
70
+ Platform specifications can change and may differ between organic uploads,
71
+ advertising placements, and publishing tools. Recheck the destination's current
72
+ requirements before adding validation that rejects an export.
package/docs/releasing.md CHANGED
@@ -1,19 +1,19 @@
1
- # Releasing AIVEE
2
-
3
- The `Build Flow` workflow validates pull requests targeting `dev` or `main`.
4
- Merging the release pull request to `main` publishes `aivee` to npm and
5
- `@warengonzaga/aivee` to GitHub Packages, then creates a GitHub Release after
6
- both registries report success. Development, pull-request, and manual runs do
7
- not publish packages.
8
-
9
- ## One-time setup
10
-
11
- 1. Add an npm automation token with publish access as the repository secret
12
- `NPM_TOKEN`. The workflow uses it to create the initial npm package and to
13
- publish later versions.
14
- 2. Enable GitHub Actions package write access for the repository. The workflow
15
- uses `GITHUB_TOKEN` to publish the GitHub Packages copy.
16
-
17
- After setup, release promotion from `dev` to `main` runs the version, package,
18
- and GitHub Release flow. Check both registries after the first automated release;
19
- publishing to them is not atomic.
1
+ # Releasing AIVEE
2
+
3
+ The `Build Flow` workflow validates pull requests targeting `dev` or `main` and
4
+ publishes package artifacts on pull requests, pushes to `dev`, and manual runs.
5
+ These preview artifacts go to npm and GitHub Packages. A push to `main` after
6
+ merging a release PR publishes the release versions and creates a GitHub Release
7
+ after both registries report success. Container publishing is disabled.
8
+
9
+ ## One-time setup
10
+
11
+ 1. Configure npm trusted publishing for this GitHub repository and the
12
+ `build-flow.yml` workflow. The workflow uses OIDC; no `NPM_TOKEN` secret is
13
+ required.
14
+ 2. Allow GitHub Actions to write packages. The workflow uses `GITHUB_TOKEN` to
15
+ publish the GitHub Packages copy.
16
+
17
+ After setup, release promotion from `dev` to `main` runs the version, package,
18
+ and GitHub Release flow. Check both registries after the first automated release;
19
+ publishing to them is not atomic.