fish-audio
Skill0 starsChanged 4 months agoApache-2.0View on GitHub
Create account-owned Fish Audio voice resources, attempt to reuse their IDs, or generate MP3/WAV speech through RunAPI. Use for voice resource management, one-off speech generation, or application integration. Prefer the RunAPI CLI for one-off requests and the target-language SDK for production integration.
- Reads credentials
4 other projects use a version of this.
Adopted by
Most recently taken up by
- YOSSII812001/claude-code-jarvistheir own version, first seen Oct 9, 2026
- AceDataCloud/Skillstheir own version, first seen Oct 6, 2026
- vellum-ai/vellum-assistanttheir own version, first seen Jul 8, 2026
- refly-ai/refly-skillstheir own version, first seen Jan 25, 2026
Other versions4 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 4
- vellum-ai/vellum-assistant★ 1.5ksame name
- refly-ai/refly-skills★ 204same name
- AceDataCloud/Skills★ 17same name
- YOSSII812001/claude-code-jarvis★ 1same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
5 rules. 0 are common, 1 is distinctive, and 4 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 47
Create request.json as valid JSON using only fields accepted by the discovered operation contract.
- Very specific: line 55
Use a voice only after its state is trained.
- Very specific: line 75
Do not add --async or call runapi wait.
- Very specific: line 94
Do not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type.
- Distinctive: line 101
If the contract is missing a fact required to build or verify the request, stop and report the contract gap.
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Fish Audio on RunAPI
Choose route
- For a one-off artifact or result, use the registered
fish-audioservice in therunapiCLI. If the installed command catalog does not list it, stop and report the missing service instead of inventing a command. - For an app, backend, worker, library, webhook pipeline, or production codebase, go directly to Integrate with SDK. Never shell out to the CLI as the production runtime.
Discover contract
Authenticate, then inspect the installed command catalog and the selected operation's current contract:
runapi auth status > auth.json
jq -e '.authenticated == true' auth.json
runapi fish-audio --help
runapi fish-audio <operation> --help
curl --fail --location https://runapi.ai/docs/api/fish-audio/<operation>.md --output contract.mdIf authentication is false, stop before submitting. Ask the user to provide a valid RUNAPI_API_KEY, or import a user-provided key from stdin with runapi auth import-token --token -; use interactive browser login only when the user explicitly requests it. Choose <operation> only from service help. Treat command help as authoritative for the installed operation, model, and top-level field roster. Treat its API Reference as authoritative for the complete request schema, nested fields, conditional rules, task behavior, and response variants. If the two surfaces disagree, stop and report the contract mismatch instead of guessing.
Build request
Create request.json as valid JSON using only fields accepted by the discovered operation contract. For the chosen model and values, evaluate every applicable conditional rule as a set: satisfy every required field, omit every forbidden field, and stop on unresolved contradictions.
Traverse nested objects and arrays before execution. Close every relationship stated by the discovered contract, including uniqueness constraints and cross-references between nested values.
For a discovered local media input, including file-typed fields and top-level media URL fields, put an agent-readable local file path directly in request.json. The CLI consumes file fields as declared and uploads local paths in top-level media URL fields. Use runapi files create only when the user needs a reusable URL, provides Base64, or the discovered contract explicitly requires a separate upload.
Semantic invariants:
- For voice resources, select
create-voice,list-voices, orget-voicefrom service help. Create requiresnameandsource_audio_url; get requires the RunAPIvoice_id; list accepts optionalpage_numberandpage_size. - Use a voice only after its state is
trained; a returnedvoice_idis a best-effort reference and may stop working later. - The
referencesaccepted bytext-to-speechapply only to the current request; they do not create a voice resource. - For s1, s2-pro, and s2.1-pro, use at most one reference with a publicly accessible HTTPS audio URL and its nonempty verbatim transcript; never combine references with voice_id.
- Upload local audio or Base64 with POST /api/v1/files first and use its returned url in references[0].audio. Files URLs expire by default after one hour and must remain valid during queueing and audio fetching; private reference storage does not extend their lifetime. For longer waits use an external HTTPS URL with enough validity, or upload again and submit a new request after expiry.
- This version has no update, delete, revoke, or voice-library management operations. Do not assume a voice ID remains available or make claims about how source audio is used for training.
Validate the file before sending it:
jq empty request.jsonExecute
Submit exactly once and save the complete synchronous response:
runapi fish-audio <operation> --input-file request.json > result.outDo not add --async or call runapi wait. The operation completes in this response; preserve its exact JSON, text, subtitle, or other discovered response format.
Verify
A success status is not the deliverable. Read and validate the complete response according to the discovered result contract. Preserve the complete non-media result in the exact requested format, including JSON, text, SRT, or VTT.
For every requested media deliverable listed anywhere in the response, download all of them rather than returning only the first URL. Before downloading, derive its expected MIME type or family from response metadata when present, then the selected output format, then an unambiguous result field such as videos, images, or audios in the API Reference. The Catalog-declared fallback families for this skill are audio/*. Stop only when no single expected type or family can be established from those sources.
For every downloaded file, require both a non-empty file and the expected MIME type or family:
curl --fail --location <deliverable-url> --output <downloaded-file>
for file in <downloaded-files>; do
expected_mime=<expected-MIME-or-family-pattern-for-this-file>
test -s "$file"
[[ "$(file --brief --mime-type "$file")" == $expected_mime ]]
doneDo not report completion when any requested deliverable is missing, empty, or has an unexpected MIME type. Record Skill Conformance separately from Task Outcome so a service failure does not hide whether this recipe was followed.
Recover or stop
- Correct a request shape at most once, and only when the discovered contract or returned validation error identifies the correction.
- Retry a transient transport failure at most once, and only when evidence confirms that no task was created, no billing occurred, and retrying is safe.
- On a terminal RunAPI or service failure, preserve the task/error evidence and stop. Keep the selected model and capability, and do not submit another paid request without user authorization.
- If the contract is missing a fact required to build or verify the request, stop and report the contract gap. Do not turn a product defect into a permanent skill workaround.
Integrate with SDK
Use this route only for application or production-code integration. Open the current RunAPI SDK reference below, select the package for the target language and Fish Audio, and confirm its install command, client methods, request types, response types, and error classes before coding. Build the request from the same discovered product contract and apply the same deliverable verification and stop rules. Do not invoke runapi as a subprocess from production code.
References
- Model overview, pricing, and rate limits: https://runapi.ai/models/fish-audio.md
- Provider overview: https://runapi.ai/providers/fish-audio.md
- Full model catalog: https://runapi.ai/models.md
- SDK integration: https://github.com/runapi-ai/fish-audio-sdk
Variants
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

