@neosapience/n8n-nodes-typecast 1.0.2 → 1.0.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/README.md +7 -8
- package/credentials/TypecastApi.credentials.ts +37 -36
- package/dist/credentials/TypecastApi.credentials.js.map +1 -1
- package/dist/nodes/Typecast/Typecast.node.d.ts +6 -1
- package/dist/nodes/Typecast/Typecast.node.js +139 -19
- package/dist/nodes/Typecast/Typecast.node.js.map +1 -1
- package/dist/nodes/Typecast/resources/speech/index.js +367 -55
- package/dist/nodes/Typecast/resources/speech/index.js.map +1 -1
- package/dist/nodes/Typecast/resources/voice/index.js +152 -48
- package/dist/nodes/Typecast/resources/voice/index.js.map +1 -1
- package/dist/nodes/Typecast/shared/transport.d.ts +2 -2
- package/dist/nodes/Typecast/shared/transport.js +20 -6
- package/dist/nodes/Typecast/shared/transport.js.map +1 -1
- package/dist/package.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/nodes/Typecast/Typecast.node.ts +358 -199
- package/nodes/Typecast/resources/speech/index.ts +563 -228
- package/nodes/Typecast/resources/voice/index.ts +189 -88
- package/nodes/Typecast/shared/transport.ts +72 -44
- package/package.json +1 -1
|
@@ -1,235 +1,570 @@
|
|
|
1
1
|
import type { INodeProperties } from 'n8n-workflow';
|
|
2
2
|
|
|
3
3
|
const showOnlyForSpeech = {
|
|
4
|
-
|
|
4
|
+
resource: ['speech'],
|
|
5
5
|
};
|
|
6
6
|
|
|
7
7
|
export const speechDescription: INodeProperties[] = [
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
8
|
+
{
|
|
9
|
+
displayName: 'Operation',
|
|
10
|
+
name: 'operation',
|
|
11
|
+
type: 'options',
|
|
12
|
+
noDataExpression: true,
|
|
13
|
+
displayOptions: {
|
|
14
|
+
show: showOnlyForSpeech,
|
|
15
|
+
},
|
|
16
|
+
options: [
|
|
17
|
+
{
|
|
18
|
+
name: 'Text to Speech',
|
|
19
|
+
value: 'textToSpeech',
|
|
20
|
+
description: 'Convert text to speech using a specified voice',
|
|
21
|
+
action: 'Convert text to speech',
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
default: 'textToSpeech',
|
|
25
|
+
},
|
|
26
|
+
// ----------------------------------
|
|
27
|
+
// speech:textToSpeech
|
|
28
|
+
// ----------------------------------
|
|
29
|
+
{
|
|
30
|
+
displayName: 'Voice ID',
|
|
31
|
+
name: 'voiceId',
|
|
32
|
+
type: 'resourceLocator',
|
|
33
|
+
required: true,
|
|
34
|
+
displayOptions: {
|
|
35
|
+
show: {
|
|
36
|
+
resource: ['speech'],
|
|
37
|
+
operation: ['textToSpeech'],
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
default: { mode: 'list', value: '' },
|
|
41
|
+
|
|
42
|
+
description: 'Select a voice from the list or enter a Voice ID directly',
|
|
43
|
+
modes: [
|
|
44
|
+
{
|
|
45
|
+
displayName: 'From List',
|
|
46
|
+
name: 'list',
|
|
47
|
+
type: 'list',
|
|
48
|
+
typeOptions: {
|
|
49
|
+
searchListMethod: 'searchVoices',
|
|
50
|
+
searchable: true,
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
displayName: 'By ID',
|
|
55
|
+
name: 'id',
|
|
56
|
+
type: 'string',
|
|
57
|
+
placeholder: 'e.g., tc_60e5426de8b95f1d3000d7b5',
|
|
58
|
+
validation: [
|
|
59
|
+
{
|
|
60
|
+
type: 'regex',
|
|
61
|
+
properties: {
|
|
62
|
+
regex: '^tc_[a-f0-9]+$',
|
|
63
|
+
errorMessage: 'Voice ID must start with "tc_" followed by hexadecimal characters',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
displayName: 'Text',
|
|
72
|
+
name: 'text',
|
|
73
|
+
type: 'string',
|
|
74
|
+
required: true,
|
|
75
|
+
displayOptions: {
|
|
76
|
+
show: {
|
|
77
|
+
resource: ['speech'],
|
|
78
|
+
operation: ['textToSpeech'],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
default: 'Hello! Welcome to Typecast text to speech. This is a sample voice generation.',
|
|
82
|
+
typeOptions: {
|
|
83
|
+
rows: 4,
|
|
84
|
+
},
|
|
85
|
+
description:
|
|
86
|
+
'Text to convert to speech (1-2000 characters) Credits consumed based on text length. Supports multiple languages including English, Korean, Japanese, and Chinese. Special characters and punctuation are handled automatically.',
|
|
87
|
+
placeholder: "Everything is so incredibly perfect that I feel like I'm dreaming.",
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
displayName: 'Model',
|
|
91
|
+
name: 'model',
|
|
92
|
+
type: 'options',
|
|
93
|
+
required: true,
|
|
94
|
+
displayOptions: {
|
|
95
|
+
show: {
|
|
96
|
+
resource: ['speech'],
|
|
97
|
+
operation: ['textToSpeech'],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
options: [
|
|
101
|
+
{
|
|
102
|
+
name: 'SSFM-V30 (Latest)',
|
|
103
|
+
value: 'ssfm-v30',
|
|
104
|
+
description:
|
|
105
|
+
'Latest model with improved prosody, Smart Emotion, and 37 language support (recommended)',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: 'SSFM-V21',
|
|
109
|
+
value: 'ssfm-v21',
|
|
110
|
+
description: 'Stable production model with reliable quality and 27 language support',
|
|
111
|
+
},
|
|
112
|
+
],
|
|
113
|
+
default: 'ssfm-v30',
|
|
114
|
+
description:
|
|
115
|
+
'Voice model to use for speech synthesis ssfm-v30 is recommended for best quality and Smart Emotion features',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
displayName: 'Emotion Type',
|
|
119
|
+
name: 'emotionType',
|
|
120
|
+
type: 'options',
|
|
121
|
+
displayOptions: {
|
|
122
|
+
show: {
|
|
123
|
+
resource: ['speech'],
|
|
124
|
+
operation: ['textToSpeech'],
|
|
125
|
+
model: ['ssfm-v30'],
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
options: [
|
|
129
|
+
{
|
|
130
|
+
name: 'Smart (Auto-Detect From Context)',
|
|
131
|
+
value: 'smart',
|
|
132
|
+
description:
|
|
133
|
+
'AI automatically infers emotion from text context - best for dialogue and storytelling',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'Preset (Manual Selection)',
|
|
137
|
+
value: 'preset',
|
|
138
|
+
description: 'Manually select emotion preset and intensity - best for precise control',
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
default: 'smart',
|
|
142
|
+
description:
|
|
143
|
+
'How to control emotional expression (ssfm-v30 only) Smart: AI detects emotion automatically from context. Preset: Manual selection with 7 emotion options.',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
displayName: 'Previous Text',
|
|
147
|
+
name: 'previousText',
|
|
148
|
+
type: 'string',
|
|
149
|
+
displayOptions: {
|
|
150
|
+
show: {
|
|
151
|
+
resource: ['speech'],
|
|
152
|
+
operation: ['textToSpeech'],
|
|
153
|
+
model: ['ssfm-v30'],
|
|
154
|
+
emotionType: ['smart'],
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
default: '',
|
|
158
|
+
typeOptions: {
|
|
159
|
+
rows: 2,
|
|
160
|
+
},
|
|
161
|
+
description:
|
|
162
|
+
'Text that comes BEFORE the main text Provides context for AI to infer appropriate emotion. Optional but helps improve emotional accuracy (max 2000 characters).',
|
|
163
|
+
placeholder: "I feel like I'm walking on air and I just want to scream with joy!",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
displayName: 'Next Text',
|
|
167
|
+
name: 'nextText',
|
|
168
|
+
type: 'string',
|
|
169
|
+
displayOptions: {
|
|
170
|
+
show: {
|
|
171
|
+
resource: ['speech'],
|
|
172
|
+
operation: ['textToSpeech'],
|
|
173
|
+
model: ['ssfm-v30'],
|
|
174
|
+
emotionType: ['smart'],
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
default: '',
|
|
178
|
+
typeOptions: {
|
|
179
|
+
rows: 2,
|
|
180
|
+
},
|
|
181
|
+
description:
|
|
182
|
+
'Text that comes AFTER the main text Provides context for AI to infer appropriate emotion. Optional but helps improve emotional accuracy (max 2000 characters).',
|
|
183
|
+
placeholder: 'I am literally bursting with happiness and I never want this feeling to end!',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
displayName: 'Emotion Preset',
|
|
187
|
+
name: 'emotionPreset',
|
|
188
|
+
type: 'options',
|
|
189
|
+
displayOptions: {
|
|
190
|
+
show: {
|
|
191
|
+
resource: ['speech'],
|
|
192
|
+
operation: ['textToSpeech'],
|
|
193
|
+
model: ['ssfm-v30'],
|
|
194
|
+
emotionType: ['preset'],
|
|
195
|
+
},
|
|
196
|
+
},
|
|
197
|
+
options: [
|
|
198
|
+
{
|
|
199
|
+
name: 'Angry',
|
|
200
|
+
value: 'angry',
|
|
201
|
+
description: 'Intense, forceful expression',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
name: 'Happy',
|
|
205
|
+
value: 'happy',
|
|
206
|
+
description: 'Joyful, cheerful expression',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
name: 'Normal',
|
|
210
|
+
value: 'normal',
|
|
211
|
+
description: 'Neutral, standard tone',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
name: 'Sad',
|
|
215
|
+
value: 'sad',
|
|
216
|
+
description: 'Melancholic, somber tone',
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
name: 'Tone Down',
|
|
220
|
+
value: 'tonedown',
|
|
221
|
+
description: 'Calm, subdued delivery',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
name: 'Tone Up',
|
|
225
|
+
value: 'toneup',
|
|
226
|
+
description: 'Energetic, upbeat delivery',
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
name: 'Whisper',
|
|
230
|
+
value: 'whisper',
|
|
231
|
+
description: 'Soft, intimate speaking style',
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
default: 'normal',
|
|
235
|
+
description:
|
|
236
|
+
'Emotion preset to apply to the generated speech All 7 emotions are available across all voices. Check specific voice characteristics via the Voices resource.',
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
displayName: 'Emotion Intensity',
|
|
240
|
+
name: 'emotionIntensity',
|
|
241
|
+
type: 'number',
|
|
242
|
+
displayOptions: {
|
|
243
|
+
show: {
|
|
244
|
+
resource: ['speech'],
|
|
245
|
+
operation: ['textToSpeech'],
|
|
246
|
+
model: ['ssfm-v30'],
|
|
247
|
+
emotionType: ['preset'],
|
|
248
|
+
},
|
|
249
|
+
},
|
|
250
|
+
typeOptions: {
|
|
251
|
+
minValue: 0,
|
|
252
|
+
maxValue: 2,
|
|
253
|
+
numberPrecision: 1,
|
|
254
|
+
},
|
|
255
|
+
default: 1,
|
|
256
|
+
description:
|
|
257
|
+
'Controls the strength of emotional expression (0.0 - 2.0) 0.0=completely neutral (no emotion), 0.5=subtle hints, 1.0=standard expression (default), 1.5=strong emphasis, 2.0=maximum intensity (highly expressive)',
|
|
258
|
+
},
|
|
259
|
+
// ----------------------------------
|
|
260
|
+
// ssfm-v21 Emotion Settings
|
|
261
|
+
// ----------------------------------
|
|
262
|
+
{
|
|
263
|
+
displayName: 'Emotion Preset',
|
|
264
|
+
name: 'emotionPresetV21',
|
|
265
|
+
type: 'options',
|
|
266
|
+
displayOptions: {
|
|
267
|
+
show: {
|
|
268
|
+
resource: ['speech'],
|
|
269
|
+
operation: ['textToSpeech'],
|
|
270
|
+
model: ['ssfm-v21'],
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
options: [
|
|
274
|
+
{
|
|
275
|
+
name: 'Normal',
|
|
276
|
+
value: 'normal',
|
|
277
|
+
description: 'Neutral, standard tone',
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'Happy',
|
|
281
|
+
value: 'happy',
|
|
282
|
+
description: 'Joyful, cheerful expression',
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: 'Sad',
|
|
286
|
+
value: 'sad',
|
|
287
|
+
description: 'Melancholic, somber tone',
|
|
288
|
+
},
|
|
289
|
+
{
|
|
290
|
+
name: 'Angry',
|
|
291
|
+
value: 'angry',
|
|
292
|
+
description: 'Intense, forceful expression',
|
|
293
|
+
},
|
|
294
|
+
],
|
|
295
|
+
default: 'normal',
|
|
296
|
+
description:
|
|
297
|
+
'Emotion preset to apply (ssfm-v21) Supported emotions: normal, happy, sad, angry. Check available emotions for each voice through the /voices API.',
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
displayName: 'Emotion Intensity',
|
|
301
|
+
name: 'emotionIntensityV21',
|
|
302
|
+
type: 'number',
|
|
303
|
+
displayOptions: {
|
|
304
|
+
show: {
|
|
305
|
+
resource: ['speech'],
|
|
306
|
+
operation: ['textToSpeech'],
|
|
307
|
+
model: ['ssfm-v21'],
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
typeOptions: {
|
|
311
|
+
minValue: 0,
|
|
312
|
+
maxValue: 2,
|
|
313
|
+
numberPrecision: 1,
|
|
314
|
+
},
|
|
315
|
+
default: 1,
|
|
316
|
+
description:
|
|
317
|
+
'Controls the strength of emotional expression (0.0 - 2.0) 0.0=completely neutral, 1.0=standard expression (default), 2.0=maximum intensity',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
displayName: 'Additional Options',
|
|
321
|
+
name: 'additionalOptions',
|
|
322
|
+
type: 'collection',
|
|
323
|
+
placeholder: 'Add Option',
|
|
324
|
+
default: {},
|
|
325
|
+
displayOptions: {
|
|
326
|
+
show: {
|
|
327
|
+
resource: ['speech'],
|
|
328
|
+
operation: ['textToSpeech'],
|
|
329
|
+
},
|
|
330
|
+
},
|
|
331
|
+
options: [
|
|
332
|
+
{
|
|
333
|
+
displayName: 'Audio Format',
|
|
334
|
+
name: 'audioFormat',
|
|
335
|
+
type: 'options',
|
|
336
|
+
options: [
|
|
337
|
+
{
|
|
338
|
+
name: 'MP3',
|
|
339
|
+
value: 'mp3',
|
|
340
|
+
description: 'MPEG Layer III, 320 kbps, smaller file size - ideal for web streaming',
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
name: 'WAV',
|
|
344
|
+
value: 'wav',
|
|
345
|
+
description:
|
|
346
|
+
'PCM Uncompressed, 16-bit, higher quality - suitable for professional production',
|
|
347
|
+
},
|
|
348
|
+
],
|
|
349
|
+
default: 'wav',
|
|
350
|
+
description:
|
|
351
|
+
'Output audio format WAV: uncompressed 16-bit PCM, mono, 44.1kHz. MP3: 320 kbps, mono, 44.1kHz.',
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
displayName: 'Audio Pitch',
|
|
355
|
+
name: 'audioPitch',
|
|
356
|
+
type: 'number',
|
|
357
|
+
typeOptions: {
|
|
358
|
+
minValue: -12,
|
|
359
|
+
maxValue: 12,
|
|
360
|
+
},
|
|
361
|
+
default: 0,
|
|
362
|
+
description:
|
|
363
|
+
'Pitch adjustment in semitones (-12 to +12) -12 (one octave down) to +12 (one octave up). Default: 0 (no adjustment).',
|
|
364
|
+
},
|
|
365
|
+
{
|
|
366
|
+
displayName: 'Audio Tempo',
|
|
367
|
+
name: 'audioTempo',
|
|
368
|
+
type: 'number',
|
|
369
|
+
typeOptions: {
|
|
370
|
+
minValue: 0.5,
|
|
371
|
+
maxValue: 2,
|
|
372
|
+
numberPrecision: 1,
|
|
373
|
+
},
|
|
374
|
+
default: 1,
|
|
375
|
+
description:
|
|
376
|
+
'Speed of speech playback (0.5x to 2.0x) 0.5x (half speed) to 2.0x (double speed). Default: 1.0 (normal speed).',
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
displayName: 'Binary Property',
|
|
380
|
+
name: 'binaryProperty',
|
|
381
|
+
type: 'string',
|
|
382
|
+
default: 'data',
|
|
383
|
+
description:
|
|
384
|
+
'Name of the binary property to store the generated audio file Default: "data" (recommended for most cases). Use this name to reference the audio in subsequent nodes (e.g., Save to File, Send Email). Only change if you need to handle multiple audio files in the same workflow (e.g., "narration", "background_music").',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
displayName: 'Language',
|
|
388
|
+
name: 'language',
|
|
389
|
+
type: 'options',
|
|
390
|
+
options: [
|
|
391
|
+
{
|
|
392
|
+
name: 'Arabic',
|
|
393
|
+
value: 'ara',
|
|
394
|
+
},
|
|
395
|
+
{
|
|
396
|
+
name: 'Auto-Detect',
|
|
397
|
+
value: '',
|
|
398
|
+
},
|
|
399
|
+
{
|
|
400
|
+
name: 'Bengali',
|
|
401
|
+
value: 'ben',
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
name: 'Bulgarian',
|
|
405
|
+
value: 'bul',
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
name: 'Cantonese',
|
|
409
|
+
value: 'yue',
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
name: 'Chinese (Mandarin)',
|
|
413
|
+
value: 'zho',
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
name: 'Croatian',
|
|
417
|
+
value: 'hrv',
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
name: 'Czech',
|
|
421
|
+
value: 'ces',
|
|
422
|
+
},
|
|
423
|
+
{
|
|
424
|
+
name: 'Danish',
|
|
425
|
+
value: 'dan',
|
|
426
|
+
},
|
|
427
|
+
{
|
|
428
|
+
name: 'Dutch',
|
|
429
|
+
value: 'nld',
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
name: 'English',
|
|
433
|
+
value: 'eng',
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
name: 'Finnish',
|
|
437
|
+
value: 'fin',
|
|
438
|
+
},
|
|
439
|
+
{
|
|
440
|
+
name: 'French',
|
|
441
|
+
value: 'fra',
|
|
442
|
+
},
|
|
443
|
+
{
|
|
444
|
+
name: 'German',
|
|
445
|
+
value: 'deu',
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
name: 'Greek',
|
|
449
|
+
value: 'ell',
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
name: 'Hindi',
|
|
453
|
+
value: 'hin',
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
name: 'Hungarian',
|
|
457
|
+
value: 'hun',
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
name: 'Indonesian',
|
|
461
|
+
value: 'ind',
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
name: 'Italian',
|
|
465
|
+
value: 'ita',
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
name: 'Japanese',
|
|
469
|
+
value: 'jpn',
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
name: 'Korean',
|
|
473
|
+
value: 'kor',
|
|
474
|
+
},
|
|
475
|
+
{
|
|
476
|
+
name: 'Malay',
|
|
477
|
+
value: 'msa',
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
name: 'Min Nan',
|
|
481
|
+
value: 'nan',
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
name: 'Norwegian',
|
|
485
|
+
value: 'nor',
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
name: 'Polish',
|
|
489
|
+
value: 'pol',
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
name: 'Portuguese',
|
|
493
|
+
value: 'por',
|
|
494
|
+
},
|
|
495
|
+
{
|
|
496
|
+
name: 'Punjabi',
|
|
497
|
+
value: 'pan',
|
|
498
|
+
},
|
|
499
|
+
{
|
|
500
|
+
name: 'Romanian',
|
|
501
|
+
value: 'ron',
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
name: 'Russian',
|
|
505
|
+
value: 'rus',
|
|
506
|
+
},
|
|
507
|
+
{
|
|
508
|
+
name: 'Slovak',
|
|
509
|
+
value: 'slk',
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
name: 'Spanish',
|
|
513
|
+
value: 'spa',
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
name: 'Swedish',
|
|
517
|
+
value: 'swe',
|
|
518
|
+
},
|
|
519
|
+
{
|
|
520
|
+
name: 'Tagalog',
|
|
521
|
+
value: 'tgl',
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
name: 'Tamil',
|
|
525
|
+
value: 'tam',
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
name: 'Thai',
|
|
529
|
+
value: 'tha',
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
name: 'Turkish',
|
|
533
|
+
value: 'tur',
|
|
534
|
+
},
|
|
535
|
+
{
|
|
536
|
+
name: 'Ukrainian',
|
|
537
|
+
value: 'ukr',
|
|
538
|
+
},
|
|
539
|
+
{
|
|
540
|
+
name: 'Vietnamese',
|
|
541
|
+
value: 'vie',
|
|
542
|
+
},
|
|
543
|
+
],
|
|
544
|
+
default: '',
|
|
545
|
+
description:
|
|
546
|
+
'Language code following ISO 639-3 standard Case-insensitive (both "ENG" and "eng" are accepted). If not provided, language will be auto-detected based on text content. ssfm-v30 supports 37 languages, ssfm-v21 supports 27 languages.',
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
displayName: 'Seed',
|
|
550
|
+
name: 'seed',
|
|
551
|
+
type: 'number',
|
|
552
|
+
default: 42,
|
|
553
|
+
description:
|
|
554
|
+
'Random seed for controlling speech generation variations Use any integer value. Using the same seed with identical parameters will produce consistent results, useful for reproducibility.',
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
displayName: 'Volume',
|
|
558
|
+
name: 'volume',
|
|
559
|
+
type: 'number',
|
|
560
|
+
typeOptions: {
|
|
561
|
+
minValue: 0,
|
|
562
|
+
maxValue: 200,
|
|
563
|
+
},
|
|
564
|
+
default: 100,
|
|
565
|
+
description:
|
|
566
|
+
'Audio output volume level (0 - 200) 0 (silent) to 200 (maximum). Default: 100 (normal volume). Values above 100 may cause distortion.',
|
|
567
|
+
},
|
|
568
|
+
],
|
|
569
|
+
},
|
|
235
570
|
];
|