@hypit/hypit 0.1.3 → 0.1.4

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 (92) hide show
  1. package/README.md +1 -1
  2. package/dist/public/studio-adapter.d.ts +31 -2
  3. package/package.json +4 -1
  4. package/packages/audio-track-studio/src/index.ts +7 -4
  5. package/packages/build-result/README.md +58 -0
  6. package/packages/build-result/package.json +2 -1
  7. package/packages/build-result/src/decode.ts +10 -8
  8. package/packages/build-result/src/file-reference.ts +42 -0
  9. package/packages/build-result/src/index.ts +3 -0
  10. package/packages/build-result/src/replace-file-windows.ts +58 -0
  11. package/packages/build-result/src/replace-file.ts +11 -0
  12. package/packages/build-result/src/store.ts +44 -13
  13. package/packages/build-result/src/types.ts +38 -8
  14. package/packages/build-result/src/writer.ts +12 -1
  15. package/packages/build-result-fs/README.md +23 -1
  16. package/packages/build-result-s3/README.md +5 -0
  17. package/packages/build-result-s3/src/repository.ts +19 -5
  18. package/packages/caption-fine/README.md +17 -2
  19. package/packages/caption-fine/src/manifest.ts +1 -1
  20. package/packages/caption-fine/src/render.ts +48 -36
  21. package/packages/caption-fine-studio/package.json +8 -3
  22. package/packages/caption-fine-studio/src/index.ts +10 -1
  23. package/packages/cli/README.md +25 -0
  24. package/packages/cli/src/arguments.ts +16 -11
  25. package/packages/cli/src/build-planning.ts +6 -1
  26. package/packages/cli/src/command.ts +1 -1
  27. package/packages/cli/src/commands/environment.ts +42 -13
  28. package/packages/cli/src/machine-view.ts +12 -3
  29. package/packages/cli/src/main.ts +4 -0
  30. package/packages/cli/src/output.ts +28 -12
  31. package/packages/cli/src/result-export.ts +22 -13
  32. package/packages/cli/src/run-file.ts +19 -8
  33. package/packages/comment-sticker-studio/src/index.ts +2 -1
  34. package/packages/compiler-node/src/compiler.ts +1 -0
  35. package/packages/estimate/README.md +56 -3
  36. package/packages/estimate/src/program.ts +7 -8
  37. package/packages/fonts-open/README.md +5 -0
  38. package/packages/fonts-open/package.json +5 -1
  39. package/packages/fonts-open/src/studio.ts +21 -0
  40. package/packages/media-track-studio/src/index.ts +7 -2
  41. package/packages/provider-whisperx-local/README.md +57 -0
  42. package/packages/ranking/src/render.ts +11 -9
  43. package/packages/ranking-studio/README.md +11 -0
  44. package/packages/ranking-studio/package.json +8 -3
  45. package/packages/ranking-studio/src/index.ts +11 -4
  46. package/packages/runtime/src/catalog.ts +2 -0
  47. package/packages/runtime-host-node/src/index.ts +1 -0
  48. package/packages/runtime-local/README.md +19 -0
  49. package/packages/runtime-local/src/programs.ts +39 -24
  50. package/packages/runtime-local/src/runtime.ts +2 -0
  51. package/packages/script/README.md +22 -0
  52. package/packages/script/src/edit.ts +123 -73
  53. package/packages/script/src/lexical.ts +40 -6
  54. package/packages/script/src/parser.ts +36 -8
  55. package/packages/script/src/types.ts +4 -0
  56. package/packages/seedance-kits/README.md +3 -1
  57. package/packages/seedance-kits/kits/speaker-v1.svs +5 -5
  58. package/packages/speech-alignment/src/align.ts +45 -21
  59. package/packages/studio/INSPECTOR.md +104 -0
  60. package/packages/studio/README.md +65 -4
  61. package/packages/studio/src/build-library.ts +99 -84
  62. package/packages/studio/src/library-media.ts +19 -0
  63. package/packages/studio/src/parameter-values.ts +41 -1
  64. package/packages/studio/src/parameters.ts +20 -21
  65. package/packages/studio/src/server.ts +58 -30
  66. package/packages/studio/src/shared.ts +20 -6
  67. package/packages/studio/src/studio-registry.ts +22 -0
  68. package/packages/studio/src/style.css +135 -144
  69. package/packages/studio/src/temporal-edit.ts +131 -0
  70. package/packages/studio/src/ui/artifact-name.ts +80 -0
  71. package/packages/studio/src/ui/artifact-preview.ts +99 -0
  72. package/packages/studio/src/ui/icons.ts +5 -1
  73. package/packages/studio/src/ui/library.ts +373 -192
  74. package/packages/studio/src/ui/main.ts +153 -31
  75. package/packages/studio/src/ui/material-preview.ts +1 -1
  76. package/packages/studio/src/ui/overlay.ts +21 -20
  77. package/packages/studio/src/ui/sidebar-panel.ts +31 -0
  78. package/packages/studio/src/ui/stage.ts +124 -8
  79. package/packages/studio/src/ui/timeline.ts +16 -179
  80. package/packages/studio/start.ts +15 -3
  81. package/packages/studio-adapter/README.md +21 -0
  82. package/packages/studio-adapter/src/index.ts +26 -1
  83. package/packages/temporal-markup/EDITING.md +183 -0
  84. package/packages/temporal-markup/README.md +4 -0
  85. package/packages/typography-track-studio/package.json +8 -3
  86. package/packages/typography-track-studio/src/index.ts +5 -1
  87. package/packages/video-cli/README.md +12 -3
  88. package/packages/video-cli/src/creation.ts +11 -5
  89. package/packages/whisperx/README.md +7 -0
  90. package/packages/workspace/src/index.ts +2 -0
  91. package/packages/workspace-fs-node/README.md +4 -1
  92. package/packages/workspace-fs-node/src/workspace.ts +3 -1
