@hypit/hypit 0.2.6 → 0.2.8

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 (70) hide show
  1. package/README.md +1 -1
  2. package/dist/public/hyperframes.d.ts +19 -2
  3. package/examples/provider-package/README.md +2 -2
  4. package/package.json +2 -1
  5. package/packages/caption-fine/README.md +4 -4
  6. package/packages/credential-store-file/README.md +4 -0
  7. package/packages/credential-store-file/src/store.ts +2 -2
  8. package/packages/credential-store-platform/README.md +2 -0
  9. package/packages/hyperframes/README.md +7 -0
  10. package/packages/hyperframes/src/html-project.ts +99 -0
  11. package/packages/hyperframes/src/index.ts +2 -0
  12. package/packages/hyperframes/src/project.ts +28 -0
  13. package/packages/pixverse/README.md +35 -0
  14. package/packages/pixverse/package.json +21 -0
  15. package/packages/pixverse/src/activation.ts +11 -0
  16. package/packages/pixverse/src/index.ts +122 -0
  17. package/packages/pixverse/src/surface.ts +146 -0
  18. package/packages/provider-hiapi/README.md +1 -1
  19. package/packages/provider-hyperframes-local/README.md +19 -7
  20. package/packages/provider-hyperframes-local/src/capture.ts +18 -8
  21. package/packages/provider-hyperframes-local/src/index.ts +1 -1
  22. package/packages/provider-hyperframes-local/src/output.ts +1 -1
  23. package/packages/provider-hyperframes-local/src/process-tree.ts +8 -2
  24. package/packages/provider-hyperframes-local/src/provider.ts +29 -2
  25. package/packages/provider-hyperframes-local/src/render.ts +45 -20
  26. package/packages/provider-hyperframes-local/src/sampling.ts +3 -2
  27. package/packages/provider-hypihub/README.md +3 -4
  28. package/packages/provider-monid/README.md +1 -1
  29. package/packages/provider-tokendance/README.md +1 -1
  30. package/packages/provider-whisperx-local/README.md +8 -5
  31. package/packages/render-hyperframes/README.md +9 -0
  32. package/packages/render-hyperframes/src/index.ts +3 -0
  33. package/packages/render-hyperframes/src/manifest.ts +7 -2
  34. package/packages/render-hyperframes/src/product.ts +41 -2
  35. package/packages/runtime-local/src/process-control.ts +4 -1
  36. package/packages/runtime-local/src/programs.ts +15 -3
  37. package/packages/runtime-local/src/supervisor.ts +8 -1
  38. package/packages/script/README.md +11 -4
  39. package/packages/script/src/format.ts +11 -24
  40. package/packages/script/src/manifest.ts +2 -2
  41. package/packages/script/src/parser.ts +16 -21
  42. package/packages/script/src/surface.ts +5 -3
  43. package/packages/script/src/types.ts +1 -1
  44. package/packages/seedance/README.md +11 -18
  45. package/packages/seedance/src/index.ts +7 -7
  46. package/packages/seedance/src/surface.ts +9 -8
  47. package/packages/seedance-kits/README.md +4 -3
  48. package/packages/source/README.md +1 -1
  49. package/packages/source/src/header.ts +2 -1
  50. package/packages/studio/README.md +13 -0
  51. package/packages/studio/src/feedback-server.ts +7 -0
  52. package/packages/studio/src/mutation-origin.ts +20 -0
  53. package/packages/studio/src/parameters.ts +3 -7
  54. package/packages/studio/src/preview/render.ts +7 -1
  55. package/packages/studio/src/server.ts +39 -0
  56. package/packages/studio/src/session.ts +7 -3
  57. package/packages/studio/src/ui/syntax.ts +11 -10
  58. package/packages/temporal-markup/EDITING.md +1 -1
  59. package/packages/video-cli/README.md +47 -4
  60. package/packages/video-cli/package.json +3 -0
  61. package/packages/video-cli/src/cli.ts +9 -9
  62. package/packages/video-cli/src/creation.ts +3 -3
  63. package/packages/video-cli/src/frame-grid.ts +34 -0
  64. package/packages/video-cli/src/index.ts +4 -0
  65. package/packages/video-cli/src/media-frames.ts +25 -0
  66. package/packages/video-cli/src/media.ts +198 -46
  67. package/packages/video-cli/src/process.ts +13 -3
  68. package/packages/video-cli/src/secret-input.ts +14 -0
  69. package/packages/video-cli/src/snapshot.ts +186 -0
  70. package/packages/yt-dlp/src/download.ts +32 -18
@@ -10,13 +10,22 @@
10
10
  * keep changing, so an unpinned copy makes the same link fetch differently on two machines. This is
11
11
  * the same shape WhisperX and OpenCV already use for their Python programs.
12
12
  */
13
- import { spawnSync } from "node:child_process";
13
+ import { execFile } from "node:child_process";
14
14
  import { copyFile, mkdtemp, readdir, rename, rm } from "node:fs/promises";
15
15
  import { tmpdir } from "node:os";
16
16
  import { extname, join } from "node:path";
17
17
 
18
18
  import { requireVideoDownload } from "./environment.js";
19
19
 
20
+ function runExec(file: string, args: readonly string[], options: { readonly timeout?: number; readonly maxBuffer?: number; readonly signal?: AbortSignal | undefined } = {}): Promise<{ readonly stdout: string; readonly stderr: string }> {
21
+ return new Promise((resolve, reject) => {
22
+ execFile(file, [...args], { encoding: "utf8", windowsHide: true, ...options }, (error, stdout, stderr) => {
23
+ if (error !== null) reject(Object.assign(error, { stdout, stderr }));
24
+ else resolve({ stdout: String(stdout), stderr: String(stderr) });
25
+ });
26
+ });
27
+ }
28
+
20
29
  /**
21
30
  * Whether this is a link to fetch rather than a path to open.
22
31
  *
@@ -42,30 +51,35 @@ export function isVideoUrl(value: string): boolean {
42
51
  * nothing under the bound. `--no-playlist` keeps a link inside a playlist from fetching the playlist.
43
52
  * The container follows the target's extension.
44
53
  */
45
- export async function downloadVideo(url: string, target: string): Promise<void> {
54
+ export async function downloadVideo(url: string, target: string, options: { readonly signal?: AbortSignal } = {}): Promise<void> {
46
55
  const container = extname(target).slice(1).toLowerCase();
47
56
  if (!["mp4", "mkv", "webm", "mov"].includes(container)) {
48
57
  throw new Error(`${target} must end in .mp4, .mkv, .webm or .mov`);
49
58
  }
50
59
  const executable = requireVideoDownload();
51
- const media = spawnSync("ffmpeg", ["-version"], { encoding: "utf8", windowsHide: true, timeout: 15_000 });
52
- if (media.status !== 0) throw new Error("FFmpeg is unavailable on PATH; install your selected media toolchain before fetching video");
60
+ try {
61
+ await runExec("ffmpeg", ["-version"], { timeout: 15_000, signal: options.signal });
62
+ } catch (error) {
63
+ if (options.signal?.aborted) throw error;
64
+ throw new Error("FFmpeg is unavailable on PATH; install your selected media toolchain before fetching video");
65
+ }
53
66
  const work = await mkdtemp(join(tmpdir(), "hypit-fetch-"));
54
67
  try {
55
- const result = spawnSync(executable, [
56
- "--ignore-config", "--no-update", "--no-remote-components", "--no-plugin-dirs",
57
- "--no-js-runtimes", "--js-runtimes", `node:${process.execPath}`,
58
- "--no-playlist", "--no-progress", "--quiet",
59
- "--format", "bv*+ba/b",
60
- "--merge-output-format", container,
61
- "--format-sort", "res:1080,vcodec:h264",
62
- "--output", join(work, "video.%(ext)s"),
63
- url,
64
- ], { encoding: "utf8", windowsHide: true, timeout: 900_000 });
65
-
66
- if (result.error !== undefined) throw result.error;
67
- if (result.status !== 0) {
68
- throw new Error(`yt-dlp could not fetch ${url}: ${(result.stderr ?? "").trim().slice(-2000)}`);
68
+ try {
69
+ await runExec(executable, [
70
+ "--ignore-config", "--no-update", "--no-remote-components", "--no-plugin-dirs",
71
+ "--no-js-runtimes", "--js-runtimes", `node:${process.execPath}`,
72
+ "--no-playlist", "--no-progress", "--quiet",
73
+ "--format", "bv*+ba/b",
74
+ "--merge-output-format", container,
75
+ "--format-sort", "res:1080,vcodec:h264",
76
+ "--output", join(work, "video.%(ext)s"),
77
+ url,
78
+ ], { timeout: 900_000, maxBuffer: 10 * 1024 * 1024, signal: options.signal });
79
+ } catch (cause) {
80
+ if (options.signal?.aborted) throw cause;
81
+ const error = cause as { stderr?: string; message?: string };
82
+ throw new Error(`yt-dlp could not fetch ${url}: ${(error.stderr ?? error.message ?? "").trim().slice(-2000)}`);
69
83
  }
70
84
  const finished = (await readdir(work)).filter((name) => !name.endsWith(".part"));
71
85
  const [file] = finished.sort();