vibe-motion/sound

Media & Design

A Claude Code skill that searches Freesound, ranks sound candidates by download and rating signals, and downloads previews into a video project.

164
17
Python
4 days old

What it does

This repository packages a Claude Code skill for picking sound effects for video. The agent turns a described on-screen action into English search keywords, queries Freesound, and screens candidates by source, description, duration, and license before considering download and rating counts. It is aimed at short video needs such as transitions, card entrances, button clicks, paper slides, and impacts.

The skill covers search, filtering, and download only. Duration and energy analysis is left to FFmpeg. Download and rating numbers are presented as selection hints, not as evidence that the agent has listened to the clip.

Install and use

You need Claude Code, Python 3, and network access to Freesound. From the video project root, clone the skill into the .claude/skills directory:

git clone https://github.com/vibe-motion/sound.git .claude/skills/sound

The skill entry point is SKILL.md; the search and download logic lives in scripts/sfx.py.

After installation, describe the need in Claude Code, for example a short whoosh for a card flying in, around 0.3 seconds, CC0 only, downloaded to sfx/. The agent searches, explains its recommendation, filters by license, offers preview links when human listening is needed, and downloads the chosen clips.

Run the script directly

The scripts only use the Python standard library, so no third-party Python packages are needed. Run these from the project root:

S=.claude/skills/sound/scripts/sfx.py

python3 "$S" freesound "soft whoosh" --license cc0 --urls
python3 "$S" freesound "paper slide" --license by -n 5
python3 "$S" get sfx/ "fs:<id1>" "fs:<id2>"

The search results are cached at ~/.cache/sfx-sources/index.json, and get depends on that cache. Search first, then download using the returned fs:ID values. Downloads are Freesound MP3 preview files, not the uploader's original audio.

Search accepts --license cc0|by|any (default any), --urls to show preview links, -n for result count (default 8), --sort relevance|downloads|rating|short, --pages (default 3), and -p for the starting page. --sort relevance fetches related results and then reorders them by download count.

Licensing and attribution

Licenses vary per clip. --license cc0 restricts to CC0, while --license by includes CC0 and Attribution clips. The default any can also return BY-NC and other licenses, so check each item's requirements before use. For non-CC0 clips, get prints an author attribution hint; deliverable credits still need the source and license information filled in to match each item's terms.

Network and environment notes

The scripts use the terminal's HTTP/HTTPS proxy settings. If requests time out, check Freesound access and whether the proxy is active for that terminal. Multiple IDs can be passed to one get command for concurrent downloads. The repository also includes a helper script and local setup notes aimed at the author's macOS / ClashX Meta environment; the helper's --fix option modifies the local Clash configuration and switches nodes, so only use it when the environment matches and a proxy change is actually wanted.

HotRepo's take

The repository entered HotRepo's new-project list for Python on 2026-11-02, when its 24-hour window showed 54 new stars and 159 total stars. The hourly star samples from 2026-10-31 to 2026-11-02 rise from 100 to 159, with most of that gain concentrated on the final day. The project has no recorded GitHub daily-rank position and no Hacker News discussion in the provided data, so the available signal is limited to this short growth window rather than evidence of sustained adoption. Its practical value depends on the agent's selection rules and on handling Freesound licenses and preview-only downloads correctly, which is where the README sets its boundaries.

Written by AI from the project's README, updated . The project's own docs are the source of truth.