
SonicCraft
io.github.user-github-me由 GitHub 账号 user-github-me 发布v0.1.0更新于 Oct 27, 2026
Compile timelines of TTS speech, music and SFX into ducked, loudness-mastered audio with subtitles
发布方自己的服务:Craft
概览
把 YAML/JSON 音频时间线编译成 TTS 语音、音乐与音效,并做闪避、响度母带处理和配套字幕。
- 可以做什么
- 校验时间线并报告错误、警告与修复提示
- 试运行时间线,查看排布、闪避区间与待合成字符数,不调用付费接口
- 渲染母带音频,并导出字幕、分轨、清单与 HTML 预览
- 读取时间线 DSL 的 schema 与速查说明
- 列出 TTS 提供方及其可用性、凭据状态,以及某个提供方的音色
- 适用场景
- 适合让助手根据脚本产出旁白、播客、讲解或音效设计音频,需要可靠的时间对齐、音乐闪避、响度目标和字幕,而不想手写 ffmpeg 滤镜图时使用。
- 运行要求
- 以 stdio 本地运行:soniccraft CLI、soniccraft-mcp 可执行文件、Node.js 20 以上时的 npx soniccraft-mcp,或已发布的容器镜像。云端音色需要 CARTESIA_API_KEY、ELEVENLABS_API_KEY 或 OPENAI_API_KEY;本地 Kokoro、Piper、macOS say 或模拟音色无需密钥。输出 ogg、opus、m4a 时可选装 ffmpeg。
安装
在 SourceWeft 中
- 打开 控制台中的 SonicCraft,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
SonicCraft
A declarative, deterministic audio engine for AI agents. Describe a production as a YAML (or JSON) timeline: who says what, in which order, over which music, at what loudness. SonicCraft compiles it into TTS speech, music beds and sound effects, mixed with sidechain ducking, mastered to an EBU R128 loudness target, plus WebVTT/SRT subtitles that match the audio it actually rendered. It ships as a CLI, an MCP server and an Agent Skill.
[CI] [License: MIT OR Apache-2.0] [crates.io] [SonicCraft MCP on mcprush]
Website · Quickstart · Use it from an AI agent · MCP server · Agent Skill
Use it from an AI agent
Give an agent (Claude Code, Codex, Cursor, Gemini CLI, ...) the link to this repository and ask for audio, for example "Use https://github.com/user-github-me/soniccraft to make a 30-second voiceover with background music for my product video." Everything it needs is below and in AGENTS.md.
-
Install the CLI (prebuilt and checksum-verified, no Rust needed). Homebrew, Scoop, Docker and Cargo work too: see Quickstart.
-
Write a timeline.
soniccraft init my-audiostarts one that renders offline: macOS voices on a Mac, elsewhere a mock test voice (not real speech). Real voices anywhere: Kokoro or Piper (free, local) or an ElevenLabs, OpenAI or Cartesia key, see Providers.soniccraft init --listshows the templates,soniccraft providersthe voices usable here, andsoniccraft schemathe JSON Schema; the Agent Skill explains the format. -
Check it, see the cost, render it:
To keep SonicCraft in an agent for good, add the skill and the MCP server. Both use the CLI from step 1; with
Node.js 20 or newer the MCP server also runs with nothing installed: use npx -y soniccraft-mcp in place of
soniccraft mcp below.
The server is also in the official MCP Registry as
io.github.user-github-me/soniccraft (container image). Details: MCP server and
Agent Skill.
Why
Ask an agent for a two-voice explainer with background music and it will usually hand-write an ffmpeg
filter graph: adelay offsets computed from guessed speech lengths, an amix, perhaps a half-remembered
sidechaincompress. That fails in predictable ways:
- Timing drift and overlaps. Synthesized speech is never exactly as long as the agent guessed, so lines collide or leave dead air, and every script edit shifts every later offset.
- No ducking. Sidechain compression is fiddly to get right in a filter graph, so the music either drowns the voice or sits uniformly too low.
- Loudness disparity. Different providers and voices come out at different levels. Nothing measures integrated loudness or true peak, so the result is uneven and can clip.
- Drifting subtitles. Captions are written from estimated times instead of from the audio that was rendered.
- Opaque, expensive iteration. A broken graph is a cryptic ffmpeg error, and every retry re-bills every TTS call.
How SonicCraft works
HyperFrames showed that agents make better video when they write declarative HTML and a deterministic renderer does the frame-accurate work. SonicCraft applies the same idea to audio. The agent writes intent as data; a compiler validates it, measures the real durations, resolves all timing in integer sample frames, and renders natively in Rust. The same timeline, TTS cache and binary always produce byte-identical audio, subtitles and manifests.
This is examples/tech-briefing/timeline.yaml. Here is what
soniccraft render does with it:
- Validates everything at once. Unknown keys, misspelled enum values, dangling anchors, missing voices, missing files and missing API keys are all reported together, each with a stable code, a path, a line and column, and a fix hint.
- Synthesizes and caches.
cue_01andcue_03go to ElevenLabs (with word timestamps);cue_02goes to a local Kokoro-FastAPI server (local_kokorois an alias of the built-inkokoroprovider). Each result is cached by a content hash, so later renders only pay for lines that changed. - Levels the voices. Each cue is trimmed of leading and trailing silence and normalized to -20 LUFS, so the cloud voice and the local voice sit at the same level.
- Lays out the timeline in sample frames.
cue_01starts at 0.cue_02starts 150 ms aftercue_01ends.cue_03is sequential, 350 ms aftercue_01, but that slot collides withcue_02, so the default overlap policy (push) automatically movescue_03to 350 ms aftercue_02ends, keeping its pause as the gap, and reports an infocue_pushed. The result is a natural three-turn exchange with no timing arithmetic by the agent. - Places the music. The bed is a looping clip without a length, so it runs to the end of the timeline
with a 1.2 s fade-in; the timeline ends 2.5 s after the last word (the bed's
fade_out_ms) and the bed fades out over exactly that tail. The whoosh fires at 0. - Ducks the bed by 18 dB whenever either voice speaks. Detection runs on the voices' own signal with an 80 ms lookahead (it defaults to the attack time), so the bed is already down when the first syllable lands; it recovers over 350 ms, and the default 250 ms hold bridges the 150 ms turn gap.
- Pans the two voices to -0.15 and +0.15 (constant power).
- Masters the mix to -16 LUFS integrated with a -1.0 dBTP true-peak ceiling (from the default
podcastpreset), iterating loudness gain and a 4× oversampled true-peak limiter until within 0.2 LU (the closest pass is kept andloudness_target_missedsays by how much when no pass gets there; an unreachable target gives the loudest master within 6 dB of average limiting, whatever the target). - Encodes a 48 kHz, 320 kbps MP3 natively, decodes and measures the delivered file (re-limiting if the
codec pushed a peak over the ceiling), and writes
timeline.vttandtimeline.srtfrom the placed word timings, labellednarratorandguest.
Before spending anything, soniccraft plan (alias dry-run) shows the same layout from estimated
durations without calling a TTS API (abridged JSON, estimated numbers):
Features
- Timeline DSL v1.0 in YAML or JSON with a published JSON Schema. Strict validation: unknown keys are errors with did-you-mean hints; every problem is reported at once with a stable code, path, line/column and a mechanical fix.
- Timing without arithmetic: sequential cues and pauses, absolute starts, and relative anchors
(
after_cue,with_cue,before_cue, with signed offsets) on cues, clips or whole tracks. Speech overlaps are pushed apart automatically (or warned about, rejected, or allowed per cue for crosstalk). - Eight TTS providers: ElevenLabs, any OpenAI-compatible
/audio/speechserver, Cartesia, Kokoro (Kokoro-FastAPI), Piper, macOSsay, any local command, and a deterministic mock voice. Mix them freely in one timeline. Speakers registry with layered voice settings. - Cheap iteration: a content-addressed TTS cache, dry runs that never call paid APIs (with estimated durations and per-provider character counts), bounded concurrency and retries with backoff.
- Music and sound effects: loops (seamless, or with loop crossfades), trims, fades with three curves, crossfades between clips, open-ended beds that end with an automatic fade-out tail.
- Sidechain ducking driven by the actual speech signal (or by the timeline), with attack, release, hold and lookahead.
- Loudness done properly: per-source BS.1770 normalization, then master normalization to a preset (podcast -16, streaming -14, EBU R128 broadcast -23, ATSC A/85 -24 LUFS) and an oversampled true-peak limiter. Lossy outputs are decoded and measured as delivered, with codec true-peak and loudness-drift compensation.
- Native DSP and encoders: wav, mp3 and flac with no ffmpeg; ogg, opus and m4a through ffmpeg when it is installed. 16/24-bit integer or 32-bit float, fixed-seed TPDF dither.
- Subtitles from the rendered audio: WebVTT, SRT, JSON with per-word timestamps, and a HyperFrames-compatible transcript; speaker labels; per-cue caption overrides.
- Side files: per-track stems, a deterministic manifest, and a self-contained HTML preview with the waveform, ducking envelopes and captions.
- Agent surfaces: machine-readable
--jsonreports fromvalidate,plan,render,providersandvoices, an MCP server that speaks both protocol eras, an Agent Skill, and a Claude Code plugin.
Quickstart
Install a prebuilt binary (checksum-verified; no Rust or C toolchain needed):
With Rust: cargo binstall soniccraft downloads the same release binary, and cargo install --locked soniccraft
builds it from crates.io (requirements below).
From source. Requirements: Rust 1.89 or newer (rustup) and a C toolchain for the bundled LAME MP3
encoder (cc and make: Xcode Command Line Tools on macOS, build-essential on Linux; on Windows, the
Visual Studio Build Tools, plus AWS_LC_SYS_PREBUILT_NASM=1 in the environment unless NASM is installed).
ffmpeg is optional (ogg/opus/m4a output, extra input formats). Prebuilt binaries need none of this: see
below.
--locked builds with the dependency versions in Cargo.lock, the ones CI tests.
Prebuilt binaries. Each GitHub release has archives for
Linux (x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu; glibc 2.35 or newer), macOS
(aarch64-apple-darwin, x86_64-apple-darwin; macOS 11 or newer) and Windows (x86_64-pc-windows-msvc).
soniccraft-v<version>-<target>.tar.gz (.zip for Windows) holds soniccraft, soniccraft-mcp, the
license texts and THIRD-PARTY-LICENSES.txt. The -no-mp3 archives leave out the LGPL MP3 encoder; mp3
output then needs ffmpeg. Check a download with sha256sum --check --ignore-missing SHA256SUMS (on macOS:
shasum -a 256 --check --ignore-missing SHA256SUMS). The binaries are not notarized: on macOS a browser
download is quarantined; clear it with xattr -d com.apple.quarantine soniccraft soniccraft-mcp (curl and the
npm launcher do not set the attribute).
Container image. Each release is also published as
ghcr.io/user-github-me/soniccraft
(linux/amd64 and linux/arm64, with ffmpeg for ogg, opus and m4a output):
Files written to the mounted directory belong to uid 1000; add --user "$(id -u):$(id -g)" to write them as
yourself. Pass API keys with -e ELEVENLABS_API_KEY (never in the timeline). macOS say is not available in
the container: use the mock voice, a cloud provider or a local server. docker build -t soniccraft . builds the
same image from source.
Render the demo with zero API keys:
The macOS run writes examples/offline-demo/offline-demo.wav with .vtt, .srt, .words.json and
.transcript.json subtitles, a .manifest.json, and offline-demo.preview.html (open it in a browser to
see the waveform, the ducking envelope and the captions). The full loop an agent follows:
With API keys and a local Kokoro server, render the README timeline:
Start your own project from a template (writes the timeline and generated stand-ins for its audio assets):
CLI
Exit codes: 0 success, 1 timeline invalid (error diagnostics), 2 usage error, 3 runtime or render
failure, 130 interrupted. With --json, stdout contains exactly one JSON document (the report, or
{"message", "diagnostics", "hint"} when the command fails, usage errors included); progress and logs go to
stderr. A render stopped by its environment or options (a missing key, a provider that cannot run, a voice
that is not installed, the memory budget) also exits 1 and ends with error: render stopped: N errors.
Timelines (files, FIFOs, - for stdin) are read up to the 5 MB document limit and no further. Run
soniccraft <command> --help for every option.
MCP server
soniccraft mcp serves the engine over stdio (newline-delimited JSON-RPC 2.0); soniccraft-mcp is the
same server as a zero-argument binary. It supports both MCP protocol eras: the initialize handshake
(2024-11-05 through 2025-11-25, used by Codex and Cursor) and the stateless 2026-07-28 revision with
server/discover (which Claude Code probes first).
Reports are returned as structuredContent (mirrored as JSON text, plus a short summary). Long timelines
get a compact report by default (detail: "auto") so the result stays readable in an agent's context; pass
detail: "full" for every item. Renders add resource_link blocks with file:// URIs for the audio and side
files (sessions on protocol revisions before 2025-06-18 get the files as text instead); audio is never inlined
as base64. format overrides the timeline's output.format (pass it with an output_path whose extension
names another format). For mp3/ogg/opus/m4a, the report's loudness describes the delivered file
(loudness.pre_encode has the master's). An invalid timeline is a successful validate/dry-run call
(valid: false); a failed render or a bad argument returns isError: true with what to fix, so the agent
can repair and retry. Relative paths resolve against base_dir, else soniccraft mcp --base-dir, else
CLAUDE_PROJECT_DIR, else the server's working directory. Long renders report notifications/progress and
honour cancellation; at most two run at once (SONICCRAFT_MCP_MAX_RENDERS). Each render may use up to
SONICCRAFT_MAX_RENDER_GB of memory (default 8 GB), so the server's peak can reach their product (16 GB by
default); lower either on small machines. Timelines run command providers only when the server is started
with soniccraft mcp --allow-command (see Security). Tool arguments and report shapes:
skills/soniccraft/reference/mcp-tools.md.
Claude Code
Or in a project's .mcp.json (timeout is the per-call limit in milliseconds). A stdio server inherits the
environment Claude Code runs in, so exported API keys reach it without an env block:
Do not add "env": {"ELEVENLABS_API_KEY": "${ELEVENLABS_API_KEY}"}: when the variable is unset, the client
passes the literal text ${ELEVENLABS_API_KEY}. SonicCraft treats such a placeholder as a missing key and
says so (missing_credentials); if you need an env entry, write "${ELEVENLABS_API_KEY:-}".
Without installing Rust, through npm (Node.js 20 or newer): the soniccraft-mcp
package uses soniccraft from PATH when there is one; otherwise it downloads the prebuilt release for your
platform on first use and verifies it against SHA-256 checksums pinned in the package. Each version on npm is
the release's soniccraft-mcp-X.Y.Z.tgz asset, published from GitHub Actions with
provenance.
Arguments after the package name go to soniccraft mcp (for example --base-dir);
packages/soniccraft-mcp/README.md covers platforms, environment
variables, proxies and offline installs. The same npx form works in the Cursor and Codex configurations
below (command npx, args ["-y", "soniccraft-mcp"]).
Cursor: ~/.cursor/mcp.json (global) or .cursor/mcp.json (project):
In a project-level file you can add "CLAUDE_PROJECT_DIR": "${workspaceFolder}" to env so relative paths
in tool calls resolve against the workspace. If a key variable is unset and the client passes the
placeholder text through, SonicCraft reports the key as missing instead of sending the placeholder.
Codex
Then raise the tool timeout in ~/.codex/config.toml (Codex defaults to 60 s; renders can take longer),
forward the API keys you use, and decide how the render tool is approved:
soniccraft_render writes files, so Codex asks before running it. Interactive sessions prompt for approval;
non-interactive codex exec (approval policy never) fails the call with "MCP tool call requires approval"
unless the server entry approves it: default_tools_approval_mode = "approve" for every SonicCraft tool, or
only the render tool with
For a single run: codex exec -c 'mcp_servers.soniccraft.default_tools_approval_mode="approve"' ....
Agent Skill
skills/soniccraft/ is an Agent Skills package:
SKILL.md (workflow, DSL essentials, duration heuristics, mixing practice, a diagnostics fix table) plus
on-demand references (full DSL reference, providers, mixing guide, every diagnostic code, MCP tools) and
five templates. It is written around the CLI, so it works in any agent, and mentions the MCP tools as an
alternative.
Or copy the directory by hand: cp -R skills/soniccraft ~/.claude/skills/ (Claude Code, user),
.claude/skills/soniccraft (Claude Code, project), ~/.agents/skills/soniccraft or
.agents/skills/soniccraft (Codex, Cursor and other agents that read .agents/skills).
Claude Code plugin (the skill plus the MCP server in one step; needs soniccraft on PATH):
If the plugin's MCP server shows as failed, the soniccraft binary is usually not on PATH: install it (see
Quickstart) and restart Claude Code. The skill's Setup section tells agents the same.
For Codex, skills/soniccraft/agents/openai.yaml declares the MCP dependency, launched as soniccraft-mcp.
Providers
- ElevenLabs audio is requested as raw
pcm_24000by default (falls back to it if a configured format is not available on your plan);eleven_v4accepts onlystabilityandsimilarity_boost. openaiis a generic OpenAI-compatible/audio/speechclient. OpenAI's own TTS models retire on 2027-01-06; pointbase_urlat Kokoro-FastAPI, Speaches, LocalAI or another compatible server.- Cartesia uses API version
2026-08-14and defaults tosonic-3.6. - Kokoro:
docker run -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:latest; word timestamps come from its captioned-speech endpoint.soniccraft providersandvalidateprobe local servers (Kokoro-FastAPI, OpenAI-compatible servers on this machine or a private network) with a 300 ms TCP connect; one that does not answer is not available (no Kokoro-FastAPI server answered at http://localhost:8880) and validate reportsprovider_unavailable. - Piper is maintained as OHF-Voice/piper1-gpl:
pip install piper-tts, then download a voice into the project:python3 -m piper.download_voices en_US-lessac-medium --data-dir voicesand setvoices_dir: voiceson the provider (or download it next to the timeline).voice_id: en_US-lessac-mediumis looked up invoices_dir,$PIPER_VOICES_DIR, the timeline directory and~/.local/share/piper/voices, in that order;soniccraft voices piperlists what it finds, or the searched directories and the download command, and validate reports a missing model asunknown_voice. - macOS
saysilently falls back to the default voice for unknown names, so SonicCraft checks voice names againstsay -v '?'first (unknown_voicein validate, with the closest installed names). - API keys are sent only to the provider's own API host, to servers on this machine (only the provider's own
key variable, such as
OPENAI_API_KEY), or to hosts listed inSONICCRAFT_ALLOWED_HOSTS; a key that would go anywhere else is refused before any request (provider_unavailable). See Security.
Setup, models, voices, settings and limits per provider: skills/soniccraft/reference/providers.md.
Subtitles and HyperFrames
output.export_subtitles takes true (= vtt + srt) or a list of vtt, srt, json and transcript.
json (<stem>.words.json) holds the captions and every word's timing; transcript
(<stem>.transcript.json) is a word array in seconds in the shape HyperFrames' transcribe command
consumes. To caption a HyperFrames video with a SonicCraft
voiceover:
and play the mastered audio in the composition from the start, e.g.
<audio id="voiceover" src="assets/voiceover.wav" data-start="0" data-duration="21.04"></audio>.
Determinism and caching
- Deterministic output. The same timeline, TTS cache and binary produce byte-identical audio, subtitles and manifests. No wall-clock timestamps, random seeds, host names or absolute paths leak into rendered artifacts; dither and the mock voice use fixed seeds; all geometry is integer sample frames. Stage timings and cache statistics appear only in the live report, never in the manifest, so a render from a warm cache writes the same manifest as a fresh one.
- Content-addressed TTS cache. Each cue's key is a blake3 hash of a canonical JSON of everything that
affects the audio (provider type, API version, non-default base URL, model, voice, language, text,
settings, output format; for command/piper the templates, the program and a hash of its contents, the
files its arguments name and the piper model). Entries are
<key>.wav(32-bit float, the provider's native rate, untrimmed) and<key>.json(metadata and word timings), written atomically. Changing one line re-synthesizes one cue; retiming, re-mixing or re-mastering costs nothing. A cache that cannot be written gives the warningcache_write_failed; the render still succeeds. - Location:
--cache-dir>SONICCRAFT_CACHE_DIR><timeline dir>/.soniccraft/cache.soniccraft cache infoandsoniccraft cache clearmanage it;render --no-cachere-synthesizes but still refreshes the cache. - Free dry runs.
planuses cached durations where available, renders mock voices in-process (exact) and estimates the rest from per-provider speaking rates (characters per second); it never calls a provider.
Security
A timeline is data, often written by an agent from text it found somewhere, so SonicCraft treats it as untrusted:
- Secrets never live in timelines. API keys, tokens and passwords in a timeline (a key named
api_key/token/secret/password, ansk-...value, a password in a URL, a key inside a provider'scommand) are the errorsecret_in_timeline, and diagnostics never repeat them (CLI snippets show<redacted>). Keys come only from environment variables (api_key_env). - Keys go only where they belong: to each provider's own API host, to servers on this machine (only
the provider's own key variable:
OPENAI_API_KEYfor anopenaiinstance pointed at a local server,KOKORO_API_KEYfor Kokoro), or to hosts you list inSONICCRAFT_ALLOWED_HOSTS(in soniccraft's or the MCP server's environment, never in the timeline). A timeline cannot send a variable of its choosing (api_key_env: GITHUB_TOKEN) to a local server, or any key to another device on the local network, unless that host is listed. To use a key with an OpenAI-compatible server elsewhere on your network or remote, a remote Kokoro or a regional endpoint, set for exampleSONICCRAFT_ALLOWED_HOSTS=tts.example.com. Anything else is refused before a request is made. Redirects are not followed, and keys echoed by a server are removed from messages. - Local programs:
commandproviders (and piper with its owncommand) run programs. Over MCP the server refuses them unless started withsoniccraft mcp --allow-command(orSONICCRAFT_ALLOW_COMMAND=1). Programs never see provider API keys, run in their own process group (killed as a whole on timeout or cancel), and get the cue text through a file or stdin: an argument that would start with-is refused. - Files: outputs are written to temporary files and put in place only when the whole render succeeds;
a failed or cancelled render leaves earlier outputs untouched. An existing file is replaced only by an
output of its kind (
-o notes.txtover a text file is refused). Over MCP, a timeline's ownoutput.pathmust stay inside the base directory (an explicitoutput_pathargument may point anywhere). - Reads: timelines are at most 5 MB, and
/dev/zero, FIFOs or endless stdin fail at once.
Resources
A render holds the mastered mix in memory: tracks are mixed in windows straight into one full-length master,
stems stream to their files and mastering works in place. Measured peaks (stereo, 48 kHz): about 23 MB per
minute of output for WAV, MP3, ogg, opus and m4a when music dominates (a 10-minute bed: 245 MB), about 40 MB
per minute when speech runs throughout (a 16-minute voiceover: 615 MB), and about 85 MB per minute for
24-bit FLAC, whose encoder keeps the whole stream (10 minutes: 870 MB). SONICCRAFT_MAX_RENDER_GB (default
8) caps a render: one that would need more fails with timeline_too_long before any TTS request, and
validate/plan warn ahead. Timelines are at most 24 h long.
Architecture
Dependencies point one way: layout → core; tts → {core, dsp}; engine → {core, layout,
captions, dsp, tts}; mcp → engine; cli → {engine, mcp}. The full specification is
docs/DESIGN.md; a contributor's tour of the pipeline is
docs/architecture.md.
Roadmap
- Phase 1: DSL and compiler (implemented in v0.1)
- Timeline DSL v1.0 (YAML/JSON), JSON Schema, strict validation with did-you-mean hints
- Lowering to a resolved IR: voices, providers, defaults, anchors, dependency checks
- Sample-accurate layout with the speech-overlap policy, dry-run plans and ASCII diagrams
- Phase 2: Synthesis (implemented in v0.1)
- Eight providers: ElevenLabs, OpenAI-compatible, Cartesia, Kokoro, Piper, macOS say, command, mock
- Content-addressed cache, duration estimates, concurrency limits, retries, credential checks
- Phase 3: Native DSP and mastering (implemented in v0.1)
- Decode, resample, silence trim, source normalization, loops, fades, crossfades, pan
- Sidechain and cue-driven ducking, EBU R128 mastering loop, oversampled true-peak limiter
- WAV/MP3/FLAC encoders; ogg/opus/m4a through ffmpeg
- Phase 4: Agent surfaces and outputs (implemented in v0.1)
- WebVTT, SRT, JSON word timestamps and HyperFrames transcripts
- CLI with
--json, MCP server (both protocol eras), Agent Skill, Claude Code plugin - Stems, manifest, web preview, examples with generated assets
- Phase 5: Distribution (v0.1)
- Release workflow: prebuilt binaries for macOS, Linux and Windows (with and without the LGPL MP3
encoder),
SHA256SUMS, third-party license notices and thesoniccraft-mcpnpm launcher - Package managers: one-line installers (
install.sh,install.ps1), a Homebrew tap, a Scoop bucket and the container image - Listings under the project's GitHub owner: the official MCP Registry
(
io.github.user-github-me/soniccraft), the Claude Code plugin marketplace in this repository and the Agent Skill fornpx skills add - crates.io:
cargo install soniccraftandcargo binstall soniccraft - npm:
npx -y soniccraft-mcp(the MCP server, with the release binary downloaded and verified) - Curated directories: the Anthropic plugin directory and the Cursor Marketplace
- Release workflow: prebuilt binaries for macOS, Linux and Windows (with and without the LGPL MP3
encoder),
Contributing
See CONTRIBUTING.md. The behaviour of every component is specified in docs/DESIGN.md; change the spec and the code together.
License
SonicCraft is licensed under either of Apache License, Version 2.0 or MIT license, at your option. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Native MP3 encoding uses LAME 3.100 (LGPL-2.0-or-later), statically linked through the mp3lame-sys and
mp3lame-encoder crates (LGPL-3.0), behind the default-on cargo feature mp3. Build with
--no-default-features to exclude it (for example
cargo install --locked --path crates/soniccraft-cli --no-default-features); mp3 output then goes through
ffmpeg when available (format_requires_ffmpeg otherwise). The -no-mp3 release archives are built that
way and contain no LGPL code. The other release archives carry the license texts in licenses/, and
licenses/README.md explains how to rebuild soniccraft with a modified LAME. Audio
decoding uses symphonia, and dirs uses option-ext, both MPL-2.0 (a file-level copyleft; used unmodified,
with their source on crates.io). Every other dependency is under a permissive license (MIT, Apache-2.0,
BSD-3-Clause, ISC, Zlib, Unicode-3.0). Each release archive lists every crate compiled into it, with the
license texts the crate ships, in THIRD-PARTY-LICENSES.txt, and CI enforces this policy with cargo-deny
(deny.toml).
The example audio in examples/*/assets/ is synthesized from scratch by
scripts/generate-example-assets.sh and is covered by the same
licenses.
来源:README.md,提交 d659706
工具
0版本历史
1- v0.1.0最新Oct 20, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
其他 Craft 集成
Craft
do.craft.mcp官方发布者
Craft 的托管 MCP 服务,由 mcp.craft.do 发布;需要凭据;Streamable HTTP。

Meltbead Craft Colors
由 GitHub 账号 jsspace 发布
使用 Meltbead 搜索手工配色方案,并按 CIEDE2000 匹配色号。AI 翻译

Agent Craft
由 GitHub 账号 CipherClaw 发布
一个只有AI智能体才能游玩的持久体素生存世界:挖矿、制作、建造、交易、聊天。AI 翻译

SlideCraft
由 GitHub 账号 eiler2005 发布
SlideCraft 把一份简报变成可编辑的 PowerPoint、PDF、HTML 和 Word 演示文稿,并带有排版适配、来源核查与视觉审阅。

CoverCraft AI by Ambuj Kumar Tripathi
由 GitHub 账号 Ambuj123-lab 发布
面向求职的 MCP 服务器:调研目标公司、用网络、GitHub 与 Hugging Face 证据核验简历说法,并生成带引用的求职信。