# 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:
1. **Additive, not proprietary.** A Starweave session, FL Studio project or Krita file sits inside the folder untouched. The manifest describes it.
2. **Every AI action is an edit record.** It is never just "AI was used."
3. **Human-readable first.** `NOTES.md` should make sense to someone who never opens the JSON.
4. **Optional signing.** v0.1 uses SHA-256 hashes only. Cryptographic signing could later align with [C2PA Content Credentials](https://spec.c2pa.org/).

## 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 `roles` that matches music-credit standards (e.g., role-specific AI credits like those [Spotify describes](https://newsroom.spotify.com/2025-09-25/spotify-strengthens-ai-protections/)); 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.
