Access denied

This page is only for the streamer’s Nostr key.

Admin

Settings

Provider:
Zap Stream

Stream Days

Loading credits...

Stream Status:

My Stream. My Domain. My Power.

Stream Days are added to your balance after payment is confirmed.
Stream Days run from 00:00 to 24:00 UTC. Activating streaming unlocks the current day only.
A Stream Day is only used when you activate streaming day for that day — it never decreases automatically.

Stream Balance

Managed on simulcast.me.

Go there

Stream Backend

Choose which Zap Stream-style backend to use for metadata + live note.

Active: —

Ignore this box when using simulcast.

Stream Forwarding

Mirror your live stream to Twitch, YouTube, Facebook Gaming, Kick, Trovo, or a custom RTMP target

Forwarding is handled on Zap Stream’s servers and depends on their current backend status.

The checkbox pauses or resumes a saved destination. Use Delete destination to remove it permanently, or Reconnect to repair an older forwarding entry. Saved stream keys are never displayed here.

managed on simulcast.me.

Go there.

✉️ Live Email Announcement

Manually email verified subscribers after your player is live. LFL never sends this automatically when OBS connects or reconnects.

Loading verified subscriber count…
LFL sends exactly the message above. Include any stream link you want subscribers to receive. This draft is remembered on this browser after sending.
SMTP must be configured in Tab4. Sending is manual and one campaign is allowed per stream.

📡 Live Stream Event

When using Simulcast you must use this feature.

  1. Start streaming in OBS using your Simulcast RTMP + key.
  2. Open /live/ and wait for your stream to appear.
  3. Come back here and press Start Live Stream.
  4. When you finish streaming, press End Live Stream.
Waiting for streamId from /live/ and Nostr extension…

📝 Live Stream Information

Add your live stream information.

Waiting for streamId from your Let's Fo Live page…

📣 Live Stream Announcement

Publish a "I'm live" Nostr note.

Paste this into your announcement if you want a Nostr preview card.

Notes can be published offline. Nostr stream links require a live stream.

Stream Backend Servers

Zap Stream backends. Use the button inside one backend card to load only that server, or use the button below to load them all. See your dot balance, RTMP URLs, keys, tiers, and raw endpoint JSON.

balance info..
Dot are usage units used to power live streaming.

Ignore this box when using simulcast

Backend Control

Optional control service for Zap Stream-owned NIP-53 events. Leave this disabled on normal streamer instances. Backend operators can enable it to let verified stream hosts update recordings and metadata without receiving the backend private key.

The file path is saved, but the key itself is never returned by the API or exposed in public LFL JSON.

This does not delete Cloudflare files. It removes stale backend URLs from finished Nostr events while preserving a later YouTube, Rumble, or other replay saved with ➕ Add.

Allowed host operations
Disabled by default.

Terms of Service

Instructions:
Go to Tab1. Under the section "Stream Backend" select a backend using the radio button. Then come back here and accept the terms. Do this for each backend. If you don't accept the terms the backend will block you from streaming.
You only have to do this once.

Change the radio button if you want to check your Terms status…

Terms: zap.stream/tos

Terms are managed on simulcast.me.

OBS Widgets

Drop these in OBS as browser sources.

Chat Zap Attack Total Zaps Top Zaps Viewers Chatters Countdown Balance  

Mobile Chat Console

Combined chat view + send box. Type to viewers or monitor your chat from your phone while streaming.

Chat console

