Skip to content

dergigi/castr.me

Repository files navigation

Castr.me

Effortlessly turn your npub into a podcast feed.

Overview

Castr.me is a service that automatically generates podcast feeds from Nostr profiles. It converts kind1 events containing audio (and video) file links into a valid Podcasting 2.0 feed.

🌐 Live at: https://castr.me/

How It Works

Castr.me scans a Nostr profile's posts and looks for kind1 events that contain links to audio or video files. When it finds media content, it automatically generates a podcast RSS feed that you can subscribe to in any podcast app.

Important: Castr.me only works for npubs who have actually posted audio or video content to Nostr. If a profile hasn't shared any media files, there won't be anything to convert into a podcast feed. The service will show an empty feed or "No media posts found" message for profiles without media content.

Examples

Finding Content

You can discover profiles that post media using search queries on Nostr search engines. For example:

Features

  • Automatic feed generation from npubs
  • Audio file detection and filtering
  • Podcast 2.0 namespace support
  • Simple and clean HTML interface
  • Zero configuration required
  • Default profile support
  • Show notes support via long-form content
  • Markdown rendering for show notes

Still TODO

  • Create <value> tags based on zap splits
  • Somehow link to transcripts file (and add it to the RSS feed)
  • Implement content negotiation, i.e. render RSS/HTML based on request
  • Properly query relays, the way it's done now is stupid
  • Make stuff configurable, especially what relays to use
  • ...lots of other stuff...

Show Notes

Show notes are implemented using Nostr's long-form content (kind:30023) events. The system links show notes to audio episodes by matching their titles on a best effort basis:

  1. When a kind:1 event contains an audio file, its first line is treated as the episode title
  2. The system searches for a kind:30023 event with a matching title
  3. If found, the long-form content is displayed as expandable show notes under the episode
  4. Show notes are rendered as GitHub-flavored markdown

This allows podcasters to maintain detailed show notes separate from the audio post while keeping them properly linked.

Zap Splits & Value Splits

TL;DR: Whatever is defined in the associated long-form kind:30023 is taken as gospel, and will be used as the basis for the splits. Fallback is the kind:1. Ultimate fallback is the lud06 lightning address set in your nostr profile.

We use zap splits to automatically create Podcasting 2.0 value splits so that Lightning payments can be distributed among multiple recipients when users boost podcast episodes. The system supports both keysend (via nodeid in nostr profile metadata) and lightning addresses (lud16). Keysend is preferred when available. You can add the nodeid field to your profile using metadata.dergigi.com.

If you've created detailed show notes (long-form content, see above) for an episode, any zap splits defined in the long-form post will be used. This allows you to set (and update!) specific payment arrangements for each episode, like splitting revenue with guests or co-hosts.

If no show notes exist, the system looks for zap splits defined directly in the kind1 (read: "tweet") that you used to post the episode. This makes sure that zap splits work for episodes where you haven't created separate show notes.

If no zap splits are found anywhere, payments in the form of zaps or boosts go to the lightning address in your Nostr profile.

See VALUE_SPLITS.md for details.

Installation

# Install dependencies
npm install

# Build the project
npm run build

# Start the server
npm start

Development

# Start development server
npm run dev

# Run tests
npm test

Usage

  1. Access your podcast feed by visiting:

    http://localhost:3000/YOUR_NPUB
    
  2. For RSS feed, use an RSS reader or podcast app with the URL:

    http://localhost:3000/YOUR_NPUB
    

    (The feed will automatically be served as RSS when requested by a podcast app)

Configuration

  • Default relays:
    • wss://relay.nostr.band
    • wss://wot.dergigi.com/
    • wss://wot.utxo.one
    • wss://relay.damus.io

API

GET /

Redirects to the default npub profile.

GET /:npub

Generates a podcast feed for the specified Npub.

  • Parameters:

    • npub (path parameter): The Nostr public key
  • Response:

    • HTML page for browser requests
    • RSS/XML feed for podcast app requests

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

Effortlessly turn your npub into a podcast feed.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •