Audio Track Production Workflow
HKUDS/OpenSpace
Walks through producing a master audio track plus stems in Python, from checking a reference file and timing sections by BPM to effects, a zip archive and final verification.
Generate a royalty-free lofi (or rain / typing / chime / any ambient) soundtrack ENTIRELY in code — no sampled audio ships.
$ npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install IvanWng97/pixtuoid procedural-lofi --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/IvanWng97/pixtuoid.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/procedural-lofi .claude/skills/procedural-lofi && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "procedural-lofi" agent skill from https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofi into .claude/skills/procedural-lofi/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "procedural-lofi", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install IvanWng97/pixtuoid procedural-lofi --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/IvanWng97/pixtuoid.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/procedural-lofi .agents/skills/procedural-lofi && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "procedural-lofi" agent skill from https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofi into .agents/skills/procedural-lofi/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "procedural-lofi", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install IvanWng97/pixtuoid procedural-lofi --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/IvanWng97/pixtuoid.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/procedural-lofi .cursor/skills/procedural-lofi && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "procedural-lofi" agent skill from https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofi into .cursor/skills/procedural-lofi/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "procedural-lofi", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/IvanWng97/pixtuoid.git --path .claude/skills/procedural-lofi--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install IvanWng97/pixtuoid procedural-lofi --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/IvanWng97/pixtuoid.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/procedural-lofi .gemini/skills/procedural-lofi && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "procedural-lofi" agent skill from https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofi into .gemini/skills/procedural-lofi/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "procedural-lofi", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install IvanWng97/pixtuoid procedural-lofiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/IvanWng97/pixtuoid.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/procedural-lofi .github/skills/procedural-lofi && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "procedural-lofi" agent skill from https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofi into .github/skills/procedural-lofi/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "procedural-lofi", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install IvanWng97/pixtuoid procedural-lofi --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/IvanWng97/pixtuoid.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/procedural-lofi .opencode/skills/procedural-lofi && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "procedural-lofi" agent skill from https://github.com/IvanWng97/pixtuoid/tree/main/.claude/skills/procedural-lofi into .opencode/skills/procedural-lofi/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "procedural-lofi", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
procedural-lofiGenerate a royalty-free lofi (or rain / typing / chime / any ambient) soundtrack ENTIRELY in code — no sampled audio ships.
Procedural Lofi is an agent skill from IvanWng97/pixtuoid. Generate a royalty-free lofi (or rain / typing / chime / any ambient) soundtrack ENTIRELY in code — no sampled audio ships. Fingerprint a beloved reference recording, shape synthesis to the measured spectral + temporal curve, freeze one human-blessed take into constant tables, and re-synthesize at launch (loop the bed, scatter the foreground → never repeats, ~0 KB, no licensing risk). Use when adding ambient/generative audio to an app, game, terminal UI, or site, or on 'add another lofi/rain/ambient sound'…
Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts (for example `reference/LOFI-BIBLE.md`, `scripts/analyze_drops.py` and `scripts/analyze_rain.py`).
It sits in Media & Creative, covering Music and audio generation. It works with NumPy. The repository describes itself as: Terminal pixel-art office for AI coding agents. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 96bc06a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 6 files in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
yt-dlpffmpegpython3pipcargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Procedural Lofi loads about 3.5k tokens when it runs. Until then it costs about 155 tokens; SKILL.md has 1,921 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from IvanWng97/pixtuoid at commit 96bc06a, republished under its MIT licence (© IvanWng97). 1,921 words, ~3,510 tokens.
.claude/skills/procedural-lofi/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.This skill is the end-to-end recipe for a lofi bed (and its sibling ambient sounds: rain, keystrokes, door chimes, printer, water cooler…) that is synthesized at runtime from constants — zero audio files, zero royalties, and no two minutes ever sound the same.
Two documents ship alongside this one:
reference/LOFI-BIBLE.md — the parameter tables. Harmony (chord grammar,
voice-leading, register clamps), groove (swing %, drag ms, velocity curves), per-voice
sound design (pad / bass / EP keys / sparkle / drums / texture / tape chain), mix
targets (band shares, HPF strategy, loudness), and generative lessons from prior art.
Every number is cited and, where it conflicts with a measurement, the measurement wins.scripts/ — the Python (numpy) pipeline: analyze_*.py (fingerprint a reference),
synth_audition.py (a runnable numpy synth that produces .wav auditions), and
export_score.py (freeze a good take into a constants table for the port).Read those two when you reach the step that needs them. This file is the map.
A sampled lofi loop is: (a) a licensing liability, (b) heavy to bundle, and (c) audibly repetitive — the human brain catches a loop seam on the 3rd or 4th pass. Synthesizing it solves all three:
The one law of the whole method:
Measurement is the machine's ears; taste is the human's. You (or your tooling) cannot reliably hear whether it sounds good — you can only measure proxies (band energies, onset rate, dB deltas) and drive them to a target. A human listens once per major revision and gives a yes/no. Pick your measurable proxy carefully, iterate on it alone, and hand over a finished audition — don't ask the human to babysit each tweak.
Prototype the whole sound in Python/numpy where the write→hear loop is seconds. Only port
to Rust/C++/wasm once a human has ratified the sound. scripts/synth_audition.py is a
worked example: deterministic numpy that writes audio-demos/*.wav. Iterating synth
recipes in a compiled language first is the classic time sink.
For every distinct sound (the lofi bed, rain, typing, each one-shot):
yt-dlp / curl for analysis only; for an endless live stream, yt-dlp -g gets the
HLS URL, then ffmpeg -t 180 grabs a finite slice.)analyze_rain.py / analyze_typing.py). For anything rhythmic or event-bearing
ALSO measure the temporal fingerprint — onset rate, inter-onset-interval spread,
per-stroke decay, and the dB level of foreground events vs. the bed
(analyze_drops.py). Spectral averages are blind to events: rain's audible drops
don't show up in an averaged spectrum at all, only in the temporal pass.Build your oscillators/noise-shapers and drive their parameters until a re-measurement of
your output lands within a few percentage points of the reference fingerprint. The
LOFI-BIBLE.md gives you the starting parameter values per voice; the fingerprint tells
you which way to push them. Search the literature for the physics (Minnaert resonance
for a water glug, inharmonic bar modes 1 : 2.76 : 5.40 for a chime, tape wow/flutter +
head-bump for the lofi chain) but tune to the reference, not to the physics ideal.
When the numbers converge, a human auditions once (afplay file.wav on macOS, or hand
them the wav). On yes:
The RNG was the composer. Freeze the one take they blessed.
The generative script drew notes/velocities/timings from a seeded RNG. That one seed's
output is what got ratified — so capture its exact event stream into constant tables
(export_score.py → a .rs / .h table), plus a full-table checksum. Do NOT re-run
the RNG in production and hope; a later library bump silently redraws and you ship a
different, un-ratified take. The freeze is the contract. (Subtlety: your exporter must
reproduce the exact draw order of the original — argument-evaluation order, nested draws
inside a choice() — or the frozen table desyncs from what was auditioned.)
Port the numpy synth to your runtime language reading the frozen tables. Key engineering:
dt / now in as parameters. On
wasm especially, SystemTime::now() isn't available — and a backgrounded tab that jumps
the clock will otherwise ramp-snap your crossfades and burst-replay every queued event
(the "stall-clock" bug). Clamp big dt gaps.amplitude = user² (loudness is
logarithmic). Linear volume feels "still too loud at 5%" — the classic trap.reference/LOFI-BIBLE.md and scripts/ into your repo (or just read them).python3 -m venv .venv && .venv/bin/pip install numpy scipy (+ yt-dlp,
ffmpeg for grabbing references).analyze_*.py.synth_audition.py's voices toward the fingerprint; re-measure to convergence.export_score.py freezes the take + checksum.(The scripts/ are the real working prototypes from this project, kept as a concrete
starting point — not a turnkey CLI; synth_audition.py runs standalone, and export_score.py
imports phase2_audition.py — both are bundled. Adapt the voices to your own reference.)
Once a project graduates from frozen takes to a theory-constrained generator
(pixtuoid-scene/src/audio/compose.rs + synth::gen_beds), the iteration loop changes
shape: the LISTEN gate becomes statistical (blind-audition a batch of seeds; all
acceptable = the GENERATOR is ratified — a dud = tighten a constraint and re-batch), and
every taste axis is a data table or named const with ONE home:
| Want to change… | Edit (all in compose.rs unless noted) |
|---|---|
| harmony vocabulary | DAY_PROGRESSIONS / NIGHT_PROGRESSIONS (pre-voiced templates + roots_pc + scale_pcs) |
| tempo feel | DAY_BPM / NIGHT_BPM windows |
| melody character | lead_events rules (density draws, leap bound, peak bar, grid) + *_LEAD_LO/HI registers |
| groove feel | DAY_GROOVES templates / night_drums pattern + the swing/drag consts |
| comping density | keys_events density draws |
| room-tone crackle | synth::CRACKLE_POPS_PER_SEC (one knob, both beds) |
| a new instrument | see the checklist below |
Add-an-instrument checklist (executed once for the Pluck lead — repeat verbatim):
synth.rs (fn my_voice(midi, dur_s, vel) -> Vec<f32>),
physics-first then tuned by ear/fingerprint (Phase 1-2 of this skill still apply).compose::LeadVoice variant + its arm in synth::lead_voice_fn (the ONE dispatch).compose() — the voice draw is deliberately LAST in
the seed stream so new voices never redraw an already-blessed seed's notes (one banded
unit-draw per mood — re-weight the bands rather than adding draws).cargo run --release -p pixtuoid-scene --example lofi_audition -- --seeds N;
--solo sparkle isolates the lane) → owner listens → tighten or ship.Mix LANES stay instrument-blind (StemLevels/mixer/players never learn about voices) — a lane is a busy-ness ROLE, an instrument is a timbre WITHIN it. That split is what keeps "blend in another instrument" a minutes-scale edit instead of an arc.
© IvanWng97, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (scripts) in .claude/skills/procedural-lofi of IvanWng97/pixtuoid.
Open the folder on GitHubat commit 96bc06a
Procedural Lofi next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Procedural Lofi this skillIvanWng97/pixtuoid | 490 | — | ~3.5k | Automated safety check: Pass | MIT | |
| Audio Track Production WorkflowHKUDS/OpenSpace | 7.8k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Musictadaspetra/loop | 296 | 2 repos | ~827 | Automated safety check: Pass | MIT | |
| Sound Effectstadaspetra/loop | 296 | 2 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Text To Sfxsonilo-ai/skills | 115 | 1 repos | ~1.6k | Automated safety check: Notes | MIT | |
| Music Caption RewriterT8mars/T8-penguin-canvas | 615 | — | ~2.2k | Automated safety check: Pass | MIT |
HKUDS/OpenSpace
Walks through producing a master audio track plus stems in Python, from checking a reference file and timing sections by BPM to effects, a zip archive and final verification.
tadaspetra/loop
Generate music using ElevenLabs Music API. An agent skill from tadaspetra/loop.
tadaspetra/loop
Generate sound effects from text descriptions using ElevenLabs.
sonilo-ai/skills
Generate a sound effect from a text description using Sonilo — a UI chime, a whoosh, an impact, ambience, a stylized cue — when there is no video to match.
T8mars/T8-penguin-canvas
Turn a brief music description and optional tagged lyrics into a professional MiniMax Music 3 structured caption with Global Metadata, Vocal Details, and a section-aware Arrangement.
sonilo-ai/skills
Score a video with original music using Sonilo — the model watches the cut and matches pacing, motion, and emotion, returning either the audio or a new video with the score muxed in.
IvanWng97/pixtuoid
Iterate on the visual identity of a top-down pixel-art decoration (sprite + layout integration) in pixtuoid.
IvanWng97/pixtuoid
Run pixtuoid's review locally at either scope — a DIFF review (one lens per matching REVIEW.md local escalation row; the correctness and design lenses are the CI bots, never re-run locally) or a…
IvanWng97/pixtuoid
Wire a new agent-CLI Source adapter into pixtuoid (a new coding CLI whose sessions become office sprites).
IvanWng97/pixtuoid
Add a new color theme to pixtuoid (a full Theme palette, rendered into the office).
Works with
Categories
Generate a royalty-free lofi (or rain / typing / chime / any ambient) soundtrack ENTIRELY in code — no sampled audio ships. Procedural Lofi is an agent skill from IvanWng97/pixtuoid. Generate a royalty-free lofi (or rain / typing / chime / any ambient) soundtrack ENTIRELY in code — no sampled audio ships.
Procedural Lofi fits situations like: adding ambient/generative audio to an app; on add another lofi/rain/ambient sound.
Run `npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a claude-code`. Or copy the skill folder (.claude/skills/procedural-lofi in IvanWng97/pixtuoid) into .claude/skills/procedural-lofi in your project. Claude Code loads it when a task matches its description.
Run `npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a codex`. Or copy the skill folder (.claude/skills/procedural-lofi in IvanWng97/pixtuoid) into .agents/skills/procedural-lofi in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add IvanWng97/pixtuoid --skill procedural-lofi -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/procedural-lofi, .gemini/skills/procedural-lofi, .github/skills/procedural-lofi and .opencode/skills/procedural-lofi in your project.
Going by SKILL.md and its folder, Procedural Lofi needs Python for the scripts in its folder and the command-line tools its instructions call (yt-dlp, ffmpeg, python3, pip and cargo). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use pip, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Procedural Lofi is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Procedural Lofi: Audio Track Production Workflow (HKUDS/OpenSpace, 7.8k stars), Music (tadaspetra/loop, 296 stars), Sound Effects (tadaspetra/loop, 296 stars) and Text To Sfx (sonilo-ai/skills, 115 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
IvanWng97 (a GitHub user) maintains it in IvanWng97/pixtuoid, which has 490 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 9, 2026.
Source: IvanWng97/pixtuoid on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.