How to Go Live (Quick Steps)

  1. Tab1 - Activate streaming.
  2. Tab2 - Click View this backend on one server, or View All Backend Information, to get your RTMP URL and stream key.
  3. Tab2 - Top up the selected backend server if needed.
  4. Tab1 - In Stream Backend, select the same backend you chose in step 2 using the radio buttons.
  5. Tab1 - Fill in your Live Stream Information and Live Stream Announcement (do not click on "Publish" yet).
  6. OBS - Enter the RTMP URL and stream key into OBS, then click Start Streaming.
  7. Live - Open your /live/ page and wait for the stream to appear. Refresh the page if necessary.
  8. Tab1 - Return to the admin panel. Click Publish on Live Stream Information & Live Stream Announcement.
  9. Tab1 - Live Stream Announcement is optional.
  1. Tab1 - Activate streaming.
  2. Simulcast - Get your RTMP URL, stream key, and set up NWC on simulcast.me.
  3. Tab1 - Fill in your Live Stream Information and Live Stream Announcement (do not click on "Publish" yet).
  4. OBS - Enter the RTMP URL and stream key into OBS, then click Start Streaming.
  5. Live - Open your /live/ page and wait for the stream to appear. Once it’s live, return to the Admin Panel.
  6. Tab1 - In the Live Stream Event section, click Start Live Stream.
  7. Tab1 - Click on "Publish" on Live Stream Information & Live Stream Announcement.
  8. Tab1 - Live Stream Announcement is optional.
  9. Tab1 - Don't forgot to click on "End Live Stream" after you finish streaming.

Media Storage

Choose where LFL stores uploaded media. Local is safe for small files. Backblaze B2 is recommended for large 4K videos and keeps big uploads off your LFL server.

Detecting limits…
Backblaze direct upload requires a custom CORS rule that allows browser PUT requests from this LFL domain.
One-time CORS setup key (no CLI)

Your permanent bucket-restricted media key cannot change bucket CORS. If the test reports missing writeBuckets, create a temporary Backblaze app key with access to All buckets and Read and Write, paste it here, and run the test again. LFL uses it only for this request, does not save it, and you should delete the temporary key in Backblaze afterward.

Loading storage settings…

LFL Media Server (Amethyst)

Add this address in Amethyst as a media/Blossom server. Amethyst will upload images and videos to this LFL instance and insert the protected LFL viewer URL into your note. Only the configured instance owner can upload.

Preparing media-server check…

No extra cron job is required. In Amethyst, leave mirror uploads to all Blossom servers disabled for this LFL server.

Email Delivery (SMTP)

This instance sends its own email. Credentials and subscriber addresses stay in the protected /live/data/ area and are never sent to LFL Core. Configure SPF, DKIM, and DMARC with your email provider for reliable delivery.

Loading SMTP settings…

Send a test email

Subscriber transparency

Owners see masked addresses only in the LFL interface. Viewers see their own full address. Campaign reports count messages accepted by SMTP, failed, or skipped; LFL does not track opens or clicks.

Loading subscribers…

Streamer Information

Name: —
Npub —
Pubkey (hex) —
Loading the newest local Nostr profile…

Nostr Profile kind:0

Name, avatar, bio, website, and NIP-05 come from the newest signed profile in this LFL database. Saving writes locally first; Cron5 synchronizes the same signed profile to every configured relay group.

Name
Username
Avatar URL
Banner URL
About
Website
NIP-05
—

Existing profile fields that LFL does not edit—including the Nostr Lightning address—are preserved in the replacement event.

LFL Instance Settings

These settings apply only to this LFL installation. They do not replace or republish your signed Nostr profile.

⚡ Lightning Address
LFL deliberately uses this address instead of the Lightning address in your Nostr profile. This is useful for testing or directing LFL zaps to a different wallet.
LFL Icon URL
Optional custom PNG/JPG/WebP badge shown after your username around LFL. LFL shrinks it automatically. This is separate from your Nostr avatar; SVG is not allowed.
Country
Pick your country for the LFL Network Directory. Changing country does not require domain re-verification; the directory syncs it from this LFL instance.
Gender
Badge preview
Optional. If selected, this explicit LFL profile field is included in the verified Nostrich Network directory. LFL never guesses gender from a name, avatar, or ordinary Nostr profile.
Balance widget
Voice chat
—
LFL Version –

LFL Sync Backup

Keep signed copies of your personal LFL Nostr archive on mutual, verified LFL friends. Backups are stored in an isolated database and never appear in the host's feeds. Both instances must opt in and remain activated.

Loading Sync Backup…
How this first backup version works

