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 5 months ago
I am still unsure why Wavlake decided to work now… is it because I linked my google in the insecure way rather than just logging in with my credentials? And still outset that there was no way to contact anyone to rectify the issue. But, for now, I have a Nostr method to publish some music. View quoted note →
Josephus's avatar
Josephus 5 months ago
I keep seeing stuff about everything but Nostr being up but my client keeps crashing
Josephus's avatar
Josephus 5 months ago
🤣 “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 →
Josephus's avatar
Josephus 5 months ago
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** ```
Josephus's avatar
Josephus 5 months ago
This is what I mean by the machine co-opting Bitcoin. “Yeah, you can use your Bitcoin, if you rejoin our digital ID, keystroke tracking, social credit system. We are willing to compromise on the currency so long as you accept the rest.” In any compromise between food and poison, it is only death that can win—Ayn Rand View quoted note →