speechflow 1.3.2 → 1.4.0

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 (154) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/etc/stx.conf +54 -58
  3. package/package.json +25 -106
  4. package/speechflow-cli/etc/stx.conf +77 -0
  5. package/speechflow-cli/package.json +116 -0
  6. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +217 -0
  7. package/{src → speechflow-cli/src}/speechflow-node-a2a-vad.ts +14 -21
  8. package/{src → speechflow-cli/src}/speechflow-node-a2t-deepgram.ts +21 -38
  9. package/{src → speechflow-cli/src}/speechflow-node-t2a-elevenlabs.ts +10 -16
  10. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +276 -0
  11. package/{src → speechflow-cli/src}/speechflow-node-x2x-filter.ts +5 -1
  12. package/{src → speechflow-cli/src}/speechflow-node-x2x-trace.ts +15 -7
  13. package/{src → speechflow-cli/src}/speechflow-node.ts +7 -0
  14. package/{src → speechflow-cli/src}/speechflow.ts +81 -25
  15. package/speechflow-ui-db/etc/eslint.mjs +106 -0
  16. package/speechflow-ui-db/etc/htmllint.json +55 -0
  17. package/speechflow-ui-db/etc/stx.conf +79 -0
  18. package/speechflow-ui-db/etc/stylelint.js +46 -0
  19. package/speechflow-ui-db/etc/stylelint.yaml +33 -0
  20. package/speechflow-ui-db/etc/tsc-client.json +30 -0
  21. package/speechflow-ui-db/etc/tsc.node.json +9 -0
  22. package/speechflow-ui-db/etc/vite-client.mts +63 -0
  23. package/speechflow-ui-db/package.d/htmllint-cli+0.0.7.patch +20 -0
  24. package/speechflow-ui-db/package.json +75 -0
  25. package/speechflow-ui-db/src/app-icon.ai +1989 -4
  26. package/speechflow-ui-db/src/app-icon.svg +26 -0
  27. package/speechflow-ui-db/src/app.styl +64 -0
  28. package/speechflow-ui-db/src/app.vue +221 -0
  29. package/speechflow-ui-db/src/index.html +23 -0
  30. package/speechflow-ui-db/src/index.ts +26 -0
  31. package/{dst/speechflow.d.ts → speechflow-ui-db/src/lib.d.ts} +5 -3
  32. package/speechflow-ui-db/src/tsconfig.json +3 -0
  33. package/speechflow-ui-st/etc/eslint.mjs +106 -0
  34. package/speechflow-ui-st/etc/htmllint.json +55 -0
  35. package/speechflow-ui-st/etc/stx.conf +79 -0
  36. package/speechflow-ui-st/etc/stylelint.js +46 -0
  37. package/speechflow-ui-st/etc/stylelint.yaml +33 -0
  38. package/speechflow-ui-st/etc/tsc-client.json +30 -0
  39. package/speechflow-ui-st/etc/tsc.node.json +9 -0
  40. package/speechflow-ui-st/etc/vite-client.mts +63 -0
  41. package/speechflow-ui-st/package.d/htmllint-cli+0.0.7.patch +20 -0
  42. package/speechflow-ui-st/package.json +79 -0
  43. package/speechflow-ui-st/src/app-icon.ai +1989 -4
  44. package/speechflow-ui-st/src/app-icon.svg +26 -0
  45. package/speechflow-ui-st/src/app.styl +64 -0
  46. package/speechflow-ui-st/src/app.vue +142 -0
  47. package/speechflow-ui-st/src/index.html +23 -0
  48. package/speechflow-ui-st/src/index.ts +26 -0
  49. package/speechflow-ui-st/src/lib.d.ts +9 -0
  50. package/speechflow-ui-st/src/tsconfig.json +3 -0
  51. package/dst/speechflow-node-a2a-ffmpeg.d.ts +0 -13
  52. package/dst/speechflow-node-a2a-ffmpeg.js +0 -153
  53. package/dst/speechflow-node-a2a-ffmpeg.js.map +0 -1
  54. package/dst/speechflow-node-a2a-gender.d.ts +0 -20
  55. package/dst/speechflow-node-a2a-gender.js +0 -349
  56. package/dst/speechflow-node-a2a-gender.js.map +0 -1
  57. package/dst/speechflow-node-a2a-meter.d.ts +0 -14
  58. package/dst/speechflow-node-a2a-meter.js +0 -196
  59. package/dst/speechflow-node-a2a-meter.js.map +0 -1
  60. package/dst/speechflow-node-a2a-mute.d.ts +0 -17
  61. package/dst/speechflow-node-a2a-mute.js +0 -117
  62. package/dst/speechflow-node-a2a-mute.js.map +0 -1
  63. package/dst/speechflow-node-a2a-vad.d.ts +0 -19
  64. package/dst/speechflow-node-a2a-vad.js +0 -383
  65. package/dst/speechflow-node-a2a-vad.js.map +0 -1
  66. package/dst/speechflow-node-a2a-wav.d.ts +0 -11
  67. package/dst/speechflow-node-a2a-wav.js +0 -211
  68. package/dst/speechflow-node-a2a-wav.js.map +0 -1
  69. package/dst/speechflow-node-a2t-deepgram.d.ts +0 -19
  70. package/dst/speechflow-node-a2t-deepgram.js +0 -345
  71. package/dst/speechflow-node-a2t-deepgram.js.map +0 -1
  72. package/dst/speechflow-node-t2a-elevenlabs.d.ts +0 -18
  73. package/dst/speechflow-node-t2a-elevenlabs.js +0 -244
  74. package/dst/speechflow-node-t2a-elevenlabs.js.map +0 -1
  75. package/dst/speechflow-node-t2a-kokoro.d.ts +0 -14
  76. package/dst/speechflow-node-t2a-kokoro.js +0 -155
  77. package/dst/speechflow-node-t2a-kokoro.js.map +0 -1
  78. package/dst/speechflow-node-t2t-deepl.d.ts +0 -15
  79. package/dst/speechflow-node-t2t-deepl.js +0 -146
  80. package/dst/speechflow-node-t2t-deepl.js.map +0 -1
  81. package/dst/speechflow-node-t2t-format.d.ts +0 -11
  82. package/dst/speechflow-node-t2t-format.js +0 -82
  83. package/dst/speechflow-node-t2t-format.js.map +0 -1
  84. package/dst/speechflow-node-t2t-ollama.d.ts +0 -13
  85. package/dst/speechflow-node-t2t-ollama.js +0 -247
  86. package/dst/speechflow-node-t2t-ollama.js.map +0 -1
  87. package/dst/speechflow-node-t2t-openai.d.ts +0 -13
  88. package/dst/speechflow-node-t2t-openai.js +0 -227
  89. package/dst/speechflow-node-t2t-openai.js.map +0 -1
  90. package/dst/speechflow-node-t2t-sentence.d.ts +0 -17
  91. package/dst/speechflow-node-t2t-sentence.js +0 -250
  92. package/dst/speechflow-node-t2t-sentence.js.map +0 -1
  93. package/dst/speechflow-node-t2t-subtitle.d.ts +0 -12
  94. package/dst/speechflow-node-t2t-subtitle.js +0 -166
  95. package/dst/speechflow-node-t2t-subtitle.js.map +0 -1
  96. package/dst/speechflow-node-t2t-transformers.d.ts +0 -14
  97. package/dst/speechflow-node-t2t-transformers.js +0 -265
  98. package/dst/speechflow-node-t2t-transformers.js.map +0 -1
  99. package/dst/speechflow-node-x2x-filter.d.ts +0 -11
  100. package/dst/speechflow-node-x2x-filter.js +0 -117
  101. package/dst/speechflow-node-x2x-filter.js.map +0 -1
  102. package/dst/speechflow-node-x2x-trace.d.ts +0 -11
  103. package/dst/speechflow-node-x2x-trace.js +0 -104
  104. package/dst/speechflow-node-x2x-trace.js.map +0 -1
  105. package/dst/speechflow-node-xio-device.d.ts +0 -13
  106. package/dst/speechflow-node-xio-device.js +0 -230
  107. package/dst/speechflow-node-xio-device.js.map +0 -1
  108. package/dst/speechflow-node-xio-file.d.ts +0 -11
  109. package/dst/speechflow-node-xio-file.js +0 -216
  110. package/dst/speechflow-node-xio-file.js.map +0 -1
  111. package/dst/speechflow-node-xio-mqtt.d.ts +0 -13
  112. package/dst/speechflow-node-xio-mqtt.js +0 -188
  113. package/dst/speechflow-node-xio-mqtt.js.map +0 -1
  114. package/dst/speechflow-node-xio-websocket.d.ts +0 -13
  115. package/dst/speechflow-node-xio-websocket.js +0 -278
  116. package/dst/speechflow-node-xio-websocket.js.map +0 -1
  117. package/dst/speechflow-node.d.ts +0 -63
  118. package/dst/speechflow-node.js +0 -177
  119. package/dst/speechflow-node.js.map +0 -1
  120. package/dst/speechflow-utils.d.ts +0 -74
  121. package/dst/speechflow-utils.js +0 -519
  122. package/dst/speechflow-utils.js.map +0 -1
  123. package/dst/speechflow.js +0 -787
  124. package/dst/speechflow.js.map +0 -1
  125. package/src/speechflow-node-a2a-meter.ts +0 -177
  126. package/src/speechflow-node-t2t-subtitle.ts +0 -149
  127. /package/{etc → speechflow-cli/etc}/biome.jsonc +0 -0
  128. /package/{etc → speechflow-cli/etc}/eslint.mjs +0 -0
  129. /package/{etc → speechflow-cli/etc}/oxlint.jsonc +0 -0
  130. /package/{etc → speechflow-cli/etc}/speechflow.bat +0 -0
  131. /package/{etc → speechflow-cli/etc}/speechflow.sh +0 -0
  132. /package/{etc → speechflow-cli/etc}/speechflow.yaml +0 -0
  133. /package/{etc → speechflow-cli/etc}/tsconfig.json +0 -0
  134. /package/{package.d → speechflow-cli/package.d}/@ericedouard+vad-node-realtime+0.2.0.patch +0 -0
  135. /package/{src → speechflow-cli/src}/lib.d.ts +0 -0
  136. /package/{src → speechflow-cli/src}/speechflow-logo.ai +0 -0
  137. /package/{src → speechflow-cli/src}/speechflow-logo.svg +0 -0
  138. /package/{src → speechflow-cli/src}/speechflow-node-a2a-ffmpeg.ts +0 -0
  139. /package/{src → speechflow-cli/src}/speechflow-node-a2a-gender.ts +0 -0
  140. /package/{src → speechflow-cli/src}/speechflow-node-a2a-mute.ts +0 -0
  141. /package/{src → speechflow-cli/src}/speechflow-node-a2a-wav.ts +0 -0
  142. /package/{src → speechflow-cli/src}/speechflow-node-t2a-kokoro.ts +0 -0
  143. /package/{src → speechflow-cli/src}/speechflow-node-t2t-deepl.ts +0 -0
  144. /package/{src → speechflow-cli/src}/speechflow-node-t2t-format.ts +0 -0
  145. /package/{src → speechflow-cli/src}/speechflow-node-t2t-ollama.ts +0 -0
  146. /package/{src → speechflow-cli/src}/speechflow-node-t2t-openai.ts +0 -0
  147. /package/{src → speechflow-cli/src}/speechflow-node-t2t-sentence.ts +0 -0
  148. /package/{src → speechflow-cli/src}/speechflow-node-t2t-transformers.ts +0 -0
  149. /package/{src → speechflow-cli/src}/speechflow-node-xio-device.ts +0 -0
  150. /package/{src → speechflow-cli/src}/speechflow-node-xio-file.ts +0 -0
  151. /package/{src → speechflow-cli/src}/speechflow-node-xio-mqtt.ts +0 -0
  152. /package/{src → speechflow-cli/src}/speechflow-node-xio-websocket.ts +0 -0
  153. /package/{src → speechflow-cli/src}/speechflow-utils.ts +0 -0
  154. /package/{tsconfig.json → speechflow-cli/tsconfig.json} +0 -0
