@openclaw/fish-audio-speech 2026.10.5-beta.3 → 2026.10.10-beta.1
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 +6 -1
- package/dist/index.js +1 -1
- package/dist/speech-provider.js +4 -8
- package/dist/tts.js +8 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Fish Audio speech plugin
|
|
2
2
|
|
|
3
|
-
Official OpenClaw speech provider for Fish Audio's hosted S2.1
|
|
3
|
+
Official OpenClaw speech provider for Fish Audio's hosted S2.1 and Drama 3 APIs.
|
|
4
4
|
|
|
5
5
|
Install it with:
|
|
6
6
|
|
|
@@ -13,5 +13,10 @@ remain `fish-audio`. Configure `tts.provider: "fish-audio"` and set
|
|
|
13
13
|
`FISH_API_KEY`. The provider supports buffered audio, HTTP-streamed playback,
|
|
14
14
|
native Opus voice notes, 8 kHz PCM telephony, and Fish Audio voice discovery.
|
|
15
15
|
|
|
16
|
+
Set `tts.providers.fish-audio.model: "drama-3-preview"` to opt in to Drama 3
|
|
17
|
+
voice direction. The default remains `s2.1-pro`. Natural-language directions
|
|
18
|
+
such as `[calm, reassuring]` and paired tags such as `<whisper>...</whisper>`
|
|
19
|
+
are passed through in the spoken text.
|
|
20
|
+
|
|
16
21
|
See [Fish Audio](https://docs.openclaw.ai/providers/fish-audio) for setup,
|
|
17
22
|
models, voice selection, expressive tags, and local macOS MLX usage.
|
package/dist/index.js
CHANGED
|
@@ -4,7 +4,7 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
|
|
4
4
|
var fish_audio_speech_default = definePluginEntry({
|
|
5
5
|
id: "fish-audio-speech",
|
|
6
6
|
name: "Fish Audio Speech",
|
|
7
|
-
description: "Hosted Fish Audio
|
|
7
|
+
description: "Hosted Fish Audio text-to-speech provider",
|
|
8
8
|
register(api) {
|
|
9
9
|
api.registerSpeechProvider(buildFishAudioSpeechProvider());
|
|
10
10
|
}
|
package/dist/speech-provider.js
CHANGED
|
@@ -1,14 +1,8 @@
|
|
|
1
|
-
import { fishAudioTts, fishAudioTtsStream, listFishAudioVoices, normalizeFishAudioBaseUrl } from "./tts.js";
|
|
1
|
+
import { FISH_AUDIO_MODELS, fishAudioTts, fishAudioTtsStream, listFishAudioVoices, normalizeFishAudioBaseUrl } from "./tts.js";
|
|
2
2
|
import { normalizeResolvedSecretInputString } from "openclaw/plugin-sdk/secret-input";
|
|
3
3
|
import { MAX_AUDIO_BYTES, parseSpeechDirectiveNumberOverride, resolveSpeechProviderApiKey } from "openclaw/plugin-sdk/speech-provider";
|
|
4
4
|
import { asBoolean, asFiniteNumberInRange, asOptionalRecord, filterStringRecord, normalizeOptionalString, parseBooleanValue } from "openclaw/plugin-sdk/string-coerce-runtime";
|
|
5
5
|
//#region extensions/fish-audio-speech/speech-provider.ts
|
|
6
|
-
const FISH_AUDIO_MODELS = [
|
|
7
|
-
"s2.1-pro-free",
|
|
8
|
-
"s2.1-pro",
|
|
9
|
-
"s2-pro",
|
|
10
|
-
"s1"
|
|
11
|
-
];
|
|
12
6
|
const DEFAULT_MODEL = "s2.1-pro";
|
|
13
7
|
const DEFAULT_LATENCY = "balanced";
|
|
14
8
|
const DEFAULT_TIMEOUT_MS = 24e4;
|
|
@@ -223,6 +217,7 @@ async function resolveSynthesisRequest(req) {
|
|
|
223
217
|
};
|
|
224
218
|
}
|
|
225
219
|
function buildFishAudioSpeechProvider() {
|
|
220
|
+
const isConfigured = ({ providerConfig }) => Boolean(resolveApiKey(readProviderConfig(providerConfig).apiKey));
|
|
226
221
|
return {
|
|
227
222
|
id: "fish-audio",
|
|
228
223
|
label: "Fish Audio",
|
|
@@ -277,7 +272,8 @@ function buildFishAudioSpeechProvider() {
|
|
|
277
272
|
timeoutMs: req.timeoutMs ?? DEFAULT_TIMEOUT_MS
|
|
278
273
|
});
|
|
279
274
|
},
|
|
280
|
-
isConfigured
|
|
275
|
+
isConfigured,
|
|
276
|
+
isConfiguredAsync: async (ctx) => isConfigured(ctx),
|
|
281
277
|
synthesize: async (req) => {
|
|
282
278
|
const params = await resolveSynthesisRequest(req);
|
|
283
279
|
return {
|
package/dist/tts.js
CHANGED
|
@@ -4,6 +4,13 @@ const FISH_AUDIO_BASE_URL = "https://api.fish.audio";
|
|
|
4
4
|
const FISH_AUDIO_VOICES_MAX_BYTES = 2097152;
|
|
5
5
|
const FISH_AUDIO_VOICE_PAGE_SIZE = 100;
|
|
6
6
|
const FISH_AUDIO_MAX_OWN_VOICE_PAGES = 20;
|
|
7
|
+
const FISH_AUDIO_MODELS = [
|
|
8
|
+
"drama-3-preview",
|
|
9
|
+
"s2.1-pro-free",
|
|
10
|
+
"s2.1-pro",
|
|
11
|
+
"s2-pro",
|
|
12
|
+
"s1"
|
|
13
|
+
];
|
|
7
14
|
function normalizeFishAudioBaseUrl(value) {
|
|
8
15
|
const trimmed = value?.trim();
|
|
9
16
|
return trimmed ? trimmed.replace(/\/+$/u, "") : FISH_AUDIO_BASE_URL;
|
|
@@ -141,4 +148,4 @@ async function listFishAudioVoices(params) {
|
|
|
141
148
|
});
|
|
142
149
|
}
|
|
143
150
|
//#endregion
|
|
144
|
-
export { fishAudioTts, fishAudioTtsStream, listFishAudioVoices, normalizeFishAudioBaseUrl };
|
|
151
|
+
export { FISH_AUDIO_MODELS, fishAudioTts, fishAudioTtsStream, listFishAudioVoices, normalizeFishAudioBaseUrl };
|
package/openclaw.plugin.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"onStartup": false
|
|
12
12
|
},
|
|
13
13
|
"name": "Fish Audio",
|
|
14
|
-
"description": "Fish Audio
|
|
14
|
+
"description": "Fish Audio hosted text-to-speech with streaming, voice notes, and telephony output.",
|
|
15
15
|
"setup": {
|
|
16
16
|
"providers": [
|
|
17
17
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openclaw/fish-audio-speech",
|
|
3
|
-
"version": "2026.10.
|
|
3
|
+
"version": "2026.10.10-beta.1",
|
|
4
4
|
"description": "OpenClaw Fish Audio speech plugin.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"minHostVersion": ">=2026.7.2"
|
|
19
19
|
},
|
|
20
20
|
"compat": {
|
|
21
|
-
"pluginApi": ">=2026.10.
|
|
21
|
+
"pluginApi": ">=2026.10.10-beta.1"
|
|
22
22
|
},
|
|
23
23
|
"build": {
|
|
24
|
-
"openclawVersion": "2026.10.
|
|
24
|
+
"openclawVersion": "2026.10.10-beta.1",
|
|
25
25
|
"bundledDist": false
|
|
26
26
|
},
|
|
27
27
|
"release": {
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"assets/activity.svg"
|
|
41
41
|
],
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"openclaw": ">=2026.10.
|
|
43
|
+
"openclaw": ">=2026.10.10-beta.1"
|
|
44
44
|
},
|
|
45
45
|
"peerDependenciesMeta": {
|
|
46
46
|
"openclaw": {
|