Skip to content

Rights and Shipping

m4bwav edited this page Nov 7, 2026 · 2 revisions

ship is a provenance record, not legal advice. Licence wording changes; the rights reference says when it was last checked.

Licence names

library --licence accepts exactly these:

$ python sfx.py library found.wav --licence whatever
{"ok": false, "error": "licence must be one of: cc-by, cc-by-nc, cc-by-nc-nd, cc-by-nc-sa, cc-by-nd, cc-by-sa, cc-sampling+, cc0, commercial-library, elevenlabs-free, elevenlabs-paid, own, procedural, research-only, sonniss-gdc, stability-community, unknown"}
$ echo $?
1

Licences that need credit refuse a missing author. Each licence's note prints when you record it:

$ python sfx.py library found.wav --licence cc0 --library Freesound --title "Crate" --url https://example.com/1
{"ok": true, "files": ["found.wav"], "note": ""}
$ echo $?
0
$ python sfx.py library by.wav --licence cc-by --author "A. Person" --title "Door"
{"ok": true, "files": ["by.wav"], "note": "credit the author"}
$ echo $?
0
$ python sfx.py library sa.wav --licence stability-community --type generated --ai yes --title "Crate take"
{"ok": true, "files": ["sa.wav"], "note": "register with Stability for business use; ends above USD 1M yearly revenue with affiliates"}
$ echo $?
0

No-derivatives sources refuse edits

$ python sfx.py library nd.wav --licence cc-by-nd --author "B. Person" --title "No edits"
{"ok": true, "files": ["nd.wav"], "note": "no derivatives: use unaltered"}
$ echo $?
0
$ python sfx.py edit nd.wav nd2.wav --op gain --value -3
{"ok": false, "error": "nd.wav: licence cc-by-nd forbids derivatives; use it unaltered or pass --override-licence with a reason"}
$ echo $?
1

--override-licence lets the edit through. The script has no field for the reason: tell the user.

BLOCKED, CHECK, CLEAR

ship always exits 0, so read answer.

CLEAR, one procedural file in a commercial project:

$ python sfx.py ship clear.json
{"ok": true, "answer": "CLEAR", "files": 1, "commercial": true, "blockers": [], "warnings": [], "attribution_owed": [], "ai_models": [], "note": "a provenance record, not legal advice; store and licence wording changes, see references/rights.md"}
$ echo $?
0

CLEAR says only that the records raise no objection. It does not say the sounds are good or the licences were read correctly.

CHECK, a sound with no file yet:

$ python sfx.py ship sounds.json
{"ok": true, "answer": "CHECK", "files": 1, "commercial": true, "blockers": [], "warnings": ["b: no file yet", "c: no file yet", "d: no file yet", "e: no file yet"], "attribution_owed": [], "ai_models": [], "note": "a provenance record, not legal advice; store and licence wording changes, see references/rights.md"}
$ echo $?
0

BLOCKED, a non-commercial source in a commercial project, here with a Sonniss file and a Stability take as warnings and store disclosure listed:

$ python sfx.py ship mix.json
{"ok": true, "answer": "BLOCKED", "files": 3, "commercial": true, "blockers": ["nc.wav (n, cc-by-nc): not allowed in a commercial project: no commercial use"], "warnings": ["pack.wav (k, sonniss-gdc): no redistribution as sound effects; no AI training", "sa.wav (s, stability-community): register with Stability for business use; ends above USD 1M yearly revenue with affiliates"], "attribution_owed": ["\"NC\" by C. Person (cc-by-nc)"], "ai_models": [], "disclosure": {"sounds": ["s"], "steam": "Pre-Generated AI disclosure, content survey", "itch": "tag generative AI in the AI Disclosure section; a sound pack sold as a game asset must disclose too"}, "note": "a provenance record, not legal advice; store and licence wording changes, see references/rights.md"}
$ echo $?
0

Flags

  • --sell-as-pack adds a blocker for each source not cleared for sale as a sound pack. In the run above it added the Sonniss file, the Stability take and the NC file.
  • --picked-only looks only at takes marked picked: true. A sound with no picked take still counts all its takes, so it changes nothing until picks are recorded.

A file with no known licence

A plain copy has no sidecar, so it registers as unknown, with a warning, and blocks a commercial project:

$ python sfx.py register sounds.json e mystery.wav
{"ok": true, "id": "e", "added": ["mystery.wav"], "warning": "no known licence: mystery.wav"}
$ echo $?
0

Find its source or replace it. Never guess a licence.

A file that changed

register stores a hash. Overwrite the file afterwards and ship says so:

$ python sfx.py ship sounds.json
{"ok": true, "answer": "BLOCKED", "files": 5, "commercial": true, "blockers": ["a: own.wav changed after it was registered; provenance no longer matches", "mystery.wav (e, unknown): no known licence; find the source or replace the file", "nc.wav (d, cc-by-nc): not allowed in a commercial project: no commercial use"], "warnings": [], "attribution_owed": ["\"Door\" by A. Person (cc-by)", "\"NC\" by C. Person (cc-by-nc)"], "ai_models": [], "note": "a provenance record, not legal advice; store and licence wording changes, see references/rights.md"}
$ echo $?
0

Credits

$ python sfx.py doc sounds.json --kind credits
# Sound credits and licences: demo

Generated from the sound list on 2026-11-07.

## Attribution owed

- "Door" by A. Person (cc-by)
- "NC" by C. Person (cc-by-nc)

## AI tools used to make shipped sound

None recorded.

## Every file

| Sound | File | Type | Source | Licence |
|---|---|---|---|---|
| a | own.wav | procedural | modal | procedural |
| b | found.wav | library | Freesound | cc0 |
| c | by.wav | library | Door | cc-by |
| d | nc.wav | library | NC | cc-by-nc |
| e | mystery.wav | unknown | ? | unknown |
$ echo $?
0

Sounds it will not copy

The skill declines to recreate a named film's sounds or a famous sound mark and offers an original built from acoustic traits. That rule lives in the skill's instructions. sfx.py itself does not filter prompts.

Clone this wiki locally