@jcode.labs/mimir-tts 0.4.0 → 0.4.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/LICENSE +1 -1
- package/README.md +28 -8
- package/dist/cli.js +37 -2
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +25 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +125 -5
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/LICENSE
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2026 Jean-Baptiste Thery
|
|
3
|
+
Copyright (c) 2026 Jean-Baptiste Thery and JCode Labs
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
package/README.md
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
# Mimir TTS
|
|
2
2
|
|
|
3
|
-
Plug-and-play
|
|
3
|
+
Plug-and-play text-to-speech for Mimir audio summaries.
|
|
4
4
|
|
|
5
|
-
`@jcode.labs/mimir-tts`
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
`@jcode.labs/mimir-tts` has two explicit paths:
|
|
6
|
+
|
|
7
|
+
- Transformers.js WAV for confidential or air-gapped use. This is the default path and does not
|
|
8
|
+
require Python, ffmpeg, Piper, XTTS, or a local server.
|
|
9
|
+
- Edge MP3 for the same quality path as the global Voice Forge skill. It uses the external
|
|
10
|
+
`edge-tts` CLI, `fr-FR-DeniseNeural`, and `+0%` rate, and must be requested explicitly.
|
|
11
|
+
|
|
12
|
+
The Edge path sends the narration text to the online Edge TTS service. Use the Transformers.js path
|
|
13
|
+
for private content.
|
|
8
14
|
|
|
9
15
|
## Install
|
|
10
16
|
|
|
@@ -12,16 +18,29 @@ from Hugging Face into `.mimir/models/tts`; the source text is processed locally
|
|
|
12
18
|
pnpm add -D @jcode.labs/mimir-tts
|
|
13
19
|
```
|
|
14
20
|
|
|
21
|
+
Install Edge TTS only when you want the highest-quality online MP3 renderer:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
pipx install edge-tts
|
|
25
|
+
```
|
|
26
|
+
|
|
15
27
|
## Render
|
|
16
28
|
|
|
29
|
+
High-quality MP3:
|
|
30
|
+
|
|
17
31
|
```bash
|
|
18
|
-
pnpm exec mimir-tts render /tmp/MIMIR-SUMMARY-tax.txt
|
|
32
|
+
pnpm exec mimir-tts render /tmp/MIMIR-SUMMARY-tax.txt \
|
|
33
|
+
--engine edge \
|
|
34
|
+
--out .mimir/audio/tax-summary.mp3
|
|
19
35
|
```
|
|
20
36
|
|
|
21
|
-
|
|
37
|
+
Offline/confidential WAV:
|
|
22
38
|
|
|
23
39
|
```bash
|
|
24
|
-
pnpm exec mimir-tts render summary.txt
|
|
40
|
+
pnpm exec mimir-tts render summary.txt \
|
|
41
|
+
--offline \
|
|
42
|
+
--model-path .mimir/models/tts \
|
|
43
|
+
--out .mimir/audio/summary.wav
|
|
25
44
|
```
|
|
26
45
|
|
|
27
46
|
## Doctor
|
|
@@ -30,4 +49,5 @@ pnpm exec mimir-tts render summary.txt --offline --model-path .mimir/models/tts
|
|
|
30
49
|
pnpm exec mimir-tts doctor --json
|
|
31
50
|
```
|
|
32
51
|
|
|
33
|
-
The default
|
|
52
|
+
The default engine is `transformers`. The default Transformers.js model is `Xenova/mms-tts-fra`.
|
|
53
|
+
Override it with `--model` or `MIMIR_TTS_MODEL`.
|
package/dist/cli.js
CHANGED
|
@@ -31,8 +31,11 @@ async function runDoctor(args) {
|
|
|
31
31
|
return;
|
|
32
32
|
}
|
|
33
33
|
printKeyValue("node", report.node);
|
|
34
|
+
printKeyValue("defaultEngine", report.defaultEngine);
|
|
34
35
|
printKeyValue("defaultModel", report.defaultModel);
|
|
35
36
|
printKeyValue("defaultModelPath", report.defaultModelPath);
|
|
37
|
+
printKeyValue("edgeTtsAvailable", String(report.edgeTtsAvailable));
|
|
38
|
+
printKeyValue("edgeDefaultVoice", report.edgeDefaultVoice);
|
|
36
39
|
printKeyValue("transformersAvailable", String(report.transformersAvailable));
|
|
37
40
|
printKeyValue("pythonRequired", String(report.pythonRequired));
|
|
38
41
|
printKeyValue("ffmpegRequired", String(report.ffmpegRequired));
|
|
@@ -44,10 +47,13 @@ async function runRender(args) {
|
|
|
44
47
|
allowPositionals: true,
|
|
45
48
|
options: {
|
|
46
49
|
out: { type: "string", short: "o" },
|
|
50
|
+
engine: { type: "string" },
|
|
47
51
|
model: { type: "string" },
|
|
48
52
|
"model-path": { type: "string" },
|
|
49
53
|
offline: { type: "boolean" },
|
|
50
54
|
"allow-remote-models": { type: "boolean" },
|
|
55
|
+
voice: { type: "string" },
|
|
56
|
+
rate: { type: "string" },
|
|
51
57
|
"speaker-embeddings": { type: "string" },
|
|
52
58
|
speed: { type: "string" },
|
|
53
59
|
json: { type: "boolean" },
|
|
@@ -61,9 +67,12 @@ async function runRender(args) {
|
|
|
61
67
|
textFile,
|
|
62
68
|
};
|
|
63
69
|
addStringOption(renderOptions, "outputPath", stringValue(values, "out"));
|
|
70
|
+
addEngineOption(renderOptions, engineValue(values));
|
|
64
71
|
addStringOption(renderOptions, "model", stringValue(values, "model"));
|
|
65
72
|
addStringOption(renderOptions, "modelPath", stringValue(values, "model-path"));
|
|
66
73
|
addBooleanOption(renderOptions, "allowRemoteModels", allowRemoteModels(values));
|
|
74
|
+
addStringOption(renderOptions, "voice", stringValue(values, "voice"));
|
|
75
|
+
addStringOption(renderOptions, "rate", stringValue(values, "rate"));
|
|
67
76
|
addStringOption(renderOptions, "speakerEmbeddings", stringValue(values, "speaker-embeddings"));
|
|
68
77
|
addNumberOption(renderOptions, "speed", numberValue(values, "speed"));
|
|
69
78
|
const result = await renderSpeech(renderOptions);
|
|
@@ -72,9 +81,13 @@ async function runRender(args) {
|
|
|
72
81
|
return;
|
|
73
82
|
}
|
|
74
83
|
printKeyValue("outputPath", result.outputPath);
|
|
84
|
+
printKeyValue("engine", result.engine);
|
|
85
|
+
printKeyValue("outputFormat", result.outputFormat);
|
|
75
86
|
printKeyValue("model", result.model);
|
|
76
87
|
printKeyValue("modelPath", result.modelPath);
|
|
77
88
|
printKeyValue("allowRemoteModels", String(result.allowRemoteModels));
|
|
89
|
+
printKeyValue("voice", result.voice ?? "none");
|
|
90
|
+
printKeyValue("rate", result.rate ?? "none");
|
|
78
91
|
printKeyValue("samplingRate", String(result.samplingRate ?? "unknown"));
|
|
79
92
|
printKeyValue("samples", String(result.samples ?? "unknown"));
|
|
80
93
|
}
|
|
@@ -91,6 +104,24 @@ function stringValue(values, key) {
|
|
|
91
104
|
const value = values[key];
|
|
92
105
|
return typeof value === "string" ? value : undefined;
|
|
93
106
|
}
|
|
107
|
+
function engineValue(values) {
|
|
108
|
+
if (values.offline === true) {
|
|
109
|
+
return "transformers";
|
|
110
|
+
}
|
|
111
|
+
const value = stringValue(values, "engine");
|
|
112
|
+
if (value === undefined) {
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
if (value === "auto" || value === "edge" || value === "transformers") {
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
throw new Error("Expected --engine to be auto, edge, or transformers.");
|
|
119
|
+
}
|
|
120
|
+
function addEngineOption(target, value) {
|
|
121
|
+
if (value !== undefined) {
|
|
122
|
+
target.engine = value;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
94
125
|
function addStringOption(target, key, value) {
|
|
95
126
|
if (value !== undefined) {
|
|
96
127
|
target[key] = value;
|
|
@@ -125,13 +156,17 @@ function printHelp() {
|
|
|
125
156
|
|
|
126
157
|
Usage:
|
|
127
158
|
mimir-tts doctor [--json]
|
|
128
|
-
mimir-tts render <text-file> [--out output.wav]
|
|
159
|
+
mimir-tts render <text-file> [--out output.wav]
|
|
160
|
+
mimir-tts render <text-file> --engine edge --out output.mp3
|
|
129
161
|
|
|
130
162
|
Options:
|
|
163
|
+
--engine <engine> transformers, edge, or auto. Default is transformers.
|
|
131
164
|
--model <id> Transformers.js TTS model ID.
|
|
132
165
|
--model-path <path> Local model/cache path. Defaults to .mimir/models/tts.
|
|
133
|
-
--offline
|
|
166
|
+
--offline Force the Transformers.js local/offline WAV path.
|
|
134
167
|
--allow-remote-models Explicitly allow remote model downloads.
|
|
168
|
+
--voice <voice> Edge voice. Defaults to fr-FR-DeniseNeural.
|
|
169
|
+
--rate <rate> Edge rate. Defaults to +0%.
|
|
135
170
|
--speaker-embeddings <path> Optional model-specific speaker embedding path or URL.
|
|
136
171
|
--speed <number> Optional model-specific speech speed.
|
|
137
172
|
--json Print JSON output.
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,MAAM,EAA4B,YAAY,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
export declare const DEFAULT_TTS_MODEL = "Xenova/mms-tts-fra";
|
|
2
2
|
export declare const DEFAULT_TTS_MODEL_PATH = ".mimir/models/tts";
|
|
3
3
|
export declare const DEFAULT_AUDIO_DIR = ".mimir/audio";
|
|
4
|
+
export declare const DEFAULT_TTS_ENGINE = "transformers";
|
|
5
|
+
export declare const DEFAULT_EDGE_VOICE = "fr-FR-DeniseNeural";
|
|
6
|
+
export declare const DEFAULT_EDGE_RATE = "+0%";
|
|
7
|
+
export type TtsEngine = "auto" | "edge" | "transformers";
|
|
8
|
+
export type OutputFormat = "mp3" | "wav";
|
|
4
9
|
export interface TextToAudioOutputLike {
|
|
5
10
|
save(path: string): Promise<void>;
|
|
6
11
|
sampling_rate?: number;
|
|
@@ -16,29 +21,48 @@ export interface RenderSpeechOptions {
|
|
|
16
21
|
text?: string;
|
|
17
22
|
textFile?: string;
|
|
18
23
|
outputPath?: string;
|
|
24
|
+
engine?: TtsEngine;
|
|
19
25
|
model?: string;
|
|
20
26
|
modelPath?: string;
|
|
21
27
|
allowRemoteModels?: boolean;
|
|
28
|
+
voice?: string;
|
|
29
|
+
rate?: string;
|
|
22
30
|
speakerEmbeddings?: string;
|
|
23
31
|
speed?: number;
|
|
24
32
|
synthesizer?: TextToAudioSynthesizer;
|
|
33
|
+
edgeRenderer?: EdgeTtsRenderer;
|
|
34
|
+
edgeAvailable?: () => boolean;
|
|
25
35
|
}
|
|
26
36
|
export interface RenderSpeechResult {
|
|
27
37
|
outputPath: string;
|
|
38
|
+
engine: Exclude<TtsEngine, "auto">;
|
|
39
|
+
outputFormat: OutputFormat;
|
|
28
40
|
model: string;
|
|
29
41
|
modelPath: string;
|
|
30
42
|
allowRemoteModels: boolean;
|
|
43
|
+
voice: string | null;
|
|
44
|
+
rate: string | null;
|
|
31
45
|
samplingRate: number | null;
|
|
32
46
|
samples: number | null;
|
|
33
47
|
}
|
|
34
48
|
export interface DoctorReport {
|
|
35
49
|
node: string;
|
|
50
|
+
defaultEngine: TtsEngine;
|
|
36
51
|
defaultModel: string;
|
|
37
52
|
defaultModelPath: string;
|
|
38
53
|
transformersAvailable: boolean;
|
|
54
|
+
edgeTtsAvailable: boolean;
|
|
55
|
+
edgeDefaultVoice: string;
|
|
39
56
|
pythonRequired: false;
|
|
40
57
|
ffmpegRequired: false;
|
|
41
|
-
outputFormat: "wav";
|
|
58
|
+
outputFormat: "mp3-or-wav";
|
|
59
|
+
}
|
|
60
|
+
export type EdgeTtsRenderer = (options: EdgeTtsRenderOptions) => Promise<void>;
|
|
61
|
+
export interface EdgeTtsRenderOptions {
|
|
62
|
+
text: string;
|
|
63
|
+
outputPath: string;
|
|
64
|
+
voice: string;
|
|
65
|
+
rate: string;
|
|
42
66
|
}
|
|
43
67
|
export declare function renderSpeech(options: RenderSpeechOptions): Promise<RenderSpeechResult>;
|
|
44
68
|
export declare function doctor(): Promise<DoctorReport>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,59 @@
|
|
|
1
|
+
import { spawn, spawnSync } from "node:child_process";
|
|
1
2
|
import { existsSync } from "node:fs";
|
|
2
|
-
import { mkdir, readFile } from "node:fs/promises";
|
|
3
|
+
import { mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises";
|
|
4
|
+
import os from "node:os";
|
|
3
5
|
import path from "node:path";
|
|
4
6
|
export const DEFAULT_TTS_MODEL = "Xenova/mms-tts-fra";
|
|
5
7
|
export const DEFAULT_TTS_MODEL_PATH = ".mimir/models/tts";
|
|
6
8
|
export const DEFAULT_AUDIO_DIR = ".mimir/audio";
|
|
9
|
+
export const DEFAULT_TTS_ENGINE = "transformers";
|
|
10
|
+
export const DEFAULT_EDGE_VOICE = "fr-FR-DeniseNeural";
|
|
11
|
+
export const DEFAULT_EDGE_RATE = "+0%";
|
|
7
12
|
export async function renderSpeech(options) {
|
|
8
13
|
const cwd = path.resolve(options.cwd ?? process.cwd());
|
|
9
14
|
const text = await readInputText(options);
|
|
15
|
+
const engine = resolveEngine(options);
|
|
10
16
|
const model = options.model ?? process.env.MIMIR_TTS_MODEL ?? DEFAULT_TTS_MODEL;
|
|
11
17
|
const modelPath = resolveFromCwd(cwd, options.modelPath ?? process.env.MIMIR_TTS_MODEL_PATH ?? DEFAULT_TTS_MODEL_PATH);
|
|
12
|
-
const outputPath = resolveFromCwd(cwd, options.outputPath ?? defaultOutputPath(cwd, options.textFile));
|
|
18
|
+
const outputPath = resolveFromCwd(cwd, options.outputPath ?? defaultOutputPath(cwd, options.textFile, outputFormatForEngine(engine)));
|
|
13
19
|
const allowRemoteModels = options.allowRemoteModels ?? readBooleanEnv("MIMIR_TTS_ALLOW_REMOTE_MODELS", true);
|
|
14
20
|
await mkdir(path.dirname(outputPath), { recursive: true });
|
|
21
|
+
if (engine === "edge") {
|
|
22
|
+
validateOutputFormat(outputPath, "mp3");
|
|
23
|
+
const voice = options.voice ?? process.env.MIMIR_TTS_EDGE_VOICE ?? DEFAULT_EDGE_VOICE;
|
|
24
|
+
const rate = options.rate ?? process.env.MIMIR_TTS_EDGE_RATE ?? DEFAULT_EDGE_RATE;
|
|
25
|
+
const renderer = options.edgeRenderer ?? edgeCliRenderer;
|
|
26
|
+
const edgeAvailable = options.edgeAvailable ?? edgeTtsAvailable;
|
|
27
|
+
if (!options.edgeRenderer && !edgeAvailable()) {
|
|
28
|
+
throw new Error("edge-tts is required for the Edge engine. Install it with `pipx install edge-tts`.");
|
|
29
|
+
}
|
|
30
|
+
await renderer({ text, outputPath, voice, rate });
|
|
31
|
+
return {
|
|
32
|
+
outputPath,
|
|
33
|
+
engine,
|
|
34
|
+
outputFormat: "mp3",
|
|
35
|
+
model,
|
|
36
|
+
modelPath,
|
|
37
|
+
allowRemoteModels,
|
|
38
|
+
voice,
|
|
39
|
+
rate,
|
|
40
|
+
samplingRate: null,
|
|
41
|
+
samples: null,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
validateOutputFormat(outputPath, "wav");
|
|
15
45
|
const synthesizer = options.synthesizer ?? (await transformerSynthesizer(model, modelPath, allowRemoteModels));
|
|
16
46
|
const output = await synthesizer(text, textToAudioOptions(options));
|
|
17
47
|
await output.save(outputPath);
|
|
18
48
|
return {
|
|
19
49
|
outputPath,
|
|
50
|
+
engine,
|
|
51
|
+
outputFormat: "wav",
|
|
20
52
|
model,
|
|
21
53
|
modelPath,
|
|
22
54
|
allowRemoteModels,
|
|
55
|
+
voice: null,
|
|
56
|
+
rate: null,
|
|
23
57
|
samplingRate: typeof output.sampling_rate === "number" ? output.sampling_rate : null,
|
|
24
58
|
samples: output.data instanceof Float32Array ? output.data.length : null,
|
|
25
59
|
};
|
|
@@ -27,12 +61,15 @@ export async function renderSpeech(options) {
|
|
|
27
61
|
export async function doctor() {
|
|
28
62
|
return {
|
|
29
63
|
node: process.versions.node,
|
|
64
|
+
defaultEngine: DEFAULT_TTS_ENGINE,
|
|
30
65
|
defaultModel: DEFAULT_TTS_MODEL,
|
|
31
66
|
defaultModelPath: DEFAULT_TTS_MODEL_PATH,
|
|
32
67
|
transformersAvailable: await canImportTransformers(),
|
|
68
|
+
edgeTtsAvailable: edgeTtsAvailable(),
|
|
69
|
+
edgeDefaultVoice: DEFAULT_EDGE_VOICE,
|
|
33
70
|
pythonRequired: false,
|
|
34
71
|
ffmpegRequired: false,
|
|
35
|
-
outputFormat: "wav",
|
|
72
|
+
outputFormat: "mp3-or-wav",
|
|
36
73
|
};
|
|
37
74
|
}
|
|
38
75
|
async function readInputText(options) {
|
|
@@ -43,9 +80,9 @@ async function readInputText(options) {
|
|
|
43
80
|
}
|
|
44
81
|
return trimmed;
|
|
45
82
|
}
|
|
46
|
-
function defaultOutputPath(cwd, textFile) {
|
|
83
|
+
function defaultOutputPath(cwd, textFile, format) {
|
|
47
84
|
const name = textFile ? path.basename(textFile, path.extname(textFile)) : "mimir-summary";
|
|
48
|
-
return path.join(cwd, DEFAULT_AUDIO_DIR, `${name}
|
|
85
|
+
return path.join(cwd, DEFAULT_AUDIO_DIR, `${name}.${format}`);
|
|
49
86
|
}
|
|
50
87
|
function resolveFromCwd(cwd, input) {
|
|
51
88
|
return path.isAbsolute(input) ? input : path.resolve(cwd, input);
|
|
@@ -67,6 +104,89 @@ async function transformerSynthesizer(model, modelPath, allowRemoteModels) {
|
|
|
67
104
|
transformers.env.allowRemoteModels = allowRemoteModels;
|
|
68
105
|
return (await transformers.pipeline("text-to-speech", model));
|
|
69
106
|
}
|
|
107
|
+
function resolveEngine(options) {
|
|
108
|
+
if (options.synthesizer) {
|
|
109
|
+
return "transformers";
|
|
110
|
+
}
|
|
111
|
+
const requested = options.engine ?? readEngineEnv() ?? DEFAULT_TTS_ENGINE;
|
|
112
|
+
if (requested === "edge" || requested === "transformers") {
|
|
113
|
+
return requested;
|
|
114
|
+
}
|
|
115
|
+
const outputFormat = options.outputPath ? formatFromPath(options.outputPath) : null;
|
|
116
|
+
if (outputFormat === "wav") {
|
|
117
|
+
return "transformers";
|
|
118
|
+
}
|
|
119
|
+
if (outputFormat === "mp3") {
|
|
120
|
+
return "edge";
|
|
121
|
+
}
|
|
122
|
+
const edgeAvailable = options.edgeAvailable ?? edgeTtsAvailable;
|
|
123
|
+
return edgeAvailable() ? "edge" : "transformers";
|
|
124
|
+
}
|
|
125
|
+
function outputFormatForEngine(engine) {
|
|
126
|
+
return engine === "edge" ? "mp3" : "wav";
|
|
127
|
+
}
|
|
128
|
+
function formatFromPath(filePath) {
|
|
129
|
+
const extension = path.extname(filePath).toLowerCase();
|
|
130
|
+
if (extension === ".mp3") {
|
|
131
|
+
return "mp3";
|
|
132
|
+
}
|
|
133
|
+
if (extension === ".wav") {
|
|
134
|
+
return "wav";
|
|
135
|
+
}
|
|
136
|
+
return null;
|
|
137
|
+
}
|
|
138
|
+
function validateOutputFormat(filePath, expected) {
|
|
139
|
+
const actual = formatFromPath(filePath);
|
|
140
|
+
if (actual && actual !== expected) {
|
|
141
|
+
throw new Error(`The ${expected} engine cannot write ${actual} output. Use a .${expected} path.`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function readEngineEnv() {
|
|
145
|
+
const raw = process.env.MIMIR_TTS_ENGINE;
|
|
146
|
+
if (raw === "auto" || raw === "edge" || raw === "transformers") {
|
|
147
|
+
return raw;
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
function edgeTtsAvailable() {
|
|
152
|
+
return spawnSync("edge-tts", ["--help"], { stdio: "ignore" }).status === 0;
|
|
153
|
+
}
|
|
154
|
+
async function edgeCliRenderer(options) {
|
|
155
|
+
const tempDir = await mkdtemp(path.join(os.tmpdir(), "mimir-tts-edge-"));
|
|
156
|
+
const textFile = path.join(tempDir, "input.txt");
|
|
157
|
+
await writeFile(textFile, options.text, "utf8");
|
|
158
|
+
try {
|
|
159
|
+
await runEdgeTts([
|
|
160
|
+
"--file",
|
|
161
|
+
textFile,
|
|
162
|
+
"--voice",
|
|
163
|
+
options.voice,
|
|
164
|
+
`--rate=${options.rate}`,
|
|
165
|
+
"--write-media",
|
|
166
|
+
options.outputPath,
|
|
167
|
+
]);
|
|
168
|
+
}
|
|
169
|
+
finally {
|
|
170
|
+
await rm(tempDir, { recursive: true, force: true });
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
async function runEdgeTts(args) {
|
|
174
|
+
const child = spawn("edge-tts", args, {
|
|
175
|
+
stdio: ["ignore", "ignore", "pipe"],
|
|
176
|
+
});
|
|
177
|
+
const stderr = [];
|
|
178
|
+
child.stderr.on("data", (chunk) => stderr.push(chunk));
|
|
179
|
+
const code = await new Promise((resolve, reject) => {
|
|
180
|
+
child.on("error", reject);
|
|
181
|
+
child.on("close", resolve);
|
|
182
|
+
});
|
|
183
|
+
if (code !== 0) {
|
|
184
|
+
const detail = Buffer.concat(stderr).toString("utf8").trim();
|
|
185
|
+
throw new Error(detail
|
|
186
|
+
? `edge-tts failed with exit code ${code}: ${detail}`
|
|
187
|
+
: `edge-tts failed with exit code ${code}.`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
70
190
|
async function canImportTransformers() {
|
|
71
191
|
try {
|
|
72
192
|
await import("@huggingface/transformers");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jcode.labs/mimir-tts",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "Plug-and-play
|
|
3
|
+
"version": "0.4.2",
|
|
4
|
+
"description": "Plug-and-play Edge-quality and offline text-to-speech for Mimir audio summaries.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"text-to-speech",
|
|
15
15
|
"tts",
|
|
16
16
|
"local-first",
|
|
17
|
+
"edge-tts",
|
|
17
18
|
"transformers",
|
|
18
19
|
"onnx",
|
|
19
20
|
"audio"
|
|
@@ -41,8 +42,7 @@
|
|
|
41
42
|
},
|
|
42
43
|
"files": [
|
|
43
44
|
"dist",
|
|
44
|
-
"README.md"
|
|
45
|
-
"LICENSE"
|
|
45
|
+
"README.md"
|
|
46
46
|
],
|
|
47
47
|
"publishConfig": {
|
|
48
48
|
"access": "public"
|