file-naming-normalization
Skill202 starsChanged 14 days agoMITView on GitHub
Normalizes asset filenames by splitting on common separators, stripping asset IDs and optional user strings from each segment, then joining with underscores (snake_case). Use when normalizing asset filenames, batch-renaming SFX/UI textures, file naming normalization, asset naming convention, slug normalization, or snake_case asset names.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- godot-fun/gaiword for word, first seen Nov 1, 2026
Other versions1 project uses a version of this.
Word for word · 1
- godot-fun/gai★ 202100% same
Edited · 0
None found.
Wrote their own version · 0
None found.
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository37 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .agents/skills/AGENTS.mdAGENTS.md
- ai-text-to-speechSkill
- audio-denoiseSkill
- audio-fadeSkill
- audio-loudness-normalizationSkill
- audio-sample-rate-standardizeSkill
- audio-splitSkill
- audio-to-oggSkill
- audio-to-textSkill
- audio-to-wavSkill
- audio-trimSkill
- audio-volume-adjustSkill
- git-commit-messageSkill
- image-inpaint-regionSkill
- image-region-remove-key-color-appSkill
- image-remove-backgroundSkill
- image-remove-white-backgroundSkill
- image-resizeSkill
- image-sprite-sheet-splitSkill
- image-to-pngSkill
- image-to-textSkill
- image-trimSkill
- storyboard-av-mixSkill
- storyboard-shot-to-htmlSkill
- storyboardSkill
- storyboard-ttsSkill
- video-4k-normalizationSkill
- video-compress-to-sizeSkill
- video-merge-gpuSkill
- video-mergeSkill
- video-publishSkill
- video-remove-audioSkill
- video-to-4kSkill
- video-to-60fpsSkill
- video-to-ogvSkill
- video-to-wavSkill
The file
We split this skill into the rules it gives an agent
9 rules. About 0 are common, 2 are distinctive, and 7 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
When this skill applies, read and follow dependency-manager — run scripts as documented, install missing tools into .dependency/.
- Very specific: line 16
Default: split on _, -, ., and spaces.
- Very specific: line 33
Keep short pure-digit segments as variant indices (1, 2, 01)
- Very specific: line 34
Remove leading digits from mixed segments (001Hero → Hero)
- Very specific: line 35
Remove trailing digits from mixed segments (Attack02 → Attack, foisal72 → foisal)
- Very specific: line 36
Remove user-given strings (see --strip)
- Distinctive: line 118
Use the bundled script; do not hand-write rename loops unless the script cannot cover the case.
- Very specific: line 119
Always run --dry-run first when normalizing many files.
- Distinctive: line 123
Only renames files; does not rename directories.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
File Naming Normalization
Normalize asset filenames: split → clean each segment → join with _ (snake_case).
Rules
When this skill applies, read and follow dependency-manager — run scripts as documented, install missing tools into .dependency/.
Quick Start
Default: split on _, -, ., and spaces; strip leading/trailing digits from each segment; join with _:
.dependency/python/python .ai/file-naming-normalization/normalize.py path/to/file_or_folderPreview without renaming:
.dependency/python/python .ai/file-naming-normalization/normalize.py Audio/SFX --dry-runWorkflow
- Split the filename stem (extension is preserved) on common separators:
_,-,., whitespace. - Clean each segment:
- Drop pure-digit segments with 4+ digits (asset IDs like
38126) - Keep short pure-digit segments as variant indices (
1,2,01) - Remove leading digits from mixed segments (
001Hero→Hero) - Remove trailing digits from mixed segments (
Attack02→Attack,foisal72→foisal) - Remove user-given strings (see
--strip)
- Drop pure-digit segments with 4+ digits (asset IDs like
- Drop empty segments after cleaning.
- Join remaining segments with
_. - Rename in place (or write to
--output-dir).
Examples
| Input | Output |
001_Hero_Attack_02.wav | 001_Hero_Attack_02.wav (already snake_case) |
001-Hero-Attack-02.wav | 001_Hero_Attack_02.wav |
sfx-button-click.mp3 | sfx_button_click.mp3 |
UI 12 Panel Open.png | UI_12_Panel_Open.png |
freesound_community-shoot-1-81135.wav | freesound_community_shoot_1.wav |
SFX_001_button.wav with --strip SFX | 001_button.wav |
# Strip custom strings (repeatable)
.dependency/python/python .ai/file-naming-normalization/normalize.py Assets --strip SFX --strip UI
# Recursive folder
.dependency/python/python .ai/file-naming-normalization/normalize.py Assets -r
# Copy normalized files to another folder (originals unchanged)
.dependency/python/python .ai/file-naming-normalization/normalize.py Assets -o normalized/ -rOutput
--dry-run preview (unchanged files such as 001_Hero_Attack_02.wav are omitted):
Assets/001-Hero-Attack-02.wav -> Assets/001_Hero_Attack_02.wav
Assets/freesound_community-shoot-1-81135.wav -> Assets/freesound_community_shoot_1.wav
Assets/sfx-button-click.mp3 -> Assets/sfx_button_click.mp3
Assets/UI 12 Panel Open.png -> Assets/UI_12_Panel_Open.png
Dry run: 4 file(s) would be renamed.In-place rename:
Assets/001-Hero-Attack-02.wav -> Assets/001_Hero_Attack_02.wav
Renamed 1 file(s).Nothing to change:
All filenames already normalized.With --strip SFX:
Assets/SFX_001_button.wav -> Assets/001_button.wav
Renamed 1 file(s).Copy to --output-dir (originals kept):
Assets/SFX_001_button.wav -> normalized/001_button.wav
Renamed 1 file(s).Name collision (exit code 1):
Name collision: 'Assets/Hero-Attack.wav' and 'Assets/Hero.Attack.wav' both map to 'Assets/Hero_Attack.wav'Common Flags
-r / --recursive · --strip TEXT (repeatable) · --strip-case-insensitive · -o / --output-dir · --dry-run · --overwrite
Agent Notes
- Use the bundled script; do not hand-write rename loops unless the script cannot cover the case.
- Always run
--dry-runfirst when normalizing many files; show the user the preview. --stripremoves the given substring anywhere inside each segment (not only at edges). Pass one--stripper string.- Segments that become empty after cleaning are dropped (
81135alone → skipped). - Collisions (two files mapping to the same name) abort with an error — resolve manually or normalize in smaller batches.
- Only renames files; does not rename directories.
CLI
Copy-paste commands: cli/file-naming-normalization.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

