@amaster.ai/pi-video-gen 0.1.2-beta.48

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 (85) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +196 -0
  3. package/dist/compose.d.ts +43 -0
  4. package/dist/compose.d.ts.map +1 -0
  5. package/dist/compose.js +308 -0
  6. package/dist/compose.js.map +1 -0
  7. package/dist/config.d.ts +29 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +305 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/errors.d.ts +50 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +99 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/ffmpeg.d.ts +64 -0
  16. package/dist/ffmpeg.d.ts.map +1 -0
  17. package/dist/ffmpeg.js +292 -0
  18. package/dist/ffmpeg.js.map +1 -0
  19. package/dist/index.d.ts +3 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +837 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/jobs/store.d.ts +124 -0
  24. package/dist/jobs/store.d.ts.map +1 -0
  25. package/dist/jobs/store.js +386 -0
  26. package/dist/jobs/store.js.map +1 -0
  27. package/dist/providers/ark.d.ts +26 -0
  28. package/dist/providers/ark.d.ts.map +1 -0
  29. package/dist/providers/ark.js +178 -0
  30. package/dist/providers/ark.js.map +1 -0
  31. package/dist/providers/dashscope.d.ts +28 -0
  32. package/dist/providers/dashscope.d.ts.map +1 -0
  33. package/dist/providers/dashscope.js +200 -0
  34. package/dist/providers/dashscope.js.map +1 -0
  35. package/dist/providers/kling.d.ts +46 -0
  36. package/dist/providers/kling.d.ts.map +1 -0
  37. package/dist/providers/kling.js +245 -0
  38. package/dist/providers/kling.js.map +1 -0
  39. package/dist/providers/models.d.ts +16 -0
  40. package/dist/providers/models.d.ts.map +1 -0
  41. package/dist/providers/models.js +152 -0
  42. package/dist/providers/models.js.map +1 -0
  43. package/dist/providers/newapi.d.ts +3 -0
  44. package/dist/providers/newapi.d.ts.map +1 -0
  45. package/dist/providers/newapi.js +203 -0
  46. package/dist/providers/newapi.js.map +1 -0
  47. package/dist/providers/openrouter.d.ts +21 -0
  48. package/dist/providers/openrouter.d.ts.map +1 -0
  49. package/dist/providers/openrouter.js +169 -0
  50. package/dist/providers/openrouter.js.map +1 -0
  51. package/dist/providers/request.d.ts +4 -0
  52. package/dist/providers/request.d.ts.map +1 -0
  53. package/dist/providers/request.js +20 -0
  54. package/dist/providers/request.js.map +1 -0
  55. package/dist/providers/task.d.ts +53 -0
  56. package/dist/providers/task.d.ts.map +1 -0
  57. package/dist/providers/task.js +209 -0
  58. package/dist/providers/task.js.map +1 -0
  59. package/dist/render.d.ts +53 -0
  60. package/dist/render.d.ts.map +1 -0
  61. package/dist/render.js +480 -0
  62. package/dist/render.js.map +1 -0
  63. package/dist/text-layer.d.ts +18 -0
  64. package/dist/text-layer.d.ts.map +1 -0
  65. package/dist/text-layer.js +168 -0
  66. package/dist/text-layer.js.map +1 -0
  67. package/dist/timeline-render.d.ts +33 -0
  68. package/dist/timeline-render.d.ts.map +1 -0
  69. package/dist/timeline-render.js +1051 -0
  70. package/dist/timeline-render.js.map +1 -0
  71. package/dist/timeline.d.ts +64 -0
  72. package/dist/timeline.d.ts.map +1 -0
  73. package/dist/timeline.js +246 -0
  74. package/dist/timeline.js.map +1 -0
  75. package/dist/tts/edge-tts.d.ts +22 -0
  76. package/dist/tts/edge-tts.d.ts.map +1 -0
  77. package/dist/tts/edge-tts.js +55 -0
  78. package/dist/tts/edge-tts.js.map +1 -0
  79. package/dist/types.d.ts +161 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +13 -0
  82. package/dist/types.js.map +1 -0
  83. package/package.json +93 -0
  84. package/preview.png +0 -0
  85. package/skills/video-gen/SKILL.md +284 -0
