demofly 0.1.2
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/index.d.ts +3 -0
- package/dist/commands/auth/index.d.ts.map +1 -0
- package/dist/commands/auth/index.js +13 -0
- package/dist/commands/auth/index.js.map +1 -0
- package/dist/commands/auth/login.d.ts +3 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +109 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +3 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +21 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/auth/status.d.ts +3 -0
- package/dist/commands/auth/status.d.ts.map +1 -0
- package/dist/commands/auth/status.js +25 -0
- package/dist/commands/auth/status.js.map +1 -0
- package/dist/commands/generate.d.ts +3 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +373 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +384 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/projects/delete.d.ts +3 -0
- package/dist/commands/projects/delete.d.ts.map +1 -0
- package/dist/commands/projects/delete.js +41 -0
- package/dist/commands/projects/delete.js.map +1 -0
- package/dist/commands/projects/get.d.ts +3 -0
- package/dist/commands/projects/get.d.ts.map +1 -0
- package/dist/commands/projects/get.js +30 -0
- package/dist/commands/projects/get.js.map +1 -0
- package/dist/commands/projects/index.d.ts +3 -0
- package/dist/commands/projects/index.d.ts.map +1 -0
- package/dist/commands/projects/index.js +17 -0
- package/dist/commands/projects/index.js.map +1 -0
- package/dist/commands/projects/list.d.ts +3 -0
- package/dist/commands/projects/list.d.ts.map +1 -0
- package/dist/commands/projects/list.js +40 -0
- package/dist/commands/projects/list.js.map +1 -0
- package/dist/commands/projects/open.d.ts +3 -0
- package/dist/commands/projects/open.d.ts.map +1 -0
- package/dist/commands/projects/open.js +45 -0
- package/dist/commands/projects/open.js.map +1 -0
- package/dist/commands/projects/update.d.ts +3 -0
- package/dist/commands/projects/update.d.ts.map +1 -0
- package/dist/commands/projects/update.js +31 -0
- package/dist/commands/projects/update.js.map +1 -0
- package/dist/commands/push.d.ts +3 -0
- package/dist/commands/push.d.ts.map +1 -0
- package/dist/commands/push.js +86 -0
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/tts.d.ts +3 -0
- package/dist/commands/tts.d.ts.map +1 -0
- package/dist/commands/tts.js +44 -0
- package/dist/commands/tts.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-client.d.ts +13 -0
- package/dist/lib/api-client.d.ts.map +1 -0
- package/dist/lib/api-client.js +58 -0
- package/dist/lib/api-client.js.map +1 -0
- package/dist/lib/credentials.d.ts +5 -0
- package/dist/lib/credentials.d.ts.map +1 -0
- package/dist/lib/credentials.js +101 -0
- package/dist/lib/credentials.js.map +1 -0
- package/dist/lib/timing.d.ts +29 -0
- package/dist/lib/timing.d.ts.map +1 -0
- package/dist/lib/timing.js +145 -0
- package/dist/lib/timing.js.map +1 -0
- package/dist/lib/tts.d.ts +42 -0
- package/dist/lib/tts.d.ts.map +1 -0
- package/dist/lib/tts.js +198 -0
- package/dist/lib/tts.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demofly TTS integration — Kokoro via sherpa-onnx-node native bindings.
|
|
3
|
+
*
|
|
4
|
+
* Parses transcript.md, generates per-scene WAV files using OfflineTts,
|
|
5
|
+
* outputs to <projectDir>/audio/<sceneId>.wav.
|
|
6
|
+
*/
|
|
7
|
+
export interface TtsOptions {
|
|
8
|
+
voice?: string;
|
|
9
|
+
speed?: number;
|
|
10
|
+
lang?: string;
|
|
11
|
+
modelDir?: string;
|
|
12
|
+
}
|
|
13
|
+
export interface TtsResult {
|
|
14
|
+
sceneId: string;
|
|
15
|
+
filePath: string;
|
|
16
|
+
durationS: number;
|
|
17
|
+
peakMemoryMb: number;
|
|
18
|
+
elapsedS: number;
|
|
19
|
+
}
|
|
20
|
+
export interface TranscriptScene {
|
|
21
|
+
sceneId: string;
|
|
22
|
+
text: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Parse a transcript.md file into per-scene narration text.
|
|
26
|
+
* Extracts plain text from beats, stripping directives like [warmly], [pause: 0.3s],
|
|
27
|
+
* _(silent portion)_ notes, and markdown headers.
|
|
28
|
+
*
|
|
29
|
+
* Scene IDs default to "scene-N" (matching timing.json convention).
|
|
30
|
+
* Override with explicit ID in header: ## Scene 1: Title {#my-custom-id}
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseTranscript(content: string): TranscriptScene[];
|
|
33
|
+
/**
|
|
34
|
+
* Generate TTS audio for a single piece of text.
|
|
35
|
+
*/
|
|
36
|
+
export declare function generateAudio(text: string, outputPath: string, options?: TtsOptions, ttsInstance?: any): TtsResult;
|
|
37
|
+
/**
|
|
38
|
+
* Generate TTS for all scenes in a transcript.
|
|
39
|
+
* Returns array of results and writes WAV files to <projectDir>/audio/.
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateAllAudio(transcriptPath: string, projectDir: string, options?: TtsOptions): TtsResult[];
|
|
42
|
+
//# sourceMappingURL=tts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts.d.ts","sourceRoot":"","sources":["../../src/lib/tts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkCH,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,CA2DlE;AA0DD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,UAAe,EACxB,WAAW,CAAC,EAAE,GAAG,GAChB,SAAS,CAsBX;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,UAAe,GACvB,SAAS,EAAE,CAmCb"}
|
package/dist/lib/tts.js
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Demofly TTS integration — Kokoro via sherpa-onnx-node native bindings.
|
|
3
|
+
*
|
|
4
|
+
* Parses transcript.md, generates per-scene WAV files using OfflineTts,
|
|
5
|
+
* outputs to <projectDir>/audio/<sceneId>.wav.
|
|
6
|
+
*/
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
import { existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
9
|
+
import { resolve } from "node:path";
|
|
10
|
+
import { homedir } from "node:os";
|
|
11
|
+
const require = createRequire(import.meta.url);
|
|
12
|
+
// Lazy-loaded to avoid native module errors when only parseTranscript is needed
|
|
13
|
+
let _sherpa_onnx;
|
|
14
|
+
function getSherpaOnnx() {
|
|
15
|
+
if (!_sherpa_onnx) {
|
|
16
|
+
_sherpa_onnx = require("sherpa-onnx-node");
|
|
17
|
+
}
|
|
18
|
+
return _sherpa_onnx;
|
|
19
|
+
}
|
|
20
|
+
/** Default model directory */
|
|
21
|
+
const DEFAULT_MODEL_DIR = resolve(homedir(), ".demofly", "models", "kokoro-en-v0_19");
|
|
22
|
+
/** Voice name to speaker ID mapping */
|
|
23
|
+
const VOICE_MAP = {
|
|
24
|
+
af_heart: 3,
|
|
25
|
+
af_bella: 2,
|
|
26
|
+
af_nicole: 6,
|
|
27
|
+
af_nova: 7,
|
|
28
|
+
af_sarah: 9,
|
|
29
|
+
am_adam: 11,
|
|
30
|
+
am_michael: 16,
|
|
31
|
+
};
|
|
32
|
+
const DEFAULT_VOICE = "af_heart";
|
|
33
|
+
/**
|
|
34
|
+
* Parse a transcript.md file into per-scene narration text.
|
|
35
|
+
* Extracts plain text from beats, stripping directives like [warmly], [pause: 0.3s],
|
|
36
|
+
* _(silent portion)_ notes, and markdown headers.
|
|
37
|
+
*
|
|
38
|
+
* Scene IDs default to "scene-N" (matching timing.json convention).
|
|
39
|
+
* Override with explicit ID in header: ## Scene 1: Title {#my-custom-id}
|
|
40
|
+
*/
|
|
41
|
+
export function parseTranscript(content) {
|
|
42
|
+
const scenes = [];
|
|
43
|
+
let currentScene = null;
|
|
44
|
+
let sceneIndex = 0;
|
|
45
|
+
for (const line of content.split("\n")) {
|
|
46
|
+
// Scene header: ## Scene 1: Create First Note or ## Scene 1: Title {#custom-id}
|
|
47
|
+
const sceneMatch = line.match(/^## Scene (\d+):\s*(.+)/);
|
|
48
|
+
if (sceneMatch) {
|
|
49
|
+
if (currentScene && currentScene.lines.length > 0) {
|
|
50
|
+
scenes.push({
|
|
51
|
+
sceneId: currentScene.id,
|
|
52
|
+
text: currentScene.lines.join(" ").trim(),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
sceneIndex++;
|
|
56
|
+
const title = sceneMatch[2].trim();
|
|
57
|
+
// Check for explicit ID override: {#my-id}
|
|
58
|
+
const idOverride = title.match(/\{#([^}]+)\}/);
|
|
59
|
+
const id = idOverride ? idOverride[1] : `scene-${sceneIndex}`;
|
|
60
|
+
currentScene = { id, lines: [] };
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// Skip headers, beat headers, empty lines, silent portion notes
|
|
64
|
+
if (line.startsWith("#") || line.startsWith("### Beat") || line.trim() === "")
|
|
65
|
+
continue;
|
|
66
|
+
if (line.match(/^_\(.*silent.*\)_/i))
|
|
67
|
+
continue;
|
|
68
|
+
if (line.startsWith("Generated from") || line.startsWith("---"))
|
|
69
|
+
continue;
|
|
70
|
+
if (line.match(/^\*\*[^*]+\*\*\s*:/))
|
|
71
|
+
continue;
|
|
72
|
+
// Strip directives: [warmly], [casual], [pause: 0.3s], [confidently], [impressed], etc.
|
|
73
|
+
let cleaned = line.replace(/\[(?:warmly|casual|confidently|impressed|pause:\s*[\d.]+s?)\]\s*/gi, "");
|
|
74
|
+
cleaned = cleaned.replace(/\[.*?\]\s*/g, ""); // catch any remaining bracketed directives
|
|
75
|
+
// Strip SSML-like tags
|
|
76
|
+
cleaned = cleaned.replace(/<[^>]+\/?>/g, "");
|
|
77
|
+
// Strip inline markdown bold and italic
|
|
78
|
+
cleaned = cleaned.replace(/\*\*([^*]+)\*\*/g, "$1");
|
|
79
|
+
cleaned = cleaned.replace(/(?<!\w)_([^_]+)_(?!\w)/g, "$1");
|
|
80
|
+
// Collapse multiple spaces into one
|
|
81
|
+
cleaned = cleaned.replace(/\s{2,}/g, " ");
|
|
82
|
+
cleaned = cleaned.trim();
|
|
83
|
+
if (cleaned && currentScene) {
|
|
84
|
+
currentScene.lines.push(cleaned);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Push last scene
|
|
88
|
+
if (currentScene && currentScene.lines.length > 0) {
|
|
89
|
+
scenes.push({
|
|
90
|
+
sceneId: currentScene.id,
|
|
91
|
+
text: currentScene.lines.join(" ").trim(),
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return scenes;
|
|
95
|
+
}
|
|
96
|
+
/** Resolve the model directory, checking that required files exist. */
|
|
97
|
+
function resolveModelDir(options) {
|
|
98
|
+
const modelDir = options.modelDir ?? process.env.DEMOFLY_TTS_MODEL_DIR ?? DEFAULT_MODEL_DIR;
|
|
99
|
+
const requiredFiles = ["model.onnx", "voices.bin", "tokens.txt"];
|
|
100
|
+
for (const file of requiredFiles) {
|
|
101
|
+
if (!existsSync(resolve(modelDir, file))) {
|
|
102
|
+
throw new Error(`Kokoro TTS model file missing: ${resolve(modelDir, file)}\n` +
|
|
103
|
+
`Run 'demofly init' to download the model, or set DEMOFLY_TTS_MODEL_DIR.`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const dataDirPath = resolve(modelDir, "espeak-ng-data");
|
|
107
|
+
if (!existsSync(dataDirPath)) {
|
|
108
|
+
throw new Error(`Kokoro TTS data directory missing: ${dataDirPath}\n` +
|
|
109
|
+
`Run 'demofly init' to download the model, or set DEMOFLY_TTS_MODEL_DIR.`);
|
|
110
|
+
}
|
|
111
|
+
return modelDir;
|
|
112
|
+
}
|
|
113
|
+
/** Resolve voice name to speaker ID. */
|
|
114
|
+
function resolveVoiceSid(voice) {
|
|
115
|
+
if (!voice)
|
|
116
|
+
return VOICE_MAP[DEFAULT_VOICE];
|
|
117
|
+
const sid = VOICE_MAP[voice];
|
|
118
|
+
if (sid === undefined) {
|
|
119
|
+
const available = Object.keys(VOICE_MAP).join(", ");
|
|
120
|
+
throw new Error(`Unknown voice '${voice}'. Available: ${available}`);
|
|
121
|
+
}
|
|
122
|
+
return sid;
|
|
123
|
+
}
|
|
124
|
+
/** Create an OfflineTts instance for the given model directory. */
|
|
125
|
+
function createTtsInstance(modelDir) {
|
|
126
|
+
const sherpa = getSherpaOnnx();
|
|
127
|
+
const config = {
|
|
128
|
+
model: {
|
|
129
|
+
kokoro: {
|
|
130
|
+
model: resolve(modelDir, "model.onnx"),
|
|
131
|
+
voices: resolve(modelDir, "voices.bin"),
|
|
132
|
+
tokens: resolve(modelDir, "tokens.txt"),
|
|
133
|
+
dataDir: resolve(modelDir, "espeak-ng-data"),
|
|
134
|
+
},
|
|
135
|
+
debug: false,
|
|
136
|
+
numThreads: 2,
|
|
137
|
+
provider: "cpu",
|
|
138
|
+
},
|
|
139
|
+
maxNumSentences: 1,
|
|
140
|
+
};
|
|
141
|
+
return new sherpa.OfflineTts(config);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generate TTS audio for a single piece of text.
|
|
145
|
+
*/
|
|
146
|
+
export function generateAudio(text, outputPath, options = {}, ttsInstance) {
|
|
147
|
+
const modelDir = resolveModelDir(options);
|
|
148
|
+
const sid = resolveVoiceSid(options.voice);
|
|
149
|
+
const speed = options.speed ?? 1.0;
|
|
150
|
+
const tts = ttsInstance ?? createTtsInstance(modelDir);
|
|
151
|
+
const start = performance.now();
|
|
152
|
+
const audio = tts.generate({ text, sid, speed });
|
|
153
|
+
const elapsedS = (performance.now() - start) / 1000;
|
|
154
|
+
getSherpaOnnx().writeWave(outputPath, { samples: audio.samples, sampleRate: audio.sampleRate });
|
|
155
|
+
const durationS = audio.samples.length / audio.sampleRate;
|
|
156
|
+
return {
|
|
157
|
+
sceneId: "",
|
|
158
|
+
filePath: outputPath,
|
|
159
|
+
durationS,
|
|
160
|
+
peakMemoryMb: 0,
|
|
161
|
+
elapsedS,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Generate TTS for all scenes in a transcript.
|
|
166
|
+
* Returns array of results and writes WAV files to <projectDir>/audio/.
|
|
167
|
+
*/
|
|
168
|
+
export function generateAllAudio(transcriptPath, projectDir, options = {}) {
|
|
169
|
+
const content = readFileSync(transcriptPath, "utf-8");
|
|
170
|
+
const scenes = parseTranscript(content);
|
|
171
|
+
if (scenes.length === 0) {
|
|
172
|
+
console.warn("No narration text found in transcript.");
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
const audioDir = resolve(projectDir, "audio");
|
|
176
|
+
if (!existsSync(audioDir)) {
|
|
177
|
+
mkdirSync(audioDir, { recursive: true });
|
|
178
|
+
}
|
|
179
|
+
// Create a single OfflineTts instance and reuse for all scenes
|
|
180
|
+
const modelDir = resolveModelDir(options);
|
|
181
|
+
const tts = createTtsInstance(modelDir);
|
|
182
|
+
const results = [];
|
|
183
|
+
for (const scene of scenes) {
|
|
184
|
+
const outputPath = resolve(audioDir, `${scene.sceneId}.wav`);
|
|
185
|
+
console.log(` TTS: ${scene.sceneId} (${scene.text.length} chars)`);
|
|
186
|
+
try {
|
|
187
|
+
const result = generateAudio(scene.text, outputPath, options, tts);
|
|
188
|
+
result.sceneId = scene.sceneId;
|
|
189
|
+
results.push(result);
|
|
190
|
+
console.log(` → ${result.durationS.toFixed(1)}s audio, ${result.elapsedS.toFixed(1)}s elapsed`);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error(` ✗ TTS failed for ${scene.sceneId}:`, error);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return results;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=tts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts.js","sourceRoot":"","sources":["../../src/lib/tts.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "demofly",
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "CLI for demofly — automated demo video generation",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"demofly": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"dev": "tsc --watch",
|
|
19
|
+
"clean": "rm -rf dist",
|
|
20
|
+
"prepublishOnly": "npm run build",
|
|
21
|
+
"release": "release-it",
|
|
22
|
+
"test": "vitest run",
|
|
23
|
+
"test:watch": "vitest"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"commander": "^13.0.0",
|
|
27
|
+
"sherpa-onnx-node": "^1.12.25"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@release-it/conventional-changelog": "^10.0.0",
|
|
31
|
+
"@types/node": "^22.0.0",
|
|
32
|
+
"release-it": "^19.0.0",
|
|
33
|
+
"typescript": "^5.7.0",
|
|
34
|
+
"vitest": "^4.0.18"
|
|
35
|
+
},
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=22.0.0"
|
|
38
|
+
}
|
|
39
|
+
}
|