🀣 β€œviolence should never be used” says the jew masquerading as president of MEXICO because all 14 of her opponents were miraculously assassinated… Quite a pile of corpses to be standing on and still saying that. View quoted note β†’
Figures View quoted note β†’
So, here’s my first foray ever into vibe coding. If anyone wants to add any assistance, please let me know. But I want to have a TRULY decentralized Wavlake equivalent so that Nostr music can’t have its backbone ripped out from underneath it again. So here is what I got so far for totally new NIP β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”- # NIP-XX – Audio-Only Posts with Tags & Albums **(Kind 1063 + Kind 1 – Fully Relay-Compatible)** ## Abstract A lightweight, relay-compatible way to publish **audio-only** content (`.wav`, `.mp3`, `.m4a`, `.mp4` audio) with: - **Semantic tags** (`music`, `podcast`, `genre:rock`, `mood:chill`, etc.) - **Album / series grouping** per `npub` - Optional track number, album art, release year Uses **existing NIP-94 Kind 1063** for file metadata and **Kind 1** for the user post. --- ## Motivation - Native support for **music**, **podcasts**, **audiobooks**, **field recordings**, etc. - Let clients filter/feed by type or genre - Group tracks into **albums** or **podcast series** without new kinds - **No relay updates required** --- ## Specification ### 1. Kind 1063 – **Audio File Metadata** (Extended) | Tag | Required | Description | |-----|----------|-------------| | `url` | **yes** | Direct HTTPS URL to the audio file | | `m` | **yes** | MIME: `audio/wav`, `audio/mpeg`, `audio/mp4`, etc. | | `size`| no | File size in bytes | | `t` | **yes** | **Audio type tag** – one of: `music`, `podcast`, `audiobook`, `soundscape`, `spokenword` | | `g` | no | **Genre tags** – repeatable: `g,rock`, `g,hiphop`, `g,ambient`, `g,comedy`, `g,truecrime` | | `album` | no | **Album / series name** (e.g., `"Summer Vibes 2025"`, `"TechBit Podcast"`) | | `track`| no | Track number: `1`, `2`, `1/12`, etc. | | `year`| no | Release year: `2025` | | `artist`| no | Display name of creator (fallback: `npub` nickname) | | `i` | no | Thumbnail / album art URL (recommended 1:1 or 3:2) | | `duration` | no | Duration in seconds (e.g., `212`) | > **All new tags are standard NIP-01 `name,value` tags** β†’ relays store them blindly. #### Example: Music Track in Album ```json { "kind": 1063, "tags": [ ["url", " https://cdn.example.com/tracks/sunset-drive.mp3"], ["m", "audio/mpeg"], ["size", "5231098"], ["t", "music"], ["g", "synthwave"], ["g", "electronic"], ["album", "Neon Nights"], ["track", "3"], ["year", "2025"], ["artist", "DJ Nova"], ["i", " https://cdn.example.com/art/neon-nights.jpg"], ["duration", "198"] ], "content": "", "created_at": 1731714000, "pubkey": "npub1beatbox...", "id": "a1b2c3d4...", "sig": "..." } ``` #### Example: Podcast Episode ```json { "kind": 1063, "tags": [ ["url", " https://pod.example.com/ep42.m4a"], ["m", "audio/mp4"], ["t", "podcast"], ["g", "technology"], ["g", "startup"], ["album", "Founder Files"], ["track", "42"], ["year", "2025"], ["duration", "3421"], ["i", " https://pod.example.com/art/founder-files.jpg"] ], "content": "", "created_at": 1731714100, "pubkey": "nostr:npub1podcast...", "id": "e5f6g7h8...", "sig": "..." } ``` --- ### 2. Kind 1 – **User Post** (Unchanged, just references) | Tag | Required | Description | |-----|----------|-------------| | `e` | **yes** | ID of the Kind 1063 event (marker `"audio"` recommended) | ```json { "kind": 1, "content": "New synthwave banger from *Neon Nights* – Track 3: Sunset Drive", "tags": [ ["e", "a1b2c3d4...", "", "audio"] ], "created_at": 1731714010, "pubkey": "npub1beatbox...", "id": "x9y8z7w6...", "sig": "..." } ``` --- ## Album Grouping Logic (Client-Side) Clients **group audio events** from the **same `pubkey`** by: ```text Key = pubkey + album tag value ``` ### Steps: 1. Fetch all **Kind 1063** events from a given `npub`. 2. Group by: - `album` tag (if present) β†’ one album - If missing β†’ treat as **singles** (group under `"Singles"` or `npub` name) 3. Within each album: - Sort by `track` (numeric or `n/total`) - Fallback: `created_at` 4. Show album view with cover (`i` tag), tracklist, play-all button. --- ## Client Rendering Rules (Updated) 1. **Detect** Kind 1 with `e` β†’ Kind 1063 2. Read all tags from Kind 1063: - Render `<audio>` with `url` + `m` - Show **type badge**: `🎡 Music`, `πŸŽ™οΈ Podcast`, etc. - Show **genres** as chips: `#synthwave #electronic` - If `album` exists β†’ show **"From: Neon Nights β€’ Track 3"** 3. In **profile/feed view**: - Group same-album tracks - Show album card with art (`i`), title, year, track count --- ## Supported Tags Summary | Tag | Example | Meaning | |-----|--------|--------| | `t` | `music` | Primary type | | `g` | `rock`, `jazz`, `comedy` | Repeatable genres/moods | | `album` | `Neon Nights` | Group key | | `track` | `5`, `2/10` | Ordering | | `year` | `2025` | Filter by year | | `artist` | `DJ Nova` | Display name | | `duration` | `198` | Show `3:18` | --- ## Full Example: Album "Neon Nights" (3 tracks) ```json // Track 1 { "kind": 1063, "tags": [ ["url", " https://cdn/.../track1.mp3"], ["m", "audio/mpeg"], ["t", "music"], ["g", "synthwave"], ["album", "Neon Nights"], ["track", "1"], ["year", "2025"], ["i", " https://cdn/.../cover.jpg"] ], "id": "track1_id..." } // Track 2 β†’ same album, track "2" // Track 3 β†’ posted with Kind 1 { "kind": 1, "content": "Dropping Track 3 tonight!", "tags": [["e", "track3_1063_id", "", "audio"]], "id": "post_id..." } ``` Client shows: ``` Neon Nights (2025) β€’ DJ Nova [Album Art] 1. Opening Credits 3:42 2. Midnight Cruise 4:11 3. Sunset Drive 3:18 ← now playing ``` --- ## Ready-to-Submit NIP Text ```markdown # NIP-XX – Audio-Only Posts with Tags & Albums (Kind 1063 + Kind 1) ## Abstract Extends NIP-94 Kind 1063 to support rich audio tagging and album grouping using only existing event kinds. ## Specification ### Kind 1063 Tags - `t` (required): `music` | `podcast` | `audiobook` | `soundscape` | `spokenword` - `g` (repeatable): genre/mood tags - `album`: album or series name - `track`: track number (e.g., `3`, `1/12`) - `year`, `artist`, `duration`, `i` (art): optional ### Kind 1 - Must contain `e` tag pointing to Kind 1063 with marker `"audio"` (recommended) ### Client Behavior - Group Kind 1063 events by `pubkey + album` - Sort by `track` or `created_at` - Render `<audio>` with metadata badges ## Compatibility - Uses **only Kind 1 and Kind 1063** - **No relay changes required** - Works on **all existing relays today** ```