nc://sound-effects

v0.1.0Pinned
ThomSharktools/nodecode-sound-effects: ElevenLabs sound effects: a described sound becomes an audio file, kept in this profile's library. - a rewrite of NousResearch/hermes-official-plugins (MIT), credited to NousResearch78f7b76· 9 Nov1 commit
test1 fileaudio.lisp10.2 KBcell.lisp17.9 KBlibrary.lisp7.5 KB

nodecode-sound-effects

ElevenLabs sound effects: a text description becomes an audio file the model saves and hands you. A Nodecode rewrite of NousResearch/hermes-official-plugins by NousResearch.

One tool, elevenlabs_sound_effect, turns "glass shattering on a concrete floor" or "90s hip-hop drum loop, 90 BPM, loopable" into a real audio file, up to 30 seconds, and keeps a library of every sound this profile has made.

Get it

Tell the agent "add the sound-effects cell", or run:

nodecode add nc://sound-effects

Set it up

Create an API key at https://elevenlabs.io/app/settings/api-keys with Sound Effects enabled (it is separate from Text to Speech), then either paste it into the cell's api_key in /settings, or export it:

export ELEVENLABS_API_KEY=...

The section, as ~/.nodecode/config.jsonc carries it:

Setting Default What it does
api_key (unset) the key, written inline as a secret
api_key_env ELEVENLABS_API_KEY the variable read when api_key is empty
sound_model eleven_text_to_sound_v2 eleven_text_to_sound_v2 or eleven_text_to_sound_v3
output_format mp3_44100_128 mp3_44100_128, mp3_44100_192, opus_48000_128, opus_48000_192, wav_44100, wav_48000 (192 kbps MP3 is Creator plans and up, 44.1 kHz WAV Pro and up)
api_base_url https://api.elevenlabs.io change only for a data-residency endpoint; https only, or http for a localhost stand-in
directory sounds/ where the audio and the library are kept, under the home

Without a key the tool still answers -- with the sentence that says which setting to fill -- and nothing is billed.

Use it

Ask for a sound: "the sound of a heavy wooden door creaking open in a stone hall", "a short retro coin pickup", "rain on a tin roof, loopable". The model calls the tool with:

Argument Values Notes
prompt up to 450 characters what the sound is: source, action, material, space
duration_seconds 0.5 to 30 pass it whenever a length is named; unset, ElevenLabs picks one at a flat, higher rate
loop true/false ambience, music beds, engine hums
prompt_influence 0 to 1 higher follows the prompt more literally (0.3 unless sent)
model v2 or v3 omit for the section's model

The answer names the saved file, its real playing time (read out of the bytes, not from the request: a 1 s loop can come back 1.5 s long), the format, the size and the characters ElevenLabs billed. Give the path to the operator: the file plays in any audio player and can be copied into a project or a game engine.

saved ~/.nodecode/sounds/sfx_heavy-wooden-door_20261108_101500_3f2a9c1b7d4e.mp3
prompt: heavy wooden door creaking open in a stone hall
0.26 s long, loop, eleven_text_to_sound_v2, mp3_44100_128, 4.1 KB, 47 characters billed
id 3f2a9c1b7d4e -- /sfx lists this profile's sounds

/sfx lists the library (newest first, with per-container totals), and /sfx <id or words> shows one sound with its prompt, settings and file. (help :sfx) carries the prompt-writing guidance: one sound per call, concrete descriptions, sequences with "then", music with genre, tempo and key, and when to set loop.

Nothing is overwritten: every file is named with its description, a timestamp and its id, and every generation appends one line to sounds/library.jsonl beside the audio. Post-processing is local and free -- trim, normalise, convert or fix a loop seam with ffmpeg on the machine -- so a sound is generated once and edited after, not regenerated.

Cost and privacy. Every call is a paid ElevenLabs generation on your account (about 10 credits per second when a length is set, a flat amount per generation otherwise; loops can be billed on the request and returned longer). What leaves the machine is the description and the parameters above, sent to api_base_url with your key, and nothing else from the conversation. The library line never leaves the home.

Tests

.github/test-cell.sh tools/nodecode-sound-effects

Every HTTP call is stubbed and the environment is a stub: the suite proves the request shape and its headers, that the bytes that come back are saved and their length read from the frames, header or granule, that /sfx lists and finds a sound, that the library survives a torn line, and that a missing key, a length in the prompt, an out-of-range value and a non-audio 200 all answer without a second billed call.

Credits

A rewrite of NousResearch's Hermes Agent plugin, MIT, at commit e7a218f26db88426ab3e7376f0e000b6e356f5e7: see NOTICE for what was rewritten and what was left out, and LICENSE for the original licence.

Add nc://sound-effects

  1. 1

    Install Nodecode

    Once per machine.

    $ curl -fsSL https://nodecode.ai/install.sh | sh
  2. 2

    Add the cell

    Pinned at 78f7b76.

    $ nodecode add nc://sound-effects

    Or tell the agent add the sound effects cell.