Nostr Poster
An automated content posting bot for Nostr networks. This tool allows you to schedule regular posting of images and videos to Nostr relays, supporting both NIP-94 and Blossom upload services.
Nostr Poster
Table of Contents
Priority Order
- Bot Profile Management: Complete proper profile creation, editing, and publishing
- Relay Management: Improve relay selection and management interface
- Test Auto-Posting: Ensure the scheduling system works correctly
To-Do List
Bot Profile Management Enhancements
- Add upload fields to both the "Create Bot" modal and "Bot Settings" modal
- Create a consistent interface for profile images across both modals
- Implement preview functionality for selected images
- Connect these uploads to the NIP-96/Blossom media servers
- Ensure proper kind 0 event creation with all required metadata fields
- Display confirmation after successful publishing with NIP-19 encoded identifiers
- Add a visual indicator to show when a bot's profile needs publishing (outdated)
- Create new file input fields in both modals with preview capability
- Create a shared function for uploading profile images to media servers
- Update the
CreateAndSignMetadataEvent
function to include all necessary fields for a proper NIP-01 metadata event - Add an explicit "Publish Profile" button to push the kind 0 event to relays
Relay Management Improvements
- Create a more intuitive relay management interface
- Add ability to categorize relays (read, write, both)
- Include relay testing functionality
- Add a "recommended relays" quick-add option
- Create a dedicated relay management component in the bot settings modal
- Add quick-add buttons for popular relays
- Include relay status indicators
- Implement relay tests (ping/connection checks)
Post Scheduling and Auto-Posting Testing
- Add detailed logging for scheduled posts
- Create a manual trigger for testing scheduled posts
- Implement a post history view
- Add a "test now" button that triggers an immediate post attempt
- Create a dedicated tab or view for post history
- Implement proper error logging and status tracking
Code Changes Required
- Modify
index.html
- Add profile image/banner upload fields - Modify
main.js
- Add functions for handling profile image uploads - Create a new component for relay management
- Modify
events.go
- Ensure metadata events are properly formatted - Modify
bot_service.go
- Enhance profile publishing logic - Modify
routes.go
- Add endpoints for profile image management
Features
- Media Management: Upload content to either NIP-94/96 compatible servers or Blossom storage servers
- Scheduled Posting: Configure posting intervals for automated content sharing
- Multiple Bot Support: Manage multiple bot identities, each with their own keypair
- Keypair Management: Create new keypairs or import existing ones
- Relay Configuration: Configure which relays to publish to for each bot
- Profile Management: Set up and publish bot profiles (name, bio, avatar, etc.)
- Content Archiving: Posted content gets archived to avoid duplicate posts
Installation
Requirements
- Go 1.18 or higher
- SQLite 3
Building from Source
- Clone the repository:
git clone https://github.com/yourusername/nostr-poster.git
cd nostr-poster
- Build the application:
make build
- Run the application:
make run
Configuration
The application can be configured via a YAML file or environment variables. By default, the config file is located at /config.yaml
.
Example Configuration
app_name: "Nostr Poster"
server_port: 8080
log_level: "info"
bot:
keys_file: "./keys.json"
content_dir: "./content"
archive_dir: "./archive"
default_interval: 60 # minutes
db:
path: "./nostr-poster.db"
media:
default_service: "nip94"
nip94:
server_url: "https://nostr.build/api/upload/nostr"
require_auth: true
blossom:
server_url: "https://blossom.example.com"
relays:
- url: "wss://relay.damus.io"
read: true
write: true
- url: "wss://nostr.mutinywallet.com"
read: true
write: true
- url: "wss://relay.nostr.band"
read: true
write: true
Usage
Set up a Bot
- Navigate to the web interface at
http://localhost:8765
- Log in with your Nostr extension (NIP-07)
- Create a new bot by providing a name and optional keypair
- Configure the posting schedule, media upload service, and relays
- Add content to the bot's content directory
- Enable the bot to start automated posting
Manual Posting
You can also trigger a post manually through the web interface
NIPs Supported
- NIP-01: Basic protocol flow
- NIP-07: Browser extension authentication
- NIP-55: Android signer application (soon TM)
- NIP-94: File metadata
- NIP-96: HTTP file storage
- NIP-98: HTTP authentication
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Description
Languages
Go
57.6%
JavaScript
26.9%
HTML
11.8%
CSS
3%
Makefile
0.7%