@@ -1,244 +0,0 @@
1
- "use strict";
2
- /*
3
- ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- /* standard dependencies */
45
- const node_stream_1 = __importDefault(require("node:stream"));
46
- /* external dependencies */
47
- const ElevenLabs = __importStar(require("@elevenlabs/elevenlabs-js"));
48
- const get_stream_1 = require("get-stream");
49
- const speex_resampler_1 = __importDefault(require("speex-resampler"));
50
- /* internal dependencies */
51
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
52
- /* SpeechFlow node for Elevenlabs text-to-speech conversion */
53
- class SpeechFlowNodeElevenlabs extends speechflow_node_1.default {
54
- /* declare official node name */
55
- static name = "elevenlabs";
56
- /* internal state */
57
- elevenlabs = null;
58
- static speexInitialized = false;
59
- destroyed = false;
60
- resampler = null;
61
- /* construct node */
62
- constructor(id, cfg, opts, args) {
63
- super(id, cfg, opts, args);
64
- /* declare node configuration parameters */
65
- this.configure({
66
- key: { type: "string", val: process.env.SPEECHFLOW_ELEVENLABS_KEY },
67
- voice: { type: "string", val: "Brian", pos: 0, match: /^(?:Brittney|Cassidy|Leonie|Mark|Brian)$/ },
68
- language: { type: "string", val: "en", pos: 1, match: /^(?:de|en)$/ },
69
- speed: { type: "number", val: 1.00, pos: 2, match: (n) => n >= 0.7 && n <= 1.2 },
70
- stability: { type: "number", val: 0.5, pos: 3, match: (n) => n >= 0.0 && n <= 1.0 },
71
- similarity: { type: "number", val: 0.75, pos: 4, match: (n) => n >= 0.0 && n <= 1.0 },
72
- optimize: { type: "string", val: "latency", pos: 5, match: /^(?:latency|quality)$/ }
73
- });
74
- /* sanity check parameters */
75
- if (!this.params.key)
76
- throw new Error("ElevenLabs API key not configured");
77
- /* declare node input/output format */
78
- this.input = "text";
79
- this.output = "audio";
80
- }
81
- /* one-time status of node */
82
- async status() {
83
- const elevenlabs = new ElevenLabs.ElevenLabsClient({ apiKey: this.params.key });
84
- const subscription = await elevenlabs.user.subscription.get();
85
- const percent = subscription.characterCount / subscription.characterLimit;
86
- return { usage: `${percent.toFixed(2)}%` };
87
- }
88
- /* open node */
89
- async open() {
90
- /* clear destruction flag */
91
- this.destroyed = false;
92
- /* establish ElevenLabs API connection */
93
- this.elevenlabs = new ElevenLabs.ElevenLabsClient({
94
- apiKey: this.params.key
95
- });
96
- /* determine maximum sample rate of ElevenLabs tier */
97
- const maxSampleRates = {
98
- "free": 16000,
99
- "starter": 22050,
100
- "creator": 24000,
101
- "independent_publisher": 44100,
102
- "growing_business": 44100,
103
- "enterprise": 44100
104
- };
105
- const sub = await this.elevenlabs.user.subscription.get();
106
- const tier = (sub.tier ?? "free");
107
- this.log("info", `determined ElevenLabs tier: "${tier}"`);
108
- let maxSampleRate = 16000;
109
- if (maxSampleRates[tier] !== undefined)
110
- maxSampleRate = maxSampleRates[tier];
111
- this.log("info", `determined maximum audio sample rate: ${maxSampleRate}`);
112
- /* determine voice for text-to-speech operation
113
- (for details see https://elevenlabs.io/text-to-speech) */
114
- const voices = await this.elevenlabs.voices.getAll();
115
- let voice = voices.voices.find((voice) => voice.name === this.params.voice);
116
- if (voice === undefined) {
117
- voice = voices.voices.find((voice) => voice.name.startsWith(this.params.voice));
118
- if (voice === undefined)
119
- throw new Error(`invalid ElevenLabs voice "${this.params.voice}"`);
120
- }
121
- const info = Object.keys(voice.labels ?? {}).length > 0 ?
122
- (", " + Object.entries(voice.labels)
123
- .map(([key, val]) => `${key}: "${val}"`).join(", ")) : "";
124
- this.log("info", `selected voice: name: "${voice.name}"${info}`);
125
- /* perform text-to-speech operation with Elevenlabs API */
126
- const model = this.params.optimize === "quality" ?
127
- "eleven_turbo_v2_5" :
128
- "eleven_flash_v2_5";
129
- const speechStream = (text) => {
130
- this.log("info", `ElevenLabs: send text "${text}"`);
131
- return this.elevenlabs.textToSpeech.convert(voice.voiceId, {
132
- text,
133
- modelId: model,
134
- languageCode: this.params.language,
135
- outputFormat: `pcm_${maxSampleRate}`,
136
- seed: 815, /* arbitrary, but fixated by us */
137
- voiceSettings: {
138
- speed: this.params.speed,
139
- stability: this.params.stability,
140
- similarityBoost: this.params.similarity
141
- }
142
- }, {
143
- timeoutInSeconds: 30,
144
- maxRetries: 10
145
- });
146
- };
147
- /* establish resampler from ElevenLabs's maximum 24Khz
148
- output to our standard audio sample rate (48KHz) */
149
- if (!SpeechFlowNodeElevenlabs.speexInitialized) {
150
- /* at least once initialize resampler */
151
- await speex_resampler_1.default.initPromise;
152
- SpeechFlowNodeElevenlabs.speexInitialized = true;
153
- }
154
- this.resampler = new speex_resampler_1.default(1, maxSampleRate, this.config.audioSampleRate, 7);
155
- /* create transform stream and connect it to the ElevenLabs API */
156
- const self = this;
157
- this.stream = new node_stream_1.default.Transform({
158
- writableObjectMode: true,
159
- readableObjectMode: true,
160
- decodeStrings: false,
161
- highWaterMark: 1,
162
- transform(chunk, encoding, callback) {
163
- if (self.destroyed) {
164
- callback(new Error("stream already destroyed"));
165
- return;
166
- }
167
- if (Buffer.isBuffer(chunk.payload))
168
- callback(new Error("invalid chunk payload type"));
169
- else {
170
- (async () => {
171
- let processTimeout = setTimeout(() => {
172
- processTimeout = null;
173
- callback(new Error("ElevenLabs API timeout"));
174
- }, 60 * 1000);
175
- try {
176
- const stream = await speechStream(chunk.payload);
177
- if (self.destroyed) {
178
- if (processTimeout !== null) {
179
- clearTimeout(processTimeout);
180
- processTimeout = null;
181
- }
182
- callback(new Error("stream destroyed during processing"));
183
- return;
184
- }
185
- const buffer = await (0, get_stream_1.getStreamAsBuffer)(stream);
186
- if (self.destroyed) {
187
- if (processTimeout !== null) {
188
- clearTimeout(processTimeout);
189
- processTimeout = null;
190
- }
191
- callback(new Error("stream destroyed during processing"));
192
- return;
193
- }
194
- const bufferResampled = self.resampler.processChunk(buffer);
195
- self.log("info", `ElevenLabs: received audio (buffer length: ${buffer.byteLength})`);
196
- const chunkNew = chunk.clone();
197
- chunkNew.type = "audio";
198
- chunkNew.payload = bufferResampled;
199
- if (processTimeout !== null) {
200
- clearTimeout(processTimeout);
201
- processTimeout = null;
202
- }
203
- this.push(chunkNew);
204
- callback();
205
- }
206
- catch (error) {
207
- if (processTimeout !== null) {
208
- clearTimeout(processTimeout);
209
- processTimeout = null;
210
- }
211
- callback(error instanceof Error ? error : new Error("ElevenLabs processing failed"));
212
- }
213
- })();
214
- }
215
- },
216
- final(callback) {
217
- if (self.destroyed) {
218
- callback();
219
- return;
220
- }
221
- this.push(null);
222
- callback();
223
- }
224
- });
225
- }
226
- /* close node */
227
- async close() {
228
- /* indicate destruction */
229
- this.destroyed = true;
230
- /* destroy stream */
231
- if (this.stream !== null) {
232
- this.stream.destroy();
233
- this.stream = null;
234
- }
235
- /* destroy resampler */
236
- if (this.resampler !== null)
237
- this.resampler = null;
238
- /* destroy ElevenLabs API */
239
- if (this.elevenlabs !== null)
240
- this.elevenlabs = null;
241
- }
242
- }
243
- exports.default = SpeechFlowNodeElevenlabs;
244
- //# sourceMappingURL=speechflow-node-t2a-elevenlabs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-t2a-elevenlabs.js","sourceRoot":"","sources":["../src/speechflow-node-t2a-elevenlabs.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeKokoro extends SpeechFlowNode {
3
- static name: string;
4
- private kokoro;
5
- private resampler;
6
- private static speexInitialized;
7
- constructor(id: string, cfg: {
8
- [id: string]: any;
9
- }, opts: {
10
- [id: string]: any;
11
- }, args: any[]);
12
- open(): Promise<void>;
13
- close(): Promise<void>;
14
- }
@@ -1,155 +0,0 @@
1
- "use strict";
2
- /*
3
- ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
- */
7
- var __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
9
- };
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- /* standard dependencies */
12
- const node_stream_1 = __importDefault(require("node:stream"));
13
- /* external dependencies */
14
- const kokoro_js_1 = require("kokoro-js");
15
- const speex_resampler_1 = __importDefault(require("speex-resampler"));
16
- /* internal dependencies */
17
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
18
- /* SpeechFlow node for Kokoro text-to-speech conversion */
19
- class SpeechFlowNodeKokoro extends speechflow_node_1.default {
20
- /* declare official node name */
21
- static name = "kokoro";
22
- /* internal state */
23
- kokoro = null;
24
- resampler = null;
25
- static speexInitialized = false;
26
- /* construct node */
27
- constructor(id, cfg, opts, args) {
28
- super(id, cfg, opts, args);
29
- /* declare node configuration parameters */
30
- this.configure({
31
- voice: { type: "string", val: "Aoede", pos: 0, match: /^(?:Aoede|Heart|Puck|Fenrir)$/ },
32
- language: { type: "string", val: "en", pos: 1, match: /^(?:en)$/ },
33
- speed: { type: "number", val: 1.25, pos: 2, match: (n) => n >= 1.0 && n <= 1.30 },
34
- });
35
- /* declare node input/output format */
36
- this.input = "text";
37
- this.output = "audio";
38
- }
39
- /* open node */
40
- async open() {
41
- /* establish Kokoro */
42
- const model = "onnx-community/Kokoro-82M-v1.0-ONNX";
43
- const progressState = new Map();
44
- const progressCallback = (progress) => {
45
- let artifact = model;
46
- if (typeof progress.file === "string")
47
- artifact += `:${progress.file}`;
48
- let percent = 0;
49
- if (typeof progress.loaded === "number" && typeof progress.total === "number")
50
- percent = progress.loaded / progress.total * 100;
51
- else if (typeof progress.progress === "number")
52
- percent = progress.progress;
53
- if (percent > 0)
54
- progressState.set(artifact, percent);
55
- };
56
- const interval = setInterval(() => {
57
- for (const [artifact, percent] of progressState) {
58
- this.log("info", `downloaded ${percent.toFixed(2)}% of artifact "${artifact}"`);
59
- if (percent >= 100.0)
60
- progressState.delete(artifact);
61
- }
62
- if (progressState.size === 0)
63
- clearInterval(interval);
64
- }, 1000);
65
- this.kokoro = await kokoro_js_1.KokoroTTS.from_pretrained(model, {
66
- dtype: "q4f16",
67
- progress_callback: progressCallback
68
- });
69
- clearInterval(interval);
70
- if (this.kokoro === null)
71
- throw new Error("failed to instantiate Kokoro");
72
- /* establish resampler from Kokoro's maximum 24Khz
73
- output to our standard audio sample rate (48KHz) */
74
- if (!SpeechFlowNodeKokoro.speexInitialized) {
75
- /* at least once initialize resampler */
76
- await speex_resampler_1.default.initPromise;
77
- SpeechFlowNodeKokoro.speexInitialized = true;
78
- }
79
- this.resampler = new speex_resampler_1.default(1, 24000, this.config.audioSampleRate, 7);
80
- /* determine voice for text-to-speech operation */
81
- const voices = {
82
- "Aoede": "af_aoede",
83
- "Heart": "af_heart",
84
- "Puck": "am_puck",
85
- "Fenrir": "am_fenrir"
86
- };
87
- const voice = (voices[this.params.voice]);
88
- if (voice === undefined)
89
- throw new Error(`invalid Kokoro voice "${this.params.voice}"`);
90
- /* perform text-to-speech operation with Kokoro API */
91
- const text2speech = async (text) => {
92
- this.log("info", `Kokoro: input: "${text}"`);
93
- const audio = await this.kokoro.generate(text, {
94
- speed: this.params.speed,
95
- voice: voice
96
- });
97
- if (audio.sampling_rate !== 24000)
98
- throw new Error("expected 24KHz sampling rate in Kokoro output");
99
- /* convert audio samples from PCM/F32/24Khz to PCM/I16/24KHz */
100
- const samples = audio.audio;
101
- const buffer1 = Buffer.alloc(samples.length * 2);
102
- for (let i = 0; i < samples.length; i++) {
103
- const sample = Math.max(-1, Math.min(1, samples[i]));
104
- buffer1.writeInt16LE(sample * 0x7FFF, i * 2);
105
- }
106
- /* resample audio samples from PCM/I16/24Khz to PCM/I16/48KHz */
107
- const buffer2 = this.resampler.processChunk(buffer1);
108
- return buffer2;
109
- };
110
- /* create transform stream and connect it to the Kokoro API */
111
- const log = (level, msg) => { this.log(level, msg); };
112
- this.stream = new node_stream_1.default.Transform({
113
- writableObjectMode: true,
114
- readableObjectMode: true,
115
- decodeStrings: false,
116
- highWaterMark: 1,
117
- transform(chunk, encoding, callback) {
118
- if (Buffer.isBuffer(chunk.payload))
119
- callback(new Error("invalid chunk payload type"));
120
- else {
121
- text2speech(chunk.payload).then((buffer) => {
122
- log("info", `Kokoro: received audio (buffer length: ${buffer.byteLength})`);
123
- chunk = chunk.clone();
124
- chunk.type = "audio";
125
- chunk.payload = buffer;
126
- this.push(chunk);
127
- callback();
128
- }).catch((err) => {
129
- callback(err);
130
- });
131
- }
132
- },
133
- final(callback) {
134
- this.push(null);
135
- callback();
136
- }
137
- });
138
- }
139
- /* close node */
140
- async close() {
141
- /* destroy stream */
142
- if (this.stream !== null) {
143
- this.stream.destroy();
144
- this.stream = null;
145
- }
146
- /* destroy resampler */
147
- if (this.resampler !== null)
148
- this.resampler = null;
149
- /* destroy Kokoro API */
150
- if (this.kokoro !== null)
151
- this.kokoro = null;
152
- }
153
- }
154
- exports.default = SpeechFlowNodeKokoro;
155
- //# sourceMappingURL=speechflow-node-t2a-kokoro.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-t2a-kokoro.js","sourceRoot":"","sources":["../src/speechflow-node-t2a-kokoro.ts"],"names":[],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeDeepL extends SpeechFlowNode {
3
- static name: string;
4
- private deepl;
5
- constructor(id: string, cfg: {
6
- [id: string]: any;
7
- }, opts: {
8
- [id: string]: any;
9
- }, args: any[]);
10
- status(): Promise<{
11
- usage: string;
12
- }>;
13
- open(): Promise<void>;
14
- close(): Promise<void>;
15
- }
@@ -1,146 +0,0 @@
1
- "use strict";
2
- /*
3
- ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- /* standard dependencies */
45
- const node_stream_1 = __importDefault(require("node:stream"));
46
- /* external dependencies */
47
- const DeepL = __importStar(require("deepl-node"));
48
- /* internal dependencies */
49
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
50
- /* SpeechFlow node for DeepL text-to-text translations */
51
- class SpeechFlowNodeDeepL extends speechflow_node_1.default {
52
- /* declare official node name */
53
- static name = "deepl";
54
- /* internal state */
55
- deepl = null;
56
- /* construct node */
57
- constructor(id, cfg, opts, args) {
58
- super(id, cfg, opts, args);
59
- /* declare node configuration parameters */
60
- this.configure({
61
- key: { type: "string", val: process.env.SPEECHFLOW_DEEPL_KEY ?? "" },
62
- src: { type: "string", pos: 0, val: "de", match: /^(?:de|en)$/ },
63
- dst: { type: "string", pos: 1, val: "en", match: /^(?:de|en)$/ },
64
- optimize: { type: "string", pos: 2, val: "latency", match: /^(?:latency|quality)$/ }
65
- });
66
- /* validate API key */
67
- if (this.params.key === "")
68
- throw new Error("DeepL API key is required");
69
- /* sanity check situation */
70
- if (this.params.src === this.params.dst)
71
- throw new Error("source and destination languages cannot be the same");
72
- /* declare node input/output format */
73
- this.input = "text";
74
- this.output = "text";
75
- }
76
- /* one-time status of node */
77
- async status() {
78
- const deepl = new DeepL.Translator(this.params.key);
79
- const usage = await deepl.getUsage();
80
- const limit = usage?.character?.limit ?? 1;
81
- const percent = limit > 0 ? ((usage?.character?.count ?? 0) / limit * 100) : 0;
82
- return { usage: `${percent.toFixed(8)}%` };
83
- }
84
- /* open node */
85
- async open() {
86
- /* instantiate DeepL API SDK */
87
- this.deepl = new DeepL.Translator(this.params.key);
88
- /* provide text-to-text translation */
89
- const translate = async (text) => {
90
- const src = this.params.src === "en" ? "en-US" : this.params.src;
91
- const dst = this.params.dst === "en" ? "en-US" : this.params.dst;
92
- const result = await this.deepl.translateText(text, src, dst, {
93
- splitSentences: "off",
94
- modelType: this.params.optimize === "latency" ?
95
- "latency_optimized" : "prefer_quality_optimized",
96
- preserveFormatting: true,
97
- formality: "prefer_more"
98
- });
99
- return (result?.text ?? text);
100
- };
101
- /* establish a duplex stream and connect it to DeepL translation */
102
- this.stream = new node_stream_1.default.Transform({
103
- readableObjectMode: true,
104
- writableObjectMode: true,
105
- decodeStrings: false,
106
- highWaterMark: 1,
107
- transform(chunk, encoding, callback) {
108
- if (Buffer.isBuffer(chunk.payload))
109
- callback(new Error("invalid chunk payload type"));
110
- else {
111
- if (chunk.payload === "") {
112
- this.push(chunk);
113
- callback();
114
- }
115
- else {
116
- translate(chunk.payload).then((payload) => {
117
- const chunkNew = chunk.clone();
118
- chunkNew.payload = payload;
119
- this.push(chunkNew);
120
- callback();
121
- }).catch((err) => {
122
- callback(err);
123
- });
124
- }
125
- }
126
- },
127
- final(callback) {
128
- this.push(null);
129
- callback();
130
- }
131
- });
132
- }
133
- /* close node */
134
- async close() {
135
- /* close stream */
136
- if (this.stream !== null) {
137
- this.stream.destroy();
138
- this.stream = null;
139
- }
140
- /* shutdown DeepL API */
141
- if (this.deepl !== null)
142
- this.deepl = null;
143
- }
144
- }
145
- exports.default = SpeechFlowNodeDeepL;
146
- //# sourceMappingURL=speechflow-node-t2t-deepl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-t2t-deepl.js","sourceRoot":"","sources":["../src/speechflow-node-t2t-deepl.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeFormat extends SpeechFlowNode {
3
- static name: string;
4
- constructor(id: string, cfg: {
5
- [id: string]: any;
6
- }, opts: {
7
- [id: string]: any;
8
- }, args: any[]);
9
- open(): Promise<void>;
10
- close(): Promise<void>;
11
- }