LFL uses a dedicated server transport key, not your Nostr private key. Every batch and storage receipt is signed. Every valid owner-authored event and every valid event carrying the owner's p tag is eligible. Unrelated cached Watchlist events, media files, SMTP data, configuration, login sessions, and secrets are excluded. Restore controls and NWC payments will be added later without changing the stored event format or receipt ledger.

LFL Relay Access

Access

Paid LFL relay

wss://relay.letsfo.com
Loading…

Loading relay access…

Checking entitlement —

Access follows the instance owner’s Nostr pubkey and also works in Amethyst or another Nostr client.

Annual access: 1,000 sats for 365 days.

Relay Settings

Nostr relay groups

You may use the same relay in several groups, but the groups do different jobs. The installer supplies starter lists automatically; you can specialize the lists here afterward. Enter one wss:// relay per line.

Important: wss://relay.letsfo.com is required and is restored automatically when these settings are saved. A specialized group does not normally inherit changes made to another group.

Signer connection relays signerRelays

Used only to connect LFL with QR/remote signer apps. An unavailable relay is skipped without stopping the others.

ⓘ Signer relay behavior

These relays transport encrypted NIP-46 connection messages; they do not control where LFL publishes streams, chat, notes, or media. wss://relay.letsfo.com is always restored when Relay Settings are saved. Other entries may be changed after installation.

General relays relays

General compatibility and fallback list. It is not a master list that automatically controls every LFL feature.

ⓘ Where this is used

Shared or older Nostr features may use this list when they have no dedicated relay group. The OBS chat viewer can fall back to it when commentRelays is unavailable, and older livestream configurations can reach it after their dedicated fallbacks are empty.

Live chat relays commentRelays

Reads and publishes livestream chat activity in the sidebar and OBS chat widget.

ⓘ Spam and visibility tradeoff

These relays carry livestream comments, reactions, zap receipts, and chat profile lookups. Cron5 also sends the owner's locally saved Nostr profile here. The sidebar publishes comments and reactions here. A smaller trusted or paid list can reduce spam, but chat or zaps available only on other relays will not appear.

Notes and feed relays notesRelays

Publishes your notes and supplies the background database sync for My Notes and Notes Feed.

ⓘ How the local feed works

Cron5 publishes locally queued notes and their Nostr deletion requests here. Cron3 imports streamer activity; Cron4 rotates through this list to import followed-account activity and engagement into SQLite. My Notes and Notes Feed then load from the local database. If a note exists only on an unconfigured relay, LFL does not know it exists and does not automatically search that relay for the missing note.

Livestream discovery relays liveStreamRelays

Supplies Cron2 with livestream events for the cached Nostr Live Network, stream status, and the owner's Past Streams history.

ⓘ Read/cache behavior

Cron2 rotates through these relays for recent kind:30311 events, a bounded owner-history backfill, related profiles, and relevant deletion requests, then stores the results in SQLite. This list controls what LFL discovers; it does not control where a streaming provider publishes the original stream event.

Video relays videoRelays

Publishes owner notes containing video and synchronizes My Media video favourites and recording-list events.

ⓘ Local cards versus relay activity

My Media loads owner-published media from local SQLite, while My Uploads remains the separate upload and staging page. LFL then performs selected relay lookups in the background. Cron5 publishes locally queued media notes, video deletion requests, and kind:30005 favourites or recording lists here. Media Network discovers public media through the configured Nostr relays.

—

Relay Health

📡 Nostr Relay Checks

LFL checks actual relay behavior. Advertised payment information is shown only as a hint; successful reads and genuine LFL publication results are authoritative.

Loading relay status…

Relay counts and local authored counts use the same owner-author filter, but NIP-45 returns no event IDs, so LFL does not invent a “missing” number by subtraction. Use the existing Backfill tool to retrieve relay events; local ingestion deduplicates them by event ID. Write access is learned from genuine LFL publications—no fake notes are sent.

Stream Server Providers

Configure the Zap Stream-compatible servers that LFL can use for stream creation and management.

Simulcast
Service providers
One hostname per line (no paths). Every entry is treated as a Zap Stream-compatible provider at https://hostname/api/v1/ and appears throughout the admin panel after saving. Remove a hostname here to remove an unavailable provider. s1.letsfo.com is always kept as the official LFL backend.
—

