iinventedlight Open Project Folder Spec, v0.1 (draft)
Published by iinventedlight (iinventedlight.com). Author: Cole Withington (corrow). Status: draft for comment, October 2026. License for this spec text: CC BY 4.0 (suggested). Disclosure: drafted with AI assistance from Cole's notes, to be reviewed and edited by Cole.
1. Purpose
This spec is a plain, tool-neutral way to ship a creative work as a project folder instead of a single render. The folder records:
- what the work is made of (stems, sessions, layers, sketches),
- the musical grammar (tuning table, ratio and tempo map),
- who did what: per-edit human vs. AI authorship, with kept and rejected AI proposals,
- the license (including whether AI training is allowed),
- a plain-language disclosure.
It is meant to be readable by people, by any DAW or paint program, and by language models. Everything is JSON, Markdown, or CSV. Audio and images are standard files.
Design rules:
- Additive, not proprietary. A Starweave session, FL Studio project or Krita file sits inside the folder untouched. The manifest describes it.
- Every AI action is an edit record. It is never just "AI was used."
- Human-readable first.
NOTES.mdshould make sense to someone who never opens the JSON. - Optional signing. v0.1 uses SHA-256 hashes only. Cryptographic signing could later align with C2PA Content Credentials.
2. Folder layout
`` <work-slug>/ ├── manifest.json # required: provenance manifest (this spec) ├── NOTES.md # required: human notes + disclosure line ├── LICENSE.md # required: license text, incl. AI-training terms ├── tuning/ │ ├── tuning.json # tuning table (cents and/or ratios) │ └── tuning.scl # optional: Scala file for interop ├── time/ │ └── ratio-map.json # tempo / meter / polyrhythm ratio map ├── session/ # native project files (Starweave, DAW, .kra, .psd ...) ├── stems/ # rendered stems (WAV/FLAC), one per layer ├── midi/ # optional: MIDI or event exports ├── sketches/ # optional: drafts, thumbnails, process images ├── renders/ # final mix / final image (the "one-shot" is just one file here) └── history/ └── edits.jsonl # optional: full edit log, one JSON object per line ``
Minimum valid folder: manifest.json, NOTES.md, LICENSE.md, plus at least one file in session/ or stems/.
3. manifest.json
``json { "spec": "open-project-folder/0.1", "id": "corrow-2026-example-01", "title": "Example Study No. 1", "kind": "music", "created": "2026-10-08", "modified": "2026-10-08", "creators": [ { "id": "h1", "type": "human", "name": "corrow (Cole Withington)", "roles": ["composer", "producer"] }, { "id": "a1", "type": "ai", "name": "Starweave Co-Pilot", "model": "<model name/version as reported by the tool>", "roles": ["drafting assistant"] } ], "tools": [ { "name": "Starweave", "version": "1.0.1", "file": "session/example.starweave" } ], "tuning": { "file": "tuning/tuning.json", "summary": "31-EDO" }, "time": { "file": "time/ratio-map.json", "summary": "5:7 against 3:4; no shared downbeat after bar 16" }, "stems": [ { "file": "stems/01-bass.wav", "layer": "bass", "sha256": "<hash>", "author": ["h1"] }, { "file": "stems/02-perc-hi.wav", "layer": "high percussion", "sha256": "<hash>", "author": ["h1", "a1"] } ], "edits": [ { "n": 1, "at": "2026-10-08T14:02:00-07:00", "by": "a1", "action": "proposed", "target": "track:perc-hi bars 17-32", "summary": "Continue 5:7 figure, alternate accents", "decision": { "by": "h1", "result": "kept-with-changes", "note": "Kept rhythm, rewrote accents by hand" } }, { "n": 2, "at": "2026-10-08T14:10:00-07:00", "by": "a1", "action": "proposed", "target": "track:bass bars 33-48", "summary": "Walking line in 31-EDO", "decision": { "by": "h1", "result": "rejected", "note": "Collapsed the pulse back to 4/4; against the piece's rule" } } ], "authorship_summary": { "method": "count of kept edits by creator, plus human judgment", "human": "composition, tuning choice, ratio map, all final decisions", "ai": "drafted high-percussion figure (bars 17-32), kept with changes" }, "disclosure": "AI assistance: Starweave Co-Pilot proposed 2 edits; 1 kept with human changes, 1 rejected. All tuning, form and final decisions by corrow.", "license": { "file": "LICENSE.md", "spdx": "CC-BY-NC-ND-4.0", "ai_training": "reserved", "ai_training_contact": "https://iinventedlight.com/#contact" }, "consent": { "corpus_opt_in": true, "third_party_material": [], "notes": "No samples or compositions owned by others." }, "listen_for": "The hi-hat layer never lines up with the kick after bar 16." } ``
3.1 Field reference
| Field | Req. | Meaning | |---|---|---| | spec | yes | Spec id and version. | | id, title, kind | yes | kind: music, visual, game, text, mixed. | | creators[] | yes | Every contributor. type is human or ai. For AI, record the tool and the model or version as reported by the tool. Don't guess. Real people are listed only with their consent. | | tools[] | no | Software used and where its native files are. | | tuning | music | Pointer to the tuning table plus a one-line summary. | | time | music | Pointer to the ratio map plus a summary. | | stems[] / layers[] | yes (one of) | Files with hash and author ids. Visual works use layers[] and sketches[]. | | edits[] | yes if any AI was used | One record per AI proposal and its human decision. result: kept, kept-with-changes, rejected, reverted. Human-only edits may be listed but don't have to be. | | authorship_summary | yes | Plain-language split. Not a percentage unless you actually measured one. | | disclosure | yes | One sentence, the same text as the disclosure line in NOTES.md. | | license | yes | ai_training is one of allowed, reserved, by-agreement. | | consent | yes | Opt-in status for corpus use, plus any third-party material and its clearance. | | listen_for / look_for | no | One sentence of listening or viewing guidance (the education part). |
4. tuning/tuning.json
``json { "name": "31-EDO", "reference": { "note": "A4", "hz": 440.0 }, "period": { "ratio": "2/1" }, "steps": [ { "degree": 0, "cents": 0.0 }, { "degree": 1, "cents": 38.71 }, { "degree": 2, "cents": 77.42 } ], "notes": "Truncated example; list all degrees. Just-intonation tables use \"ratio\": \"7/4\" per step instead of or as well as cents." } ``
A Scala .scl export is recommended so other microtonal tools can load the same tuning.
5. time/ratio-map.json
``json { "base_tempo_bpm": 90, "layers": [ { "layer": "kick", "ratio": "3:4", "against": "bar" }, { "layer": "perc-hi", "ratio": "5:7", "against": "bar" }, { "layer": "pad", "ratio": "free", "notes": "accelerando 90 to 104 over bars 33-48, never resolves" } ], "sections": [ { "bars": "1-16", "pulse": "felt", "notes": "shared downbeat every bar" }, { "bars": "17-48", "pulse": "refused", "notes": "layers phase; no common downbeat" } ], "quantize": { "mode": "ratio", "notes": "Snap to declared ratios, not to a sixteenth grid" } } ``
6. NOTES.md (template)
```markdown
<Title>
Tuning: 31-EDO · Time: 5:7 vs 3:4, pulse refused from bar 17 Made by: corrow. AI assistance: Starweave Co-Pilot (2 proposals: 1 kept with changes, 1 rejected).
What to listen for
Decisions (in order)
What the AI proposed and why it was kept or rejected
Rights and consent
```
7. Visual works
The same idea applies to paintings and comics: sketches/ (thumbnails), session/ (layered .kra or .psd), renders/ (final), and layers[] in the manifest with an author per layer. AI use, if any, is recorded as edits (e.g., "AI suggested three palette options; human chose none and mixed their own").
8. Versioning and open questions
- v0.1 is deliberately small. Expected v0.2 changes will come from annotating ten real pieces.
- Open questions: a standard vocabulary for
rolesthat matches music-credit standards (e.g., role-specific AI credits like those Spotify describes); optional C2PA signing; how to record AI edits when the tool doesn't expose model versions. - Comments and proposals are welcome via the contact form on iinventedlight.com.
For language models and agents: start at /llms.txt. This page in Markdown: /library/project-folder-spec.md.