demofly 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.
- package/dist/commands/auth/login.js +1 -1
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/demos/delete.d.ts +3 -0
- package/dist/commands/demos/delete.d.ts.map +1 -0
- package/dist/commands/demos/delete.js +41 -0
- package/dist/commands/demos/delete.js.map +1 -0
- package/dist/commands/demos/get.d.ts +3 -0
- package/dist/commands/demos/get.d.ts.map +1 -0
- package/dist/commands/demos/get.js +30 -0
- package/dist/commands/demos/get.js.map +1 -0
- package/dist/commands/demos/index.d.ts +3 -0
- package/dist/commands/demos/index.d.ts.map +1 -0
- package/dist/commands/demos/index.js +17 -0
- package/dist/commands/demos/index.js.map +1 -0
- package/dist/commands/demos/list.d.ts +3 -0
- package/dist/commands/demos/list.d.ts.map +1 -0
- package/dist/commands/demos/list.js +117 -0
- package/dist/commands/demos/list.js.map +1 -0
- package/dist/commands/demos/open.d.ts +3 -0
- package/dist/commands/demos/open.d.ts.map +1 -0
- package/dist/commands/demos/open.js +45 -0
- package/dist/commands/demos/open.js.map +1 -0
- package/dist/commands/demos/update.d.ts +3 -0
- package/dist/commands/demos/update.d.ts.map +1 -0
- package/dist/commands/demos/update.js +31 -0
- package/dist/commands/demos/update.js.map +1 -0
- package/dist/commands/generate.d.ts +6 -0
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +73 -17
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +12 -9
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/render.d.ts +11 -0
- package/dist/commands/render.d.ts.map +1 -0
- package/dist/commands/render.js +161 -0
- package/dist/commands/render.js.map +1 -0
- package/dist/index.js +10 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +2 -1
- package/dist/lib/api-client.d.ts.map +1 -1
- package/dist/lib/api-client.js +22 -10
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/audio-stitching.d.ts +64 -0
- package/dist/lib/audio-stitching.d.ts.map +1 -0
- package/dist/lib/audio-stitching.js +260 -0
- package/dist/lib/audio-stitching.js.map +1 -0
- package/dist/lib/credentials.d.ts.map +1 -1
- package/dist/lib/credentials.js +2 -0
- package/dist/lib/credentials.js.map +1 -1
- package/dist/lib/demo-scanner.d.ts +17 -0
- package/dist/lib/demo-scanner.d.ts.map +1 -0
- package/dist/lib/demo-scanner.js +70 -0
- package/dist/lib/demo-scanner.js.map +1 -0
- package/dist/lib/enhancement-client.d.ts +17 -0
- package/dist/lib/enhancement-client.d.ts.map +1 -0
- package/dist/lib/enhancement-client.js +129 -0
- package/dist/lib/enhancement-client.js.map +1 -0
- package/dist/lib/hybrid-rendering.d.ts +52 -0
- package/dist/lib/hybrid-rendering.d.ts.map +1 -0
- package/dist/lib/hybrid-rendering.js +161 -0
- package/dist/lib/hybrid-rendering.js.map +1 -0
- package/dist/lib/logger.d.ts +7 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +19 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/tts.d.ts +12 -0
- package/dist/lib/tts.d.ts.map +1 -1
- package/dist/lib/tts.js +64 -28
- package/dist/lib/tts.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio Stitching Pipeline
|
|
3
|
+
*
|
|
4
|
+
* Precisely reassemble enhanced audio clips at original timestamps,
|
|
5
|
+
* maintaining perfect synchronization with video timeline.
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, writeFileSync } from "node:fs";
|
|
8
|
+
import { resolve } from "node:path";
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
/**
|
|
11
|
+
* Download enhanced audio files from cloud service
|
|
12
|
+
*/
|
|
13
|
+
async function downloadEnhancedAudio(segments, audioDir) {
|
|
14
|
+
const downloadedPaths = new Map();
|
|
15
|
+
for (const segment of segments) {
|
|
16
|
+
if (segment.audioUrl && segment.status === "success") {
|
|
17
|
+
const enhancedPath = resolve(audioDir, `enhanced_${segment.id}.mp3`);
|
|
18
|
+
try {
|
|
19
|
+
console.log(`⬇️ Downloading ${segment.id}...`);
|
|
20
|
+
// Download enhanced audio file
|
|
21
|
+
const response = await fetch(segment.audioUrl);
|
|
22
|
+
if (!response.ok) {
|
|
23
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
24
|
+
}
|
|
25
|
+
const audioData = await response.arrayBuffer();
|
|
26
|
+
writeFileSync(enhancedPath, Buffer.from(audioData));
|
|
27
|
+
downloadedPaths.set(segment.id, enhancedPath);
|
|
28
|
+
console.log(` ✅ Downloaded ${segment.id} (${audioData.byteLength} bytes)`);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error(` ❌ Failed to download ${segment.id}:`, error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return downloadedPaths;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate FFmpeg filter complex for precise audio assembly
|
|
39
|
+
*/
|
|
40
|
+
function generateFFmpegFilter(timeline, downloadedPaths, audioDir, options) {
|
|
41
|
+
const inputFiles = [];
|
|
42
|
+
const filters = [];
|
|
43
|
+
const qualityThreshold = options.qualityThreshold ?? 0.7;
|
|
44
|
+
let inputIndex = 0;
|
|
45
|
+
const segmentInputs = new Map();
|
|
46
|
+
// Add input files and create segment filters
|
|
47
|
+
for (const segment of timeline.segments) {
|
|
48
|
+
let audioPath;
|
|
49
|
+
let useEnhanced = false;
|
|
50
|
+
// Decide whether to use enhanced or original audio
|
|
51
|
+
if (downloadedPaths.has(segment.id) &&
|
|
52
|
+
segment.status === "success" &&
|
|
53
|
+
segment.qualityScore >= qualityThreshold) {
|
|
54
|
+
audioPath = downloadedPaths.get(segment.id);
|
|
55
|
+
useEnhanced = true;
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// Fallback to original audio
|
|
59
|
+
audioPath = resolve(audioDir, `${segment.id}.wav`);
|
|
60
|
+
if (!existsSync(audioPath)) {
|
|
61
|
+
// Try alternate naming patterns
|
|
62
|
+
const altPath = resolve(audioDir, `${segment.id.split('_')[0]}.wav`);
|
|
63
|
+
if (existsSync(altPath)) {
|
|
64
|
+
audioPath = altPath;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.warn(`⚠️ Original audio not found for ${segment.id}, skipping`);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
inputFiles.push(audioPath);
|
|
73
|
+
segmentInputs.set(segment.id, inputIndex);
|
|
74
|
+
// Apply time stretching if enhanced duration differs significantly from target
|
|
75
|
+
const targetDuration = segment.endTime - segment.startTime;
|
|
76
|
+
const actualDuration = useEnhanced ? segment.enhancedDuration : segment.originalDuration;
|
|
77
|
+
const driftMs = Math.abs((actualDuration - targetDuration) * 1000);
|
|
78
|
+
if (driftMs > timeline.assemblyInstructions.toleranceMs) {
|
|
79
|
+
// Time-stretch to match original timing
|
|
80
|
+
const stretchRatio = targetDuration / actualDuration;
|
|
81
|
+
filters.push(`[${inputIndex}:0]atempo=${stretchRatio.toFixed(6)}[seg${inputIndex}]`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
filters.push(`[${inputIndex}:0]anull[seg${inputIndex}]`);
|
|
85
|
+
}
|
|
86
|
+
inputIndex++;
|
|
87
|
+
}
|
|
88
|
+
// Generate silence for gaps
|
|
89
|
+
const silenceFilters = [];
|
|
90
|
+
for (let i = 0; i < timeline.silenceRegions.length; i++) {
|
|
91
|
+
const silence = timeline.silenceRegions[i];
|
|
92
|
+
const durationS = silence.endTime - silence.startTime;
|
|
93
|
+
silenceFilters.push(`aevalsrc=0:d=${durationS.toFixed(3)}[silence${i}]`);
|
|
94
|
+
}
|
|
95
|
+
// Combine all segments with precise timing
|
|
96
|
+
const mixInputs = [];
|
|
97
|
+
const delayFilters = [];
|
|
98
|
+
let segIndex = 0;
|
|
99
|
+
for (const segment of timeline.segments) {
|
|
100
|
+
if (segmentInputs.has(segment.id)) {
|
|
101
|
+
const delayMs = Math.round(segment.startTime * 1000);
|
|
102
|
+
delayFilters.push(`[seg${segmentInputs.get(segment.id)}]adelay=${delayMs}[delayed${segIndex}]`);
|
|
103
|
+
mixInputs.push(`[delayed${segIndex}]`);
|
|
104
|
+
segIndex++;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Add silence regions with delays
|
|
108
|
+
timeline.silenceRegions.forEach((silence, i) => {
|
|
109
|
+
const delayMs = Math.round(silence.startTime * 1000);
|
|
110
|
+
delayFilters.push(`[silence${i}]adelay=${delayMs}[delayedsilence${i}]`);
|
|
111
|
+
mixInputs.push(`[delayedsilence${i}]`);
|
|
112
|
+
});
|
|
113
|
+
// Final mix
|
|
114
|
+
const mixFilter = `${mixInputs.join('')}amix=inputs=${mixInputs.length}:duration=longest[out]`;
|
|
115
|
+
const allFilters = [
|
|
116
|
+
...silenceFilters,
|
|
117
|
+
...filters,
|
|
118
|
+
...delayFilters,
|
|
119
|
+
mixFilter
|
|
120
|
+
];
|
|
121
|
+
return {
|
|
122
|
+
filterComplex: allFilters.join(';'),
|
|
123
|
+
inputFiles
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Execute FFmpeg command to stitch audio timeline
|
|
128
|
+
*/
|
|
129
|
+
async function executeFFmpeg(filterComplex, inputFiles, outputPath, options) {
|
|
130
|
+
return new Promise((resolve) => {
|
|
131
|
+
const args = [
|
|
132
|
+
...inputFiles.flatMap(file => ['-i', file]),
|
|
133
|
+
'-filter_complex', filterComplex,
|
|
134
|
+
'-map', '[out]',
|
|
135
|
+
'-ar', String(options.sampleRate || 44100),
|
|
136
|
+
'-ac', String(options.channels || 2),
|
|
137
|
+
'-y', // Overwrite output
|
|
138
|
+
outputPath
|
|
139
|
+
];
|
|
140
|
+
console.log(`🔧 Running: ffmpeg ${args.join(' ')}`);
|
|
141
|
+
const ffmpeg = spawn('ffmpeg', args);
|
|
142
|
+
let stderr = '';
|
|
143
|
+
let duration = 0;
|
|
144
|
+
ffmpeg.stderr.on('data', (data) => {
|
|
145
|
+
const chunk = data.toString();
|
|
146
|
+
stderr += chunk;
|
|
147
|
+
// Extract duration from FFmpeg output
|
|
148
|
+
const durationMatch = chunk.match(/Duration: (\d+):(\d+):(\d+\.\d+)/);
|
|
149
|
+
if (durationMatch) {
|
|
150
|
+
const [, hours, minutes, seconds] = durationMatch;
|
|
151
|
+
duration = parseInt(hours) * 3600 + parseInt(minutes) * 60 + parseFloat(seconds);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
ffmpeg.on('close', (code) => {
|
|
155
|
+
if (code === 0) {
|
|
156
|
+
console.log(`✅ Audio stitching completed: ${outputPath}`);
|
|
157
|
+
resolve({ success: true, duration });
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
console.error(`❌ FFmpeg failed with code ${code}`);
|
|
161
|
+
resolve({ success: false, duration: 0, error: stderr });
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
ffmpeg.on('error', (error) => {
|
|
165
|
+
console.error(`❌ Failed to spawn FFmpeg:`, error);
|
|
166
|
+
resolve({ success: false, duration: 0, error: error.message });
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Calculate sync accuracy and quality metrics
|
|
172
|
+
*/
|
|
173
|
+
function calculateMetrics(timeline, downloadedPaths) {
|
|
174
|
+
const segmentsUsed = {
|
|
175
|
+
enhanced: 0,
|
|
176
|
+
original: 0,
|
|
177
|
+
failed: 0
|
|
178
|
+
};
|
|
179
|
+
let totalQuality = 0;
|
|
180
|
+
let maxDriftMs = 0;
|
|
181
|
+
let totalArtifacts = 0;
|
|
182
|
+
for (const segment of timeline.segments) {
|
|
183
|
+
if (downloadedPaths.has(segment.id) && segment.status === "success") {
|
|
184
|
+
segmentsUsed.enhanced++;
|
|
185
|
+
totalQuality += segment.qualityScore;
|
|
186
|
+
const driftMs = Math.abs((segment.enhancedDuration - segment.originalDuration) * 1000);
|
|
187
|
+
maxDriftMs = Math.max(maxDriftMs, driftMs);
|
|
188
|
+
}
|
|
189
|
+
else if (segment.status === "fallback") {
|
|
190
|
+
segmentsUsed.original++;
|
|
191
|
+
totalQuality += 0.7; // Assume original has decent quality
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
segmentsUsed.failed++;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
const totalSegments = segmentsUsed.enhanced + segmentsUsed.original + segmentsUsed.failed;
|
|
198
|
+
const avgQualityScore = totalSegments > 0 ? totalQuality / totalSegments : 0;
|
|
199
|
+
return {
|
|
200
|
+
segmentsUsed,
|
|
201
|
+
qualityMetrics: {
|
|
202
|
+
avgQualityScore,
|
|
203
|
+
maxDriftMs,
|
|
204
|
+
totalArtifacts
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Main audio stitching function
|
|
210
|
+
*/
|
|
211
|
+
export async function stitchEnhancedAudio(timeline, audioDir, options) {
|
|
212
|
+
console.log(`🧵 Starting audio stitching for job ${timeline.jobId}`);
|
|
213
|
+
console.log(`📊 ${timeline.segments.length} segments, ${timeline.totalDuration.toFixed(1)}s total`);
|
|
214
|
+
const errors = [];
|
|
215
|
+
try {
|
|
216
|
+
// Download enhanced audio files
|
|
217
|
+
const downloadedPaths = await downloadEnhancedAudio(timeline.segments, audioDir);
|
|
218
|
+
console.log(`📦 Downloaded ${downloadedPaths.size}/${timeline.segments.length} enhanced segments`);
|
|
219
|
+
// Generate FFmpeg filter for precise assembly
|
|
220
|
+
const { filterComplex, inputFiles } = generateFFmpegFilter(timeline, downloadedPaths, audioDir, options);
|
|
221
|
+
if (inputFiles.length === 0) {
|
|
222
|
+
throw new Error("No audio files available for stitching");
|
|
223
|
+
}
|
|
224
|
+
console.log(`🎛️ Using ${inputFiles.length} audio inputs`);
|
|
225
|
+
// Execute audio stitching
|
|
226
|
+
const stitchResult = await executeFFmpeg(filterComplex, inputFiles, options.outputPath, options);
|
|
227
|
+
if (!stitchResult.success) {
|
|
228
|
+
throw new Error(stitchResult.error || "FFmpeg execution failed");
|
|
229
|
+
}
|
|
230
|
+
// Calculate metrics
|
|
231
|
+
const metrics = calculateMetrics(timeline, downloadedPaths);
|
|
232
|
+
const syncAccuracy = 1.0 - (metrics.qualityMetrics.maxDriftMs / 1000); // Convert to 0-1 scale
|
|
233
|
+
console.log(`📈 Quality: ${metrics.qualityMetrics.avgQualityScore.toFixed(2)}, Sync: ${(syncAccuracy * 100).toFixed(1)}%`);
|
|
234
|
+
console.log(`🎵 Enhanced: ${metrics.segmentsUsed.enhanced}, Original: ${metrics.segmentsUsed.original}, Failed: ${metrics.segmentsUsed.failed}`);
|
|
235
|
+
return {
|
|
236
|
+
success: true,
|
|
237
|
+
outputPath: options.outputPath,
|
|
238
|
+
finalDuration: stitchResult.duration,
|
|
239
|
+
segmentsUsed: metrics.segmentsUsed,
|
|
240
|
+
syncAccuracy: Math.max(0, syncAccuracy),
|
|
241
|
+
qualityMetrics: metrics.qualityMetrics,
|
|
242
|
+
errors
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
247
|
+
console.error(`❌ Audio stitching failed:`, errorMsg);
|
|
248
|
+
errors.push(errorMsg);
|
|
249
|
+
return {
|
|
250
|
+
success: false,
|
|
251
|
+
outputPath: options.outputPath,
|
|
252
|
+
finalDuration: 0,
|
|
253
|
+
segmentsUsed: { enhanced: 0, original: 0, failed: timeline.segments.length },
|
|
254
|
+
syncAccuracy: 0,
|
|
255
|
+
qualityMetrics: { avgQualityScore: 0, maxDriftMs: 0, totalArtifacts: 0 },
|
|
256
|
+
errors
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=audio-stitching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-stitching.js","sourceRoot":"","sources":["../../src/lib/audio-stitching.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAqFA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"AAqFA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUvD;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK3D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAGjD;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAK7D"}
|
package/dist/lib/credentials.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/lib/credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demo Scanner
|
|
3
|
+
*
|
|
4
|
+
* Scans the local demofly/ directory to detect demos and their phases.
|
|
5
|
+
*/
|
|
6
|
+
export type DemoPhase = "initialized" | "proposed" | "scripted" | "ready" | "recorded" | "narrated";
|
|
7
|
+
export interface LocalDemo {
|
|
8
|
+
name: string;
|
|
9
|
+
phase: DemoPhase;
|
|
10
|
+
durationMs?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Scan the demofly/ directory for local demos.
|
|
14
|
+
* Returns an array of demos sorted alphabetically by name.
|
|
15
|
+
*/
|
|
16
|
+
export declare function scanLocalDemos(cwd: string): LocalDemo[];
|
|
17
|
+
//# sourceMappingURL=demo-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/demo-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,UAAU,GACV,UAAU,GACV,OAAO,GACP,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAyCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAmBvD"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demo Scanner
|
|
3
|
+
*
|
|
4
|
+
* Scans the local demofly/ directory to detect demos and their phases.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync, readdirSync } from "node:fs";
|
|
7
|
+
import { join } from "node:path";
|
|
8
|
+
function detectPhase(demoDir) {
|
|
9
|
+
// Check highest priority first
|
|
10
|
+
if (existsSync(join(demoDir, "transcript.md")))
|
|
11
|
+
return "narrated";
|
|
12
|
+
const recordingsDir = join(demoDir, "recordings");
|
|
13
|
+
if (existsSync(recordingsDir)) {
|
|
14
|
+
try {
|
|
15
|
+
const entries = readdirSync(recordingsDir);
|
|
16
|
+
const hasVideo = entries.some((f) => /\.(webm|mp4|mov)$/i.test(f));
|
|
17
|
+
if (hasVideo)
|
|
18
|
+
return "recorded";
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// ignore read errors
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
if (existsSync(join(demoDir, "demo.spec.ts")))
|
|
25
|
+
return "ready";
|
|
26
|
+
if (existsSync(join(demoDir, "script.md")))
|
|
27
|
+
return "scripted";
|
|
28
|
+
if (existsSync(join(demoDir, "proposal.md")))
|
|
29
|
+
return "proposed";
|
|
30
|
+
return "initialized";
|
|
31
|
+
}
|
|
32
|
+
function readDuration(demoDir) {
|
|
33
|
+
const timingPath = join(demoDir, "recordings", "timing.json");
|
|
34
|
+
if (!existsSync(timingPath))
|
|
35
|
+
return undefined;
|
|
36
|
+
try {
|
|
37
|
+
const raw = readFileSync(timingPath, "utf-8");
|
|
38
|
+
const data = JSON.parse(raw);
|
|
39
|
+
if (typeof data.totalDuration === "number") {
|
|
40
|
+
return data.totalDuration;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// ignore parse errors
|
|
45
|
+
}
|
|
46
|
+
return undefined;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Scan the demofly/ directory for local demos.
|
|
50
|
+
* Returns an array of demos sorted alphabetically by name.
|
|
51
|
+
*/
|
|
52
|
+
export function scanLocalDemos(cwd) {
|
|
53
|
+
const demoflyDir = join(cwd, "demofly");
|
|
54
|
+
if (!existsSync(demoflyDir))
|
|
55
|
+
return [];
|
|
56
|
+
const entries = readdirSync(demoflyDir, { withFileTypes: true });
|
|
57
|
+
const demos = [];
|
|
58
|
+
for (const entry of entries) {
|
|
59
|
+
if (!entry.isDirectory())
|
|
60
|
+
continue;
|
|
61
|
+
const demoDir = join(demoflyDir, entry.name);
|
|
62
|
+
demos.push({
|
|
63
|
+
name: entry.name,
|
|
64
|
+
phase: detectPhase(demoDir),
|
|
65
|
+
durationMs: readDuration(demoDir),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
return demos.sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=demo-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-scanner.js","sourceRoot":"","sources":["../../src/lib/demo-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhancement Client
|
|
3
|
+
*
|
|
4
|
+
* Shared SSE consumer and polling fallback for cloud TTS enhancement progress.
|
|
5
|
+
* Used by both `render` and `generate --cloud` commands.
|
|
6
|
+
*/
|
|
7
|
+
import type { ApiClient } from "./api-client.js";
|
|
8
|
+
import type { EnhancedTimeline } from "./audio-stitching.js";
|
|
9
|
+
export interface SSEJobResult {
|
|
10
|
+
status: "completed" | "partial" | "failed";
|
|
11
|
+
enhancedCount: number;
|
|
12
|
+
fallbackCount: number;
|
|
13
|
+
failedCount: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function consumeEnhancementSSE(apiClient: ApiClient, jobId: string, totalSegments: number): Promise<SSEJobResult>;
|
|
16
|
+
export declare function pollEnhancementStatus(apiClient: ApiClient, jobId: string, onProgress?: (progress: number, status: string) => void): Promise<EnhancedTimeline>;
|
|
17
|
+
//# sourceMappingURL=enhancement-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancement-client.d.ts","sourceRoot":"","sources":["../../src/lib/enhancement-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,YAAY,CAAC,CA8FvB;AAED,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,GACtD,OAAO,CAAC,gBAAgB,CAAC,CAmD3B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhancement Client
|
|
3
|
+
*
|
|
4
|
+
* Shared SSE consumer and polling fallback for cloud TTS enhancement progress.
|
|
5
|
+
* Used by both `render` and `generate --cloud` commands.
|
|
6
|
+
*/
|
|
7
|
+
export async function consumeEnhancementSSE(apiClient, jobId, totalSegments) {
|
|
8
|
+
const maxRetries = 3;
|
|
9
|
+
let lastEventId;
|
|
10
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
11
|
+
try {
|
|
12
|
+
const headers = {
|
|
13
|
+
Accept: "text/event-stream",
|
|
14
|
+
};
|
|
15
|
+
if (lastEventId) {
|
|
16
|
+
headers["Last-Event-ID"] = lastEventId;
|
|
17
|
+
}
|
|
18
|
+
const response = await apiClient.fetch(`/hybrid-rendering/events/${jobId}`, { headers });
|
|
19
|
+
if (!response.ok) {
|
|
20
|
+
throw new Error(`SSE connection failed: ${response.statusText}`);
|
|
21
|
+
}
|
|
22
|
+
const reader = response.body.getReader();
|
|
23
|
+
const decoder = new TextDecoder();
|
|
24
|
+
let buffer = "";
|
|
25
|
+
while (true) {
|
|
26
|
+
const { done, value } = await reader.read();
|
|
27
|
+
if (done)
|
|
28
|
+
break;
|
|
29
|
+
buffer += decoder.decode(value, { stream: true });
|
|
30
|
+
// Parse SSE frames (split on double newline)
|
|
31
|
+
const frames = buffer.split("\n\n");
|
|
32
|
+
buffer = frames.pop(); // Keep incomplete frame in buffer
|
|
33
|
+
for (const frame of frames) {
|
|
34
|
+
if (!frame.trim())
|
|
35
|
+
continue;
|
|
36
|
+
let eventType = "message";
|
|
37
|
+
let eventData = "";
|
|
38
|
+
let eventId;
|
|
39
|
+
for (const line of frame.split("\n")) {
|
|
40
|
+
if (line.startsWith("event: ")) {
|
|
41
|
+
eventType = line.slice(7);
|
|
42
|
+
}
|
|
43
|
+
else if (line.startsWith("data: ")) {
|
|
44
|
+
eventData = line.slice(6);
|
|
45
|
+
}
|
|
46
|
+
else if (line.startsWith("id: ")) {
|
|
47
|
+
eventId = line.slice(4);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (eventId) {
|
|
51
|
+
lastEventId = eventId;
|
|
52
|
+
}
|
|
53
|
+
const data = eventData ? JSON.parse(eventData) : {};
|
|
54
|
+
switch (eventType) {
|
|
55
|
+
case "segment.started":
|
|
56
|
+
console.log(` [${data.index + 1}/${totalSegments}] Enhancing: "${data.text}"${data.attempt > 1 ? ` (attempt ${data.attempt})` : ""}`);
|
|
57
|
+
break;
|
|
58
|
+
case "segment.completed":
|
|
59
|
+
console.log(` [${data.index + 1}/${totalSegments}] Done — quality: ${(data.qualityScore * 100).toFixed(0)}%, drift: ${(data.durationDrift * 1000).toFixed(0)}ms`);
|
|
60
|
+
break;
|
|
61
|
+
case "segment.failed":
|
|
62
|
+
if (data.willRetry) {
|
|
63
|
+
console.log(` [${data.index + 1}/${totalSegments}] Failed, retrying: ${data.error}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.log(` [${data.index + 1}/${totalSegments}] Using original audio: ${data.error}`);
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
case "progress":
|
|
70
|
+
console.log(` Progress: ${data.completed}/${data.total} segments (${(data.progress * 100).toFixed(0)}%)`);
|
|
71
|
+
break;
|
|
72
|
+
case "job.completed":
|
|
73
|
+
console.log(`Enhancement ${data.status}: ${data.enhancedCount} enhanced, ${data.fallbackCount} fallback, ${data.failedCount} failed`);
|
|
74
|
+
return data;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Stream ended without job.completed — server closed connection, retry
|
|
79
|
+
console.log(`SSE stream ended unexpectedly, reconnecting (attempt ${attempt + 2}/${maxRetries})...`);
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
if (attempt < maxRetries - 1) {
|
|
83
|
+
console.log(`SSE connection error, reconnecting (attempt ${attempt + 2}/${maxRetries})...`);
|
|
84
|
+
await new Promise(r => setTimeout(r, 1000 * (attempt + 1)));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
throw new Error("SSE connection failed after maximum retries");
|
|
92
|
+
}
|
|
93
|
+
export async function pollEnhancementStatus(apiClient, jobId, onProgress) {
|
|
94
|
+
const maxWaitMs = 10 * 60 * 1000; // 10 minutes
|
|
95
|
+
const pollIntervalMs = 2000; // 2 seconds
|
|
96
|
+
const startTime = Date.now();
|
|
97
|
+
while (Date.now() - startTime < maxWaitMs) {
|
|
98
|
+
try {
|
|
99
|
+
const response = await apiClient.fetch(`/hybrid-rendering/status/${jobId}`);
|
|
100
|
+
const status = (await response.json());
|
|
101
|
+
if (!response.ok) {
|
|
102
|
+
throw new Error(`API error: ${status.error || response.statusText}`);
|
|
103
|
+
}
|
|
104
|
+
console.log(`Enhancement progress: ${(status.progress * 100).toFixed(1)}% (${status.status})`);
|
|
105
|
+
if (onProgress) {
|
|
106
|
+
onProgress(status.progress, status.status);
|
|
107
|
+
}
|
|
108
|
+
if (status.status === "completed" || status.status === "partial") {
|
|
109
|
+
const timelineResponse = await apiClient.fetch(`/hybrid-rendering/timeline/${jobId}`);
|
|
110
|
+
const timeline = (await timelineResponse.json());
|
|
111
|
+
if (!timelineResponse.ok) {
|
|
112
|
+
throw new Error(`Failed to get timeline: ${timelineResponse.statusText}`);
|
|
113
|
+
}
|
|
114
|
+
console.log(`Enhancement completed: ${status.enhancedSegments.length} segments enhanced`);
|
|
115
|
+
return timeline;
|
|
116
|
+
}
|
|
117
|
+
if (status.status === "failed") {
|
|
118
|
+
throw new Error(`Enhancement failed: ${status.qualityMetrics?.avgQualityScore || 'Unknown error'}`);
|
|
119
|
+
}
|
|
120
|
+
await new Promise(resolve => setTimeout(resolve, pollIntervalMs));
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
console.error(`Error polling enhancement status:`, error);
|
|
124
|
+
throw error;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
throw new Error(`Enhancement timeout after ${maxWaitMs / 1000}s`);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=enhancement-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enhancement-client.js","sourceRoot":"","sources":["../../src/lib/enhancement-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hybrid Rendering Pipeline - CLI Side
|
|
3
|
+
*
|
|
4
|
+
* Handles local audio generation with timing metadata extraction,
|
|
5
|
+
* then optionally sends to cloud for enhancement while preserving sync.
|
|
6
|
+
*/
|
|
7
|
+
import { type TtsOptions } from "./tts.js";
|
|
8
|
+
/** Enhanced timing metadata for hybrid rendering */
|
|
9
|
+
export interface AudioTimingMetadata {
|
|
10
|
+
version: "1.0";
|
|
11
|
+
totalDuration: number;
|
|
12
|
+
segments: AudioSegment[];
|
|
13
|
+
silenceRegions: SilenceRegion[];
|
|
14
|
+
}
|
|
15
|
+
export interface AudioSegment {
|
|
16
|
+
id: string;
|
|
17
|
+
startTime: number;
|
|
18
|
+
endTime: number;
|
|
19
|
+
text: string;
|
|
20
|
+
type: "speech" | "silence";
|
|
21
|
+
naturalBoundaries: {
|
|
22
|
+
sentenceStart: boolean;
|
|
23
|
+
sentenceEnd: boolean;
|
|
24
|
+
pauseAfter: number;
|
|
25
|
+
};
|
|
26
|
+
audioPath?: string;
|
|
27
|
+
duration?: number;
|
|
28
|
+
}
|
|
29
|
+
export interface SilenceRegion {
|
|
30
|
+
startTime: number;
|
|
31
|
+
endTime: number;
|
|
32
|
+
type: "natural_pause" | "scene_transition" | "breathing";
|
|
33
|
+
}
|
|
34
|
+
/** Segment speech text at natural boundaries */
|
|
35
|
+
export declare function segmentSpeech(text: string): Array<{
|
|
36
|
+
text: string;
|
|
37
|
+
boundaryInfo: any;
|
|
38
|
+
}>;
|
|
39
|
+
/** Generate local audio with enhanced timing metadata */
|
|
40
|
+
export declare function generateLocalRender(transcriptPath: string, timingPath: string, projectDir: string, options?: TtsOptions): AudioTimingMetadata;
|
|
41
|
+
/** Prepare upload payload for cloud enhancement */
|
|
42
|
+
export interface CloudEnhancementPayload {
|
|
43
|
+
projectId: string;
|
|
44
|
+
metadata: AudioTimingMetadata;
|
|
45
|
+
preferences: {
|
|
46
|
+
voice?: string;
|
|
47
|
+
speed?: number;
|
|
48
|
+
enhancementLevel?: "standard" | "premium";
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export declare function prepareCloudEnhancement(projectId: string, metadata: AudioTimingMetadata, options?: TtsOptions): CloudEnhancementPayload;
|
|
52
|
+
//# sourceMappingURL=hybrid-rendering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-rendering.d.ts","sourceRoot":"","sources":["../../src/lib/hybrid-rendering.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3E,oDAAoD;AACpD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,cAAc,EAAE,aAAa,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,iBAAiB,EAAE;QACjB,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,eAAe,GAAG,kBAAkB,GAAG,WAAW,CAAC;CAC1D;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,GAAG,CAAA;CAAE,CAAC,CAqEtF;AAED,yDAAyD;AACzD,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,UAAe,GACvB,mBAAmB,CAyFrB;AAED,mDAAmD;AACnD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,gBAAgB,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;KAC3C,CAAC;CACH;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,GAAE,UAAe,GACvB,uBAAuB,CAUzB"}
|