@@ -0,0 +1,99 @@
1
+ import type { StudioArtifactView } from "../shared.js";
2
+ import { audioPreview } from "./material-preview.js";
3
+
4
+ /** A media viewer only: it does not change the composition or its playhead. */
5
+ export function createArtifactPreview(changed: () => void) {
6
+ const element = document.createElement("div");
7
+ element.className = "stage-artifact";
8
+ element.hidden = true;
9
+ let selected: StudioArtifactView | undefined;
10
+ let media: HTMLMediaElement | undefined;
11
+ let generation = 0;
12
+
13
+ function close(): void {
14
+ generation += 1;
15
+ selected = undefined;
16
+ if (media !== undefined) {
17
+ media.pause();
18
+ media.removeAttribute("src");
19
+ media.load();
20
+ }
21
+ media = undefined;
22
+ element.replaceChildren();
23
+ element.hidden = true;
24
+ }
25
+
26
+ function open(artifact: StudioArtifactView, muted: boolean): void {
27
+ close();
28
+ const current = generation;
29
+ selected = artifact;
30
+ element.hidden = false;
31
+ const url = `/__studio/artifact?${new URLSearchParams({ build: artifact.build, output: artifact.output })}`;
32
+ const error = document.createElement("p");
33
+ error.className = "stage-media-error";
34
+ error.hidden = true;
35
+ error.setAttribute("role", "status");
36
+ const failed = () => {
37
+ if (generation !== current) return;
38
+ error.textContent = "This media could not be opened in the browser.";
39
+ error.hidden = false;
40
+ changed();
41
+ };
42
+ if (artifact.mediaType.startsWith("image/")) {
43
+ const image = document.createElement("img");
44
+ image.alt = artifact.displayName ?? artifact.output;
45
+ image.addEventListener("error", failed);
46
+ image.src = url;
47
+ element.append(image);
48
+ } else {
49
+ const audio = artifact.mediaType.startsWith("audio/");
50
+ const player = document.createElement(audio ? "audio" : "video");
51
+ media = player;
52
+ if (player instanceof HTMLVideoElement) player.playsInline = true;
53
+ player.preload = "metadata";
54
+ player.muted = muted;
55
+ for (const event of ["loadedmetadata", "durationchange", "timeupdate", "play", "pause", "ended", "seeking", "seeked"]) {
56
+ player.addEventListener(event, () => { if (generation === current) changed(); });
57
+ }
58
+ player.addEventListener("error", failed);
59
+ player.src = url;
60
+ element.append(player);
61
+ if (audio) {
62
+ const wave = document.createElement("div");
63
+ wave.className = "stage-audio-wave";
64
+ wave.textContent = "Audio";
65
+ element.append(wave);
66
+ void audioPreview(url).then((waveform) => {
67
+ if (generation !== current || waveform === undefined) return;
68
+ const image = document.createElement("img");
69
+ image.src = waveform;
70
+ image.alt = "Audio waveform";
71
+ wave.replaceChildren(image);
72
+ });
73
+ }
74
+ }
75
+ element.append(error);
76
+ changed();
77
+ }
78
+
79
+ function seek(seconds: number): void {
80
+ if (media === undefined || !Number.isFinite(media.duration)) return;
81
+ media.currentTime = Math.max(0, Math.min(media.duration, seconds));
82
+ changed();
83
+ }
84
+
85
+ function toggle(): void {
86
+ const player = media;
87
+ if (player === undefined) return;
88
+ if (!player.paused) player.pause();
89
+ else {
90
+ if (player.ended) player.currentTime = 0;
91
+ void player.play().catch(() => changed());
92
+ }
93
+ }
94
+
95
+ return { element, open, close, seek, toggle,
96
+ get selected() { return selected; },
97
+ get media() { return media; },
98
+ };
99
+ }
@@ -14,7 +14,6 @@ const paths: Readonly<Record<string, string>> = {
14
14
  results: '<path d="M4 8v12h16V8M3 4h18v4H3zM9 12h6"/>',
15
15
  run: '<circle cx="12" cy="12" r="9"/><path d="m10 8 6 4-6 4V8Z"/>',
16
16
  image: '<rect x="3" y="4" width="18" height="16" rx="2"/><circle cx="8.5" cy="9" r="2"/><path d="m4 18 5-5 3 3 3-4 5 6"/>',
17
- sidebarCollapse: '<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M8 4v16m7-11-3 3 3 3"/>',
18
17
  wrap: '<path d="M4 6h16M4 10h12a4 4 0 0 1 0 8h-5m3-3-3 3 3 3M4 14h5M4 18h4"/>',
19
18
  timeline: '<path d="M3 6h18M3 12h18M3 18h18"/><path d="M8 4v4M16 10v4M11 16v4"/>',
20
19
  minus: '<path d="M5 12h14"/>',
@@ -40,6 +39,11 @@ const paths: Readonly<Record<string, string>> = {
40
39
  layers: '<path d="m12 3 9 5-9 5-9-5 9-5Z"/><path d="m3 12 9 5 9-5M3 16l9 5 9-5"/>',
41
40
  ranking: '<path d="M5 19V9h4v10M10 19V5h4v14M15 19v-7h4v7M3 19h18"/>',
42
41
  refresh: '<path d="M20 7v5h-5M4 17v-5h5"/><path d="M18.5 9a7 7 0 0 0-11.8-2.3L4 9M5.5 15a7 7 0 0 0 11.8 2.3L20 15"/>',
42
+ check: '<circle cx="12" cy="12" r="9"/><path d="m8 12 3 3 5-6"/>',
43
+ alert: '<circle cx="12" cy="12" r="9"/><path d="M12 7v6M12 17h.01"/>',
44
+ arrowRight: '<path d="M5 12h14m-6-6 6 6-6 6"/>',
45
+ close: '<path d="m6 6 12 12M18 6 6 18"/>',
46
+ panel: '<rect x="3" y="4" width="18" height="16" rx="2"/><path d="M8 4v16M8 9h13"/>',
43
47
  };
44
48
 
45
49
  export function icon(name: string, className = "icon"): string {