Josephus's avatar
Josephus
Josephus@NostrAddress.com
npub1te6e...eqew
American Nationalist, rational empiricist, closed borders conservative. Beatboxer, amateur philosopher, aspiring novelist, and outdoor worker.
Josephus's avatar
Josephus 1 month ago
Actually one of the best moves this admin has made. image
Josephus's avatar
Josephus 1 month ago
Makes sense Nostr:nevent1qvzqqqqqqypzq5va97eux485faw5clxlc5exx0d0q2ducl25h6cvkrmhqer0sdg0qyt8wumn8ghj7etyv4hzumn0wd68ytnvv9hxgtcppemhxue69uhkummn9ekx7mp0qy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qpq3eq5jlcjvgq4kpc46vp5ugss4fr5m4fc65fc2lphpjstf4xa5kwsxu8kqg
Josephus's avatar
Josephus 1 month ago
A different AI attempt at the same #vibecode as the other post Below is the **updated NIP-XX draft** that adds: 1. **Rich audio tagging** – distinguish *music vs podcast*, genres, moods, etc. 2. **Album grouping** – the same `npub` can organize tracks into albums (or podcast series). Everything **still uses only Kind 1063 + Kind 1** → **zero relay changes**, 100 % compatible today. --- # 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": "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** ``` --- ## TL;DR – What Changed | Feature | How | |-------|-----| | **Tag audio type** | `t,music` or `t,podcast` | | **Add genres** | `g,rock`, `g,ambient` (repeatable) | | **Group into albums** | `album,"Neon Nights"` + same `npub` | | **Track order** | `track,3` | | **Still 100% relay-safe** | Only uses existing kinds & standard tags | --- **Publish this NIP, and clients can start supporting *tagged, album-organized audio* on Nostr — today.** No relay updates. No new kinds. Just smarter metadata.
Josephus's avatar
Josephus 1 month ago
Anyone want to help me proofread the first thing I’ve ever vibe coded? #vibecoding #nostr #bitcoin 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. This version introduces standardized formatting for track duration, genre, mood, and date to improve clarity and consistency across clients and relays. Specification 1. Kind 1063 – Audio File Metadata (Extended) Tag Required Description url ✅ Yes Direct HTTPS URL to the audio file f ✅ Yes File format: 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 tag – one of: rock, hiphop, ambient, comedy, truecrime, etc. m ❌ No Mood tag – one of: chill, energetic, lo-fi, mysterious, upbeat, etc. 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: npubnickname) i ❌ No Thumbnail / album art URL (recommended 1:1 or 3:2) duration ❌ No Duration in seconds (e.g., 198) All new tags are standard NIP-01 name,value tags → relays store them blindly. Example: Music Track in Album { "kind": 1063, "tags": [ ["url", "https://cdn.example.com/tracks/sunset-drive.mp3"], ["f", "audio/mpeg"], ["size", "5231098"], ["t", "music"], ["g", "synthwave"], ["m", "chill"], ["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 { "kind": 1063, "tags": [ ["url", "https://pod.example.com/ep42.m4a"], ["f", "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": "npub1podcast...", "id": "e5f6g7h8...", "sig": ". .." } 2. Kind 1 – User Post (Unchanged, just references) Client Rendering Rules (Updated) * Detect Kind 1 with e → Kind 1063 * Read all tags from Kind 1063: * Render audio with url + f * Show type badge: 🎵 Music, 🎙️ Podcast, etc. * Show genres as chips: #rock, #hiphop * Show moods as chips: #chill, #energetic * If album exists → show "From: Neon Nights • Track 3" Album Grouping Logic (Client-Side) Clients group audio events from the same pubkey by: * Key = pubkey + album tag value * Steps: * Fetch all Kind 1063 events from a given npub. * Group by: * album tag (if present) → one album * If missing → treat as singles (group under "Singles" or npub name) * Within each album: * Sort by track (numeric or n/total) * Fallback: created_at * Show album view with cover (i tag), tracklist, play-all button. Standardized Formatting Rules Ready-to-Submit NIP Text 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. This version introduces standardized formatting for track duration, genre, mood, and date to improve clarity and consistency across clients and relays. Specification Kind 1063 Tags * url: Direct HTTPS URL to the audio file * f: File format: audio/wav, audio/mpeg, audio/mp4, etc. * size: File size in bytes * t: Audio type tag – one of: music, podcast, audiobook, soundscape, spokenword * g: Genre tag – one of: rock, hiphop, ambient, comedy, truecrime, etc. * m: Mood tag – one of: chill, energetic, lo-fi, mysterious, upbeat, etc. * album: Album / series name * track: Track number: 1, 2, 1/12, etc. * 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 Standardized Formatting Rules * Track Duration: hh:mm:ss (e.g., 3:18 for 198 seconds) * Genre Tag: g,rock, g,ambient, etc. * Mood Tag: m,chill, m,energetic, etc. * Date Format: dd-mmm-yyyy (e.g., 03-Apr-2025) TL;DR – What Changed ✅ Final Thoughts
This version of NIP-XX resolves the ambiguity with the m tag by using f for file format and m for mood. It maintains full compatibility with existing Nostr infrastructure and is ready for adoption by clients and relays.
Josephus's avatar
Josephus 1 month ago
Things have been busy lately and I haven't had much time to maintain presence outside of just posting short beatboxing videos. It seems nostr is doing okay without me.
Josephus's avatar
Josephus 2 months ago
The character sheets for the next season of #thestorygame
Josephus's avatar
Josephus 2 months ago
#homemade herb-rind cheese laminated in #homegrown green onion leaves image
Josephus's avatar
Josephus 2 months ago
@primal I’ve tried “updating” the wallet at least 10 times now. What’s going on? image