Database Information

Checking maintenance history…

Occasional maintenance for an older upgraded instance or database-backed pages that have become unusually slow. It repairs query indexes and refreshes SQLite planner statistics; it does not delete events or media. This is not a button to press routinely. Pages may briefly slow while it runs, and Cron4 can finish a queued job if you close Admin.

LFL separates owner-authored and owner-tagged events from cached network events in the report without moving or copying the SQLite database.

Nostr Network Domain Verification

Status: Unknown

To be listed on the LFL Networks, your domain must publish /.well-known/lfl.txt once to prove the domain and streamer pubkey. Country is synced separately and can be changed later without editing the file.

Official LFL NIP-89 Application Identity

Publishes or updates the one official kind:31990 application event used by every LFL installation. This button uses the existing browser signer and works only when the official LFL account is connected. LFL never requests, stores, or displays the account's private key.


    
Checking local event…

Backfill (relays → local LFL database)

Select one configured relay for a controlled recovery, or process all configured relays. Backfill now works through bounded date windows and does not call a relay complete until it receives EOSE for every window.

Mentions and engagement still use LFL’s relevant-event filters. Every received event keeps the existing signature validation and event-ID deduplication.

Idle.

  

Mirror my events (local LFL database → relays)

This copies your existing authored events from your local database to one selected configured relay, or all configured relays. It does not edit your events.

Idle.

Protected data directory

LFL configuration, keys, SQLite data, synchronization state, and original uploads live under /live/data/. Browsers must never be able to list or download that directory directly.

Status
Checking…
Browser test
—
—

Cron installation mode

Choose the environment that actually runs this instance. LFL changes the copyable commands and health timing without changing what each worker does.

Loading cron mode…

—

Cron1 status (auto-activate stream day)

If Auto-Activate is enabled in Tab 1, this cron automatically activates the current Stream Day shortly after midnight UTC each day. If Auto-Activate is disabled, the streamer must activate each new Stream Day manually.

Status
Loading…
Last run
—
Last action
—
Enabled
—
—

Cron2 status (live Network & stream status)

This cron synchronizes recent kind:30311 livestream events from the configured livestream relays. It keeps the Nostr Live Network, current LIVE or ENDED stream status, previous-stream information, and streamer profile data up to date. If it stops, the Live Network and live page may show outdated information.

Status
Loading…
Last check-in
—
—

Cron3 status (my-notes & streamer activity)

This cron imports recent Nostr activity authored by or involving the streamer, including notes, replies, quotes, reposts, reactions, zaps, Guest Notes, profile updates, contact lists, and long-form articles. It keeps /live/notepad/notes/ current and fast. If it stops, My Notes and related streamer activity may become outdated.

Status
Loading…
Last seen
—
—

Cron4 status (notes-feed & people networks & DB maintenance)

This cron alternates between synchronizing recent activity involving the streamer and recent activity from accounts the streamer follows. Its bounded people phases also refresh the Watchlist, discover and confirm the Audience, and cache the verified Nostrich Network. It keeps /live/notepad/notes-feed/, the Nostr Notes Network, and related activity views current. It also purges expired Notes Feed cache rows and performs scheduled SQLite maintenance. If it stops, Notes Feed, the Notes Network, and people pages may become outdated, expired cache rows will not be purged, and database maintenance will not run.

Status
Loading…
Last seen
—
—

Cron5 status (outbox and relay mirroring)

This cron publishes locally queued notes, profiles, deletions, and favourites first, then advances any active setup mirror job. If it stops, events remain safe in the local database and outbox but will not synchronize to every configured relay until the worker resumes.

Status
Loading…
Last seen
—
—

Updates

Support: Forum

The Upgrade Assistant replaces program files while preserving /live/data/, your instance configuration, uploads, keys, and assigned card/profile images. Ordinary releases do not copy or modify the SQLite database.

Loading preflight…

    

Stable Updates

Checking the stable channel…

      

Developer Updates ⚠️

Experimental builds are available only when this instance owner's npub or public key appears in the developer feed allowlist.

Checking developer access…

      
💌