SonicCraft MCP server
2026년 11월 9일 커밋선언적 오디오 타임라인을 동기화된 자막이 포함된 완성된 음성, 음악, 효과음으로 컴파일합니다.
다른 이름 user-github-me/soniccraft
- 스타
- 2
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- 0.1.0
- 마지막 커밋
- 2026년 11월 9일
- 라이선스
- Apache-2.0
SonicCraft MCP란?
SonicCraft은(는) MCP server입니다. 선언적 오디오 타임라인을 동기화된 자막이 포함된 완성된 음성, 음악, 효과음으로 컴파일합니다.
프로젝트 README에서 생성된 요약
SonicCraft MCP server 정보
SonicCraft는 개발자와 AI agent가 선언적 설명을 통해 전문적인 오디오 제작물을 만들 수 있도록 지원합니다. YAML 또는 JSON으로 타임라인을 정의하면 사용자는 음성, 음악, 효과음을 지정하고 라우드니스, 순서, 타이밍에 대한 정밀한 지침을 내릴 수 있습니다. 엔진은 음성이 나올 때 음악 볼륨을 낮추는 사이드체인 더킹(sidechain ducking)과 EBU R128 라우드니스 표준에 맞춘 최종 출력 마스터링을 포함하여, 이러한 요소들을 믹싱하는 데 필요한 복잡한 디지털 신호 처리를 수행합니다.
이 도구는 CLI, MCP server 또는 Agent Skill로 작동하여 Claude Code, Cursor, Gemini CLI와 같은 클라이언트와 호환됩니다. ElevenLabs, OpenAI, Cartesia, Kokoro, Piper를 포함한 다양한 text-to-speech 제공업체와 로컬 macOS 음성을 지원합니다. 불필요한 비용 발생을 방지하기 위해 API 호출 전 지속 시간과 글자 수를 추정할 수 있는 드라이 런 기능을 제공합니다. 또한 콘텐츠 주소 지정 캐시(content-addressed cache)를 사용하여 반복 작업 시 수정된 라인만 다시 합성되도록 합니다.
활용 사례
- 1배경 음악이 포함된 보이스오버 생성AI agent는 단일 명령어로 음성과 음악을 결합하여 30초 분량의 제품 영상 보이스오버를 제작할 수 있습니다.
- 2동기화된 자막 생성 자동화개발자는 실제 렌더링된 타이밍을 기반으로 일치하는 WebVTT 또는 SRT 자막 파일이 포함된 오디오 파일을 생성할 수 있습니다.
- 3비용 효율적인 오디오 계획 수립사용자는 유료 TTS 제공업체에 비용을 지불하지 않고도 드라이 런을 실행하여 타이밍과 합성 요구 사항을 확인할 수 있습니다.
- 4다중 화자 대화 믹싱엔진은 서로 다른 화자 간의 복잡한 대화를 관리하며, 음성이 겹치지 않도록 타이밍을 자동으로 조정합니다.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
SonicCraft MCP 설치 방법
형식 확인: 2026년 11월 10일Cursor에 추가Claude Code에 SonicCraft MCP 설치
$ claude mcp add --env CARTESIA_API_KEY=<YOUR_CARTESIA_API_KEY> --env ELEVENLABS_API_KEY=<YOUR_ELEVENLABS_API_KEY> --env OPENAI_API_KEY=<YOUR_OPENAI_API_KEY> soniccraft -- docker run -i --rm ghcr.io/user-github-me/soniccraft:0.1.0Cursor에 SonicCraft MCP 설치
~/.cursor/mcp.json
{
"mcpServers": {
"soniccraft": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/user-github-me/soniccraft:0.1.0"
],
"env": {
"CARTESIA_API_KEY": "<YOUR_CARTESIA_API_KEY>",
"ELEVENLABS_API_KEY": "<YOUR_ELEVENLABS_API_KEY>",
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>"
}
}
}
}VS Code에 SonicCraft MCP 설치
.vscode/mcp.json
{
"servers": {
"soniccraft": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/user-github-me/soniccraft:0.1.0"
],
"env": {
"CARTESIA_API_KEY": "<YOUR_CARTESIA_API_KEY>",
"ELEVENLABS_API_KEY": "<YOUR_ELEVENLABS_API_KEY>",
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>"
}
}
}
}VS Code CLI에 SonicCraft MCP 설치
$ code --add-mcp '{"name":"soniccraft","type":"stdio","command":"docker","args":["run","-i","--rm","ghcr.io/user-github-me/soniccraft:0.1.0"],"env":{"CARTESIA_API_KEY":"<YOUR_CARTESIA_API_KEY>","ELEVENLABS_API_KEY":"<YOUR_ELEVENLABS_API_KEY>","OPENAI_API_KEY":"<YOUR_OPENAI_API_KEY>"}}'Claude Desktop에 SonicCraft MCP 설치
claude_desktop_config.json
{
"mcpServers": {
"soniccraft": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/user-github-me/soniccraft:0.1.0"
],
"env": {
"CARTESIA_API_KEY": "<YOUR_CARTESIA_API_KEY>",
"ELEVENLABS_API_KEY": "<YOUR_ELEVENLABS_API_KEY>",
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>"
}
}
}
}Codex에 SonicCraft MCP 설치
~/.codex/config.toml
[mcp_servers.soniccraft] command = "docker" args = ["run", "-i", "--rm", "ghcr.io/user-github-me/soniccraft:0.1.0"] [mcp_servers.soniccraft.env] CARTESIA_API_KEY = "<YOUR_CARTESIA_API_KEY>" ELEVENLABS_API_KEY = "<YOUR_ELEVENLABS_API_KEY>" OPENAI_API_KEY = "<YOUR_OPENAI_API_KEY>"
Gemini CLI에 SonicCraft MCP 설치
~/.gemini/settings.json
{
"mcpServers": {
"soniccraft": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/user-github-me/soniccraft:0.1.0"
],
"env": {
"CARTESIA_API_KEY": "<YOUR_CARTESIA_API_KEY>",
"ELEVENLABS_API_KEY": "<YOUR_ELEVENLABS_API_KEY>",
"OPENAI_API_KEY": "<YOUR_OPENAI_API_KEY>"
}
}
}
}구성
CARTESIA_API_KEY비밀Cartesia API key for the cartesia TTS provider (optional)
ELEVENLABS_API_KEY비밀ElevenLabs API key for the elevenlabs TTS provider (optional)
OPENAI_API_KEY비밀OpenAI API key for the openai TTS provider (optional)
CLAUDE_PROJECT_DIR
| 이름 | 설명 | 유형 |
|---|---|---|
| CARTESIA_API_KEY | Cartesia API key for the cartesia TTS provider (optional) | 비밀 |
| ELEVENLABS_API_KEY | ElevenLabs API key for the elevenlabs TTS provider (optional) | 비밀 |
| OPENAI_API_KEY | OpenAI API key for the openai TTS provider (optional) | 비밀 |
| CLAUDE_PROJECT_DIR | — |
자동 검사
2026년 11월 13일에 실행됨전체 보고서 →아직 인증되지 않았습니다. 서버는 80점 이상의 점수, 심각한 결함 없음, 그리고 검사에 충분한 데이터를 갖추어야 합니다. 검사 방식 · 점수를 높이기 위해 수정할 항목
- 소스 저장소 연결 및 접근 가능user-github-me/soniccraft is public and reachablegithub.com/user-github-me/soniccraft ↗통과
- 패키지가 이 저장소를 소스로 명시검사되지 않음
- 빌드 출처(Sigstore 증명)검사되지 않음
- 오픈 소스 라이선스 (OSI)Apache-2.0spdx.org/licenses/Apache-2.0.html ↗통과
- 최근 1년 내 커밋 또는 릴리스Last commit or release 2026-11-09github.com/user-github-me/soniccraft ↗통과
- OpenSSF Scorecard검사되지 않음
- 패키지 이름이 인기 패키지와 유사하지 않음검사되지 않음
- 패키지 및 해당 종속성에 중요한 보안 권고 없음검사되지 않음
- 모델에 대한 숨겨진 지침 없음0 tool descriptions and the README read; no override phrases, credential paths or hidden characters통과
- 파괴적인 도구에 라벨 표시됨검사되지 않음
- 원격 엔드포인트가 MCP 핸드셰이크에 응답검사되지 않음
README
GitHub에서 보기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.
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.
curl -fsSL https://raw.githubusercontent.com/user-github-me/soniccraft/main/install.sh | sh # macOS, Linuxirm https://raw.githubusercontent.com/user-github-me/soniccraft/main/install.ps1 | iex # Windows -
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:
soniccraft validate my-audio/timeline.yaml # errors with a code, line, column and fix hint soniccraft plan my-audio/timeline.yaml # free dry run: timing, ducking, characters to synthesize soniccraft render my-audio/timeline.yaml --preview # mastered audio, subtitles, manifest, preview page
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.
| Agent | Skill | MCP server |
|---|---|---|
| Claude Code | claude plugin marketplace add user-github-me/soniccraft, then claude plugin install soniccraft@soniccraft |
included in the plugin, or claude mcp add soniccraft -- soniccraft mcp |
| Codex | npx skills add user-github-me/soniccraft -g -a codex |
codex mcp add soniccraft -- soniccraft mcp |
| Cursor | npx skills add user-github-me/soniccraft -g -a cursor |
{"mcpServers": {"soniccraft": {"command": "soniccraft", "args": ["mcp"]}}} in .cursor/mcp.json |
| Gemini CLI and others | npx skills add user-github-me/soniccraft -g (choose the agent) |
the same mcpServers entry (Gemini CLI: ~/.gemini/settings.json) |
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.
version: "1.0"
output:
format: "mp3"
sample_rate: 48000
bitrate: "320k"
target_lufs: -16.0 # integrated loudness target, measured per EBU R128 / ITU-R BS.1770
export_subtitles: true # Emits matching .vtt and .srt
tracks:
- id: ambient_bed
type: "music"
source: "assets/audio/synthwave_loop.wav"
loop: true
volume: 0.65
fade_in_ms: 1200
fade_out_ms: 2500
ducking:
trigger_tracks: ["voice_primary", "voice_secondary"]
reduction_db: -18.0
attack_ms: 80
release_ms: 350
- id: voice_primary
type: "speech"
pan: -0.15 # Subtle left stereo placement
sequence:
- id: cue_01
speaker: "narrator"
provider: "elevenlabs"
voice_id: "21m00Tcm4TlvDq8ikWAM"
text: "Autonomous software development requires deterministic compilation targets."
- pause_duration: 350ms
- id: cue_03
speaker: "narrator"
provider: "elevenlabs"
voice_id: "21m00Tcm4TlvDq8ikWAM"
text: "By separating high-level planning from digital signal processing, systems eliminate runtime hallucinations."
- id: voice_secondary
type: "speech"
pan: 0.15 # Subtle right stereo placement
sequence:
- id: cue_02
start_relative:
after_cue: "cue_01"
offset_ms: 150
speaker: "guest"
provider: "local_kokoro"
voice_id: "am_adam"
text: "Exactly. SonicCraft treats audio composition the same way Hyperframes treated web-based video."
- id: sfx_impact
type: "sfx"
source: "assets/sfx/whoosh.wav"
volume: 0.8
start_at_ms: 0
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):
{ "valid": true, "duration_ms": 20616.9, "estimated": true,
"items": [
{ "id": "cue_01", "kind": "cue", "start_ms": 0.0, "end_ms": 4838.7, "duration_source": "estimate" },
{ "id": "cue_02", "kind": "cue", "start_ms": 4988.7, "end_ms": 10863.7, "duration_source": "estimate" },
{ "id": "cue_03", "kind": "cue", "start_ms": 11213.7, "end_ms": 18116.9, "duration_source": "estimate",
"pushed_from_ms": 5188.7 } ],
"synthesis": { "cues": 3, "cached": 0, "characters_to_synthesize": 276 } }
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):
curl -fsSL https://raw.githubusercontent.com/user-github-me/soniccraft/main/install.sh | sh # macOS, Linux: ~/.local/bin
brew install user-github-me/soniccraft/soniccraft # Homebrew (macOS, Linux)
irm https://raw.githubusercontent.com/user-github-me/soniccraft/main/install.ps1 | iex # Windows
scoop bucket add soniccraft https://github.com/user-github-me/scoop-soniccraft; scoop install soniccraft
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.
git clone https://github.com/user-github-me/soniccraft
cd soniccraft
cargo install --locked --path crates/soniccraft-cli # installs `soniccraft` and `soniccraft-mcp` into ~/.cargo/bin
soniccraft --version
--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):
docker run --rm -v "$PWD":/work ghcr.io/user-github-me/soniccraft render timeline.yaml
docker run -i --rm -v "$PWD":/work ghcr.io/user-github-me/soniccraft mcp --base-dir /work # MCP on stdio
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:
# macOS: Samantha and Daniel from macOS `say`, plus the built-in mock voice
soniccraft render examples/offline-demo/timeline.yaml --preview
# any OS: the same timeline with mock voices only
soniccraft render examples/offline-demo/timeline.mock.yaml
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:
soniccraft validate examples/offline-demo/timeline.mock.yaml # errors, warnings, fix hints
soniccraft plan examples/offline-demo/timeline.mock.yaml # dry run: layout, ducking, cost
soniccraft render examples/offline-demo/timeline.mock.yaml --json # one JSON report on stdout
With API keys and a local Kokoro server, render the README timeline:
export ELEVENLABS_API_KEY=... # never put keys in timelines
docker run -d -p 8880:8880 ghcr.io/remsky/kokoro-fastapi-cpu:latest
soniccraft render examples/tech-briefing/timeline.yaml
Start your own project from a template (writes the timeline and generated stand-ins for its audio assets):
soniccraft init my-episode --template two-person-podcast
CLI
soniccraft validate <TIMELINE> [--json] [--check-credentials]
soniccraft plan <TIMELINE> [--json] (alias: dry-run)
soniccraft render <TIMELINE> [-o PATH] [--format F] [--subtitles] [--stems] [--manifest] [--preview]
[--no-cache] [--cache-dir DIR] [--jobs N] [--json]
soniccraft schema [-o FILE]
soniccraft init [DIR] [--template NAME] [--list] [--no-assets] [--force]
soniccraft providers [--json]
soniccraft voices <PROVIDER> [--json]
soniccraft cache <info|clear> [--cache-dir DIR] [TIMELINE]
soniccraft mcp [--base-dir DIR] [--allow-command]
| Command | What it does |
|---|---|
validate |
Parses and checks the timeline and its environment (assets exist and decode, credentials present and allowed to go to their host, local TTS servers answer, macOS voices and piper models installed, ffmpeg when needed, the render fits the memory budget, cache status). --check-credentials also verifies API keys with a cheap authenticated request. |
plan / dry-run |
Validates, then lays out the timeline with cached or estimated durations (mock voices exactly): item times, overlap moves, ducking regions, characters to synthesize per provider, and an ASCII diagram. Never calls a paid API. |
render |
The full pipeline. -o sets the output path (its extension picks the format only when output.format is not set: for a format: wav timeline write -o out.mp3 --format mp3); --format is one of wav, mp3, flac, ogg, opus, m4a and overrides both. --subtitles, --stems and --manifest switch on those exports (like the output.export_* fields); --preview writes <stem>.preview.html. --no-cache ignores cached TTS audio (fresh results are still cached); --cache-dir picks the cache; --jobs N limits concurrent synthesis requests (default 4). Outputs are put in place only when the render succeeds, and existing files that are not SonicCraft outputs are never overwritten. |
schema |
Prints the timeline JSON Schema, or writes it with -o. |
init |
Writes DIR/timeline.yaml (default DIR: the current directory) from a template, plus the audio assets it references, generated procedurally (a seamless synth loop and three SFX, deterministic and royalty-free). Templates (--list): offline-demo (default on macOS: system voices + mock), offline-demo-mock (default elsewhere: renders anywhere), tech-briefing, two-person-podcast, voiceover-with-music, dialogue-crosstalk. --no-assets writes only the timeline; existing files are never overwritten without --force. |
providers |
Lists built-in providers with availability, credential status and default voices. |
voices |
Lists the voices of one provider (may call its API); the provider name ignores case and -/_. |
cache |
info shows the TTS cache location, entry count and size; clear empties it. |
mcp |
Runs the MCP server on stdio. --allow-command (or SONICCRAFT_ALLOW_COMMAND=1) lets timelines run command providers, which are refused by default. |
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.
SonicCraft MCP 질문
SonicCraft MCP를 Claude Code에 추가하려면 어떻게 하나요?
터미널에서 claude mcp add --env CARTESIA_API_KEY=<YOUR_CARTESIA_API_KEY> --env ELEVENLABS_API_KEY=<YOUR_ELEVENLABS_API_KEY> --env OPENAI_API_KEY=<YOUR_OPENAI_API_KEY> soniccraft -- docker run -i --rm ghcr.io/user-github-me/soniccraft:0.1.0를 실행합니다. 모든 프로젝트에서 사용할 수 있게 하려면 --scope user를 추가합니다.
SonicCraft MCP를 Cursor에 추가하려면 어떻게 하나요?
~/.cursor/mcp.json를 열고 mcpServers 아래에 서버를 추가합니다. 위 설치 섹션에 표시된 Cursor 구성을 사용합니다.
SonicCraft로 무엇을 제작할 수 있나요?
TTS 음성, 배경 음악, 효과음을 결합하여 더킹(ducking) 및 라우드니스 마스터링이 적용된 오디오와 그에 맞는 WebVTT/SRT 자막을 생성합니다.
테스트 중 TTS API 호출 비용을 어떻게 방지할 수 있나요?
soniccraft plan 명령어를 사용하여 API를 호출하지 않고도 타이밍과 글자 수를 추정하는 무료 드라이 런(dry run)을 수행할 수 있습니다.
어떤 TTS 제공업체를 지원하나요?
ElevenLabs, OpenAI 호환 서버, Cartesia, Kokoro, Piper, macOS 'say' 및 로컬 명령어를 지원합니다.
오디오 레벨링을 자동으로 처리하나요?
네, 목소리를 -20 LUFS로 정규화하고 EBU R128 표준을 사용하여 최종 믹스를 -16 LUFS와 같은 목표 값으로 마스터링합니다.