package/dist/ffmpeg.js ADDED
@@ -0,0 +1,292 @@
1
+ import { spawn, spawnSync } from 'node:child_process';
2
+ import { mkdtemp, rename, rm, writeFile } from 'node:fs/promises';
3
+ import { createRequire } from 'node:module';
4
+ import { dirname, join } from 'node:path';
5
+ import { safeBasename, VideoGenError } from './errors.js';
6
+ import { CancelledError } from './providers/task.js';
7
+ /**
8
+ * Lazily resolve an ffmpeg binary without crashing when node_modules is
9
+ * absent (extension path loading does not install dependencies).
10
+ * Priority: platform-specific optional npm package →
11
+ * ffmpeg-static npm package (devDependency, dev machines only).
12
+ */
13
+ const localRequire = createRequire(import.meta.url);
14
+ const platformBin = (() => {
15
+ try {
16
+ return localRequire.resolve(`@amaster.ai/pi-video-gen-ffmpeg-${process.platform}-${process.arch}/ffmpeg`);
17
+ }
18
+ catch {
19
+ return null;
20
+ }
21
+ })();
22
+ const ffmpegStatic = (() => {
23
+ try {
24
+ return localRequire('ffmpeg-static');
25
+ }
26
+ catch {
27
+ return null; // devDependency not installed — PATH fallback remains
28
+ }
29
+ })();
30
+ /**
31
+ * Resolve ffprobe as the SIBLING of the resolved ffmpeg (same directory),
32
+ * falling back to `ffprobe` on PATH. Platform packages ship both binaries.
33
+ */
34
+ /**
35
+ * Resolve the GPL ffmpeg variant (with libx264) as the sibling of the
36
+ * resolved ffmpeg named `ffmpeg-gpl`. Required for h264 output — the LGPL
37
+ * build intentionally has no x264 encoder.
38
+ */
39
+ export function resolveGplFfmpeg(settingsPath) {
40
+ const ff = resolveFfmpeg(settingsPath);
41
+ const exe = process.platform === 'win32' ? 'ffmpeg-gpl.exe' : 'ffmpeg-gpl';
42
+ if (ff.source !== 'path') {
43
+ const sibling = join(dirname(ff.path), exe);
44
+ if (hasEncoder(sibling, 'libx264'))
45
+ return { path: sibling, source: ff.source, runnable: true };
46
+ }
47
+ return {
48
+ path: ff.path,
49
+ source: ff.source,
50
+ runnable: ff.runnable && hasEncoder(ff.path, 'libx264'),
51
+ };
52
+ }
53
+ export function resolveFfprobe(settingsPath) {
54
+ const ff = resolveFfmpeg(settingsPath);
55
+ const exe = process.platform === 'win32' ? 'ffprobe.exe' : 'ffprobe';
56
+ if (ff.source !== 'path') {
57
+ const sibling = join(dirname(ff.path), exe);
58
+ if (isRunnable(sibling))
59
+ return { path: sibling, source: ff.source, runnable: true };
60
+ if (ff.source === 'settings' || ff.source === 'env') {
61
+ return { path: sibling, source: ff.source, runnable: false };
62
+ }
63
+ // Bundled sibling missing/broken — keep looking on PATH rather than dying.
64
+ }
65
+ return { path: exe, source: 'path', runnable: isRunnable(exe) };
66
+ }
67
+ export function resolveFfmpeg(settingsPath) {
68
+ if (settingsPath)
69
+ return { path: settingsPath, source: 'settings', runnable: isRunnable(settingsPath) };
70
+ if (process.env.FFMPEG_PATH) {
71
+ return {
72
+ path: process.env.FFMPEG_PATH,
73
+ source: 'env',
74
+ runnable: isRunnable(process.env.FFMPEG_PATH),
75
+ };
76
+ }
77
+ if (platformBin && isRunnable(platformBin))
78
+ return { path: platformBin, source: 'bundled', runnable: true };
79
+ if (ffmpegStatic && isRunnable(ffmpegStatic))
80
+ return { path: ffmpegStatic, source: 'bundled', runnable: true };
81
+ return { path: 'ffmpeg', source: 'path', runnable: isRunnable('ffmpeg') };
82
+ }
83
+ function isRunnable(path) {
84
+ try {
85
+ const res = spawnSync(path, ['-version'], { stdio: 'ignore' });
86
+ return res.status === 0;
87
+ }
88
+ catch {
89
+ return false;
90
+ }
91
+ }
92
+ function hasEncoder(path, encoder) {
93
+ try {
94
+ const res = spawnSync(path, ['-hide_banner', '-encoders'], {
95
+ encoding: 'utf-8',
96
+ maxBuffer: 1024 * 1024,
97
+ timeout: 5_000,
98
+ });
99
+ return res.status === 0 && new RegExp(`\\b${encoder}\\b`).test(res.stdout);
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ function streamSignature(stream) {
106
+ if (stream.codec_type === 'video') {
107
+ return `video:${stream.codec_name ?? 'unknown'}/${stream.width ?? '?'}x${stream.height ?? '?'}/${stream.r_frame_rate ?? 'unknown'}/${stream.time_base ?? 'unknown'}/${stream.pix_fmt ?? 'unknown'}`;
108
+ }
109
+ if (stream.codec_type === 'audio') {
110
+ return `audio:${stream.codec_name ?? 'unknown'}/${stream.channel_layout ?? stream.channels ?? '?'}/${stream.sample_rate ?? 'unknown'}/${stream.time_base ?? 'unknown'}`;
111
+ }
112
+ return `${stream.codec_type ?? 'unknown'}:${stream.codec_name ?? 'unknown'}/${stream.time_base ?? 'unknown'}`;
113
+ }
114
+ function runFfprobe(ffprobePath, args, filePath, signal) {
115
+ return new Promise((resolvePromise, reject) => {
116
+ const child = spawn(ffprobePath, args, { stdio: ['ignore', 'pipe', 'ignore'], signal });
117
+ let output = '';
118
+ child.stdout?.on('data', (chunk) => {
119
+ output += chunk.toString();
120
+ });
121
+ child.on('error', () => {
122
+ reject(signal?.aborted
123
+ ? new CancelledError()
124
+ : new VideoGenError('ffprobe is not runnable. Run /video-gen doctor.', 'probe: spawn failed'));
125
+ });
126
+ child.on('close', (code) => {
127
+ if (code === 0) {
128
+ resolvePromise(output);
129
+ }
130
+ else {
131
+ reject(new VideoGenError(`ffprobe failed (exit ${code}) reading ${safeBasename(filePath)}.`, `probe: exit ${code}`));
132
+ }
133
+ });
134
+ });
135
+ }
136
+ /** Probe a media file's stream signature for strict-copy compatibility checks. */
137
+ export async function probeStreams(ffprobePath, filePath, signal) {
138
+ const args = ['-v', 'error', '-show_streams', '-of', 'json', filePath];
139
+ const output = await runFfprobe(ffprobePath, args, filePath, signal);
140
+ let streams;
141
+ try {
142
+ streams = JSON.parse(output).streams ?? [];
143
+ }
144
+ catch {
145
+ throw new VideoGenError(`ffprobe returned unparseable output for ${safeBasename(filePath)} — is it a media file?`, 'probe: bad output');
146
+ }
147
+ const video = streams.find((st) => st.codec_type === 'video');
148
+ if (!video?.codec_name || !video.width || !video.height) {
149
+ throw new VideoGenError(`No video stream found in ${safeBasename(filePath)} — compose needs mp4 clips with a video track.`, 'probe: no video stream');
150
+ }
151
+ const audio = streams.find((st) => st.codec_type === 'audio');
152
+ const subtitle = streams.find((st) => st.codec_type === 'subtitle');
153
+ return {
154
+ videoCodec: video.codec_name,
155
+ width: video.width,
156
+ height: video.height,
157
+ fps: video.r_frame_rate ?? 'unknown',
158
+ timebase: video.time_base ?? 'unknown',
159
+ pixFmt: video.pix_fmt ?? 'unknown',
160
+ audioLayout: audio
161
+ ? `${audio.codec_name ?? 'unknown'}/${audio.channel_layout ?? audio.channels ?? '?'}`
162
+ : 'none',
163
+ streamCount: streams.length,
164
+ audioSampleRate: audio?.sample_rate ?? 'none',
165
+ audioTimebase: audio?.time_base ?? 'none',
166
+ subtitleCodec: subtitle?.codec_name ?? 'none',
167
+ streamSignatures: streams.map(streamSignature),
168
+ };
169
+ }
170
+ /** ffprobe the container duration of a media file, in seconds. */
171
+ export async function probeDuration(ffprobePath, filePath, signal) {
172
+ const args = [
173
+ '-v',
174
+ 'error',
175
+ '-show_entries',
176
+ 'format=duration',
177
+ '-of',
178
+ 'default=noprint_wrappers=1:nokey=0',
179
+ filePath,
180
+ ];
181
+ const output = await runFfprobe(ffprobePath, args, filePath, signal);
182
+ const match = output.match(/duration=([0-9.]+)/);
183
+ if (!match) {
184
+ throw new VideoGenError(`ffprobe returned no duration for ${safeBasename(filePath)}.`, 'probe: no duration');
185
+ }
186
+ return Number(match[1]);
187
+ }
188
+ /** Probe the first video stream's duration (container audio may be longer). */
189
+ export async function probeVideoDuration(ffprobePath, filePath, signal) {
190
+ const output = await runFfprobe(ffprobePath, [
191
+ '-v',
192
+ 'error',
193
+ '-select_streams',
194
+ 'v:0',
195
+ '-show_entries',
196
+ 'stream=duration:stream_tags=duration',
197
+ '-of',
198
+ 'json',
199
+ filePath,
200
+ ], filePath, signal);
201
+ let duration = Number.NaN;
202
+ try {
203
+ const stream = JSON.parse(output).streams?.[0];
204
+ duration = Number(stream?.duration);
205
+ if ((!Number.isFinite(duration) || duration <= 0) && stream?.tags?.DURATION) {
206
+ const [hours, minutes, seconds] = stream.tags.DURATION.split(':').map(Number);
207
+ duration = hours * 3600 + minutes * 60 + seconds;
208
+ }
209
+ }
210
+ catch {
211
+ // Report the same bounded media error below.
212
+ }
213
+ if (!Number.isFinite(duration) || duration <= 0) {
214
+ throw new VideoGenError(`Could not determine the video stream duration of ${safeBasename(filePath)}.`, 'probe: bad video duration');
215
+ }
216
+ return duration;
217
+ }
218
+ /** Public ffmpeg runner used by the timeline pipeline (arbitrary arg lists). */
219
+ export function runFfmpegCommand(ffmpegPath, args, signal) {
220
+ return new Promise((resolvePromise, reject) => {
221
+ const child = spawn(ffmpegPath, args, { stdio: 'ignore', signal });
222
+ child.on('error', () => {
223
+ if (signal?.aborted) {
224
+ reject(new CancelledError());
225
+ return;
226
+ }
227
+ reject(new VideoGenError('ffmpeg is not runnable. Run /video-gen doctor.', 'ffmpeg: spawn failed'));
228
+ });
229
+ child.on('close', (code) => {
230
+ if (code === 0) {
231
+ resolvePromise();
232
+ }
233
+ else {
234
+ reject(new VideoGenError(`ffmpeg failed (exit ${code}) while processing local media. Run /video-gen doctor and retry.`, `ffmpeg: exit ${code}`));
235
+ }
236
+ });
237
+ });
238
+ }
239
+ /**
240
+ * Concatenate shot clips into the final video. Tries the lossless concat
241
+ * demuxer (`-c copy`) first — same-codec clips join in seconds without
242
+ * re-encoding; falls back to an mpeg4 re-encode when codecs/params differ
243
+ * (mpeg4 is LGPL-clean — libx264 would REQUIRE a GPL build of ffmpeg).
244
+ */
245
+ export async function concatVideos(opts) {
246
+ if (opts.inputs.length === 0) {
247
+ throw new VideoGenError('No clips to concatenate.', 'concat: empty inputs');
248
+ }
249
+ const dir = dirname(opts.outputPath);
250
+ const workDir = await mkdtemp(join(dir, '.concat-'));
251
+ const listPath = join(workDir, 'list.txt');
252
+ const tmpOut = join(workDir, 'output.mp4');
253
+ try {
254
+ // ffconcat single-quote escaping: an embedded ' would break the demuxer
255
+ // ("O'Brien/project") — close-quote, escaped quote, reopen.
256
+ await writeFile(listPath, opts.inputs.map((p) => `file '${p.replace(/'/g, `'\\''`)}'`).join('\n'), {
257
+ encoding: 'utf-8',
258
+ flag: 'wx',
259
+ });
260
+ try {
261
+ await runFfmpegCommand(opts.ffmpegPath, ['-y', '-f', 'concat', '-safe', '0', '-i', listPath, '-c', 'copy', tmpOut], opts.signal);
262
+ }
263
+ catch (error) {
264
+ if (opts.signal?.aborted)
265
+ throw error;
266
+ if (opts.strictCopy) {
267
+ throw new VideoGenError('Lossless concat failed even though streams probed as compatible. The clips may have container-level issues (timestamps, edit lists) that concat copy cannot handle. compose will not transcode — re-encode the clips first.', 'concat: strict copy failed');
268
+ }
269
+ await runFfmpegCommand(opts.ffmpegPath, [
270
+ '-y',
271
+ '-f',
272
+ 'concat',
273
+ '-safe',
274
+ '0',
275
+ '-i',
276
+ listPath,
277
+ '-c:v',
278
+ 'mpeg4',
279
+ '-q:v',
280
+ '5',
281
+ '-pix_fmt',
282
+ 'yuv420p',
283
+ tmpOut,
284
+ ], opts.signal);
285
+ }
286
+ await rename(tmpOut, opts.outputPath);
287
+ }
288
+ finally {
289
+ await rm(workDir, { recursive: true, force: true });
290
+ }
291
+ }
292
+ //# sourceMappingURL=ffmpeg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ffmpeg.js","sourceRoot":"","sources":["../src/ffmpeg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type ExtensionAPI } from '@earendil-works/pi-coding-agent';
2
+ export default function piVideoGenExtension(pi: ExtensionAPI): void;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,iCAAiC,CAAC;AAsJzC,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CA29BlE"}