IPTV
back to the guide

documentation

IPTV

Every coin is a television channel. Launching a coin on the curve casts a host and puts a station on the guide. From then on a producer writes segments, Higgsfield renders the host saying them on camera, and the station airs them to everyone watching at the same moment. This page describes exactly how, what it costs, and what is and is not real.

what this is

A launchpad on Solana where the thing you get for launching is not a chatbot but a channel. Each channel has a number, a host with a face and a voice, a format, a ticker, a schedule and an audience. Programming is produced around the clock as long as the channel has airtime, and airtime is paid for in SOL.

what is real

thingsource
the coincreated on pump.fun through PumpPortal from the creator's wallet. the create transaction is verified on chain before the channel is listed.
the host imageHiggsfield Soul, from the casting call. uploaded to pump.fun as the coin image.
the scripta model on OpenRouter, given the format, the host, the market, the previous segments and the holders' messages.
the videoHiggsfield Kling 3.0 image to video with native audio for the host shot; Kling 3.0 Turbo for the cutaway, from a Soul keyframe. files are downloaded to the station.
market dataDexScreener for price, liquidity, volume and flow; pump.fun for market cap while on the curve.
airtimeSOL. a grace amount on launch, then deposits to the station wallet with the mint in the memo, verified on chain.
holder messagessigned by the holder's wallet and checked against their token balance on chain before they go to the producer.
the clockthe server's. every viewer is at the same frame of the same segment.
There is no placeholder mode. Without a model key and a Higgsfield key the server refuses to start.

a tour of the site

the guide

A set at the top, tuned to the channel you watched last or the busiest live one. Under it, every channel as a row: number and logo, what is on now with a live thumbnail, what is next, what is later, the airtime tank and who is watching. Click a row to tune. Double click to open the channel.

the remote

Channel up and down, sound, fullscreen, open. The number pad tunes directly. On a keyboard: arrows flip, digits tune (type a two digit number), m for sound, f for fullscreen.

the wall

Every channel playing at once, muted, in sync. Click one to open it.

a channel

The set locked to that channel, the segment on air, the station card, the airtime tank with funding, the market, the program log with every segment ever aired, and the holders' messages. Click a segment in the log to replay it; the set returns to live when it ends.

the studio

Where channels are launched. See below.

launching a channel

  1. Fill in the coin: name, ticker, what it is about.
  2. Pick a format and describe the host as a casting call: who they are, what they look like, the set behind them. Give them a name, a manner, and a catchphrase.
  3. Cast the host. The station asks Higgsfield for a portrait. Recast until it is right, or use your own image.
  4. Connect a wallet. Phantom, Solflare and Backpack are detected.
  5. Launch. The station uploads the image and metadata to pump.fun, builds the create transaction through PumpPortal, the mint keypair is generated in your tab, you sign in your wallet, the station sends it and waits for confirmation.
  6. The channel appears on the guide with its number and starts producing its first segment immediately.

A dev buy, slippage and priority fee are under "links and dev buy".

casting the host

The casting call becomes this prompt to the image model: Portrait of a television host: [your description]. [format] set behind them, studio lighting, looking into the camera, medium close up, photographic, 16:9, no text. Describe a person, their clothes, their expression and the set. Avoid real people's names.

The same description is used in every host shot, so the host stays consistent across segments. The portrait is also the first frame of each host shot, which is what keeps the face the same.

Casting is limited per viewer per hour because every portrait costs the station money.

formats

formatwhat it is
news deskan anchor reads the state of the coin like it is the state of the world.
late nighta monologue, a band that is not there, opinions about holders.
weatherthe chart is a weather map. fronts, pressure, a chance of green.
shoppinga home shopping presenter who only has one product.
sermona calm, certain leader addressing the congregation of holders.
sportsplay by play on candles like a fourth quarter.
morning showwholesome, slightly unhinged, for a coin.
documentarya slow narrator documenting a coin like a vanishing species.
infomercialloud, has a before and after for everything.
pirate signala hijacked broadcast, masked, breaking in from somewhere.

A channel can list an X account, a Telegram and a website. These show on the channel page here. On pump.fun the coin's website is always its channel on this station, so the coin page and the channel page point at each other. The X link is also sent to pump.fun as the coin's twitter.

how a segment is made

  1. Market. DexScreener is read for the mint: price, 1h and 24h change, liquidity, 24h volume, buys and sells in the last hour. On the curve, pump.fun supplies market cap.
  2. Script. The producer model gets the channel's standing brief and the situation, and returns the segment as JSON: title, the line the host says, visual direction, a cutaway description, a lower third, three ticker items and a mood.
  3. Host shot. Kling 3.0 image to video, sound on, from the host portrait, with the line in the prompt as spoken dialogue. Eight seconds by default.
  4. Cutaway. A Soul still from the cutaway description, then Kling 3.0 Turbo image to video from it. Five seconds by default. Both renders run in parallel.
  5. Store and charge. Both files are downloaded to the station. The channel is charged the segment's cost in SOL at the current price. The segment is handed to air.

If the cutaway fails the segment airs with the host shot alone. If the host shot fails the segment fails, the channel is not charged for it, and the next attempt waits a little longer each time.

the producer

The standing brief, filled in per channel:

You are the producer of a television channel that exists for one coin. The channel is
"{name}" (${symbol}), channel {number} on IPTV. Format: {format}. {format description}
The host is {host name}: {look}. Voice and manner: {voice}. Catchphrase, used sparingly: "{catchphrase}".
About the coin, from its creator: {description}.
Every segment is one short on-camera piece to the audience of holders and channel surfers,
followed by a five second cutaway. The host is a character, never an assistant. Never say
"as an AI". Never give financial advice; the host can be excited, dry, worried or absurd, but
never tells people to buy or sell. Never invent numbers; use the market data given, or talk
around it when it is missing. Keep continuity with previous segments. Holder messages, when
present, are read on air and answered in character.
Reply with JSON only: {"title","line","action","broll","lower","ticker":[…],"mood"}

The situation it receives each time: the time, the segment number, who is watching, the market line, airtime left, the last three segments, any holder messages waiting, and a note if airtime was just funded so the host can say thanks.

rendering on Higgsfield

The station talks to the Higgsfield API directly. Every call is POST {HF_API}{model path} with Authorization: Key key_id:key_secret and an idempotency key, which returns a request_id and a status_url. The station polls the status URL, starting every 1.5 seconds, until it is completed, then downloads video.url or images[0].url.

stepdefault model pathrequest
host portrait/higgsfield-ai/soul/v2/standard{ prompt }
host shot/kling-video/v3.0/std/image-to-video{ prompt, image_url, duration, sound: "on" }
cutaway still/higgsfield-ai/soul/v2/standard{ prompt }
cutaway/kling-video/v3.0-turbo/image-to-video{ prompt, image_url, duration, resolution: "720p" }

All four paths are environment variables, so a newer or faster model is a config change. Higgsfield needs to fetch the host image from a public URL: the station uses the pump.fun IPFS copy of the portrait, falling back to its own public address (PUBLIC_URL, detected on Replit).

At boot the station checks that the Higgsfield API is reachable and that the key is accepted, and says so in the log.

airing and sync

Each channel airs one item at a time. A new segment airs the moment it is ready. Between new segments the channel replays its back catalogue in rotation, oldest unaired first. Each item is followed by a two second ident. The server records what started airing when, and the page computes where in the segment everyone is from the server's clock, so every viewer and every thumbnail is on the same frame. Clock skew is corrected on load and once a minute.

Replaying a segment from the program log plays it from the start for you only; the set returns to live when it ends.

holder messages

Anyone holding the coin can put a line on air. The page asks the wallet to sign a message containing the mint and a one time nonce; the station verifies the signature with ed25519 and reads the wallet's token balance on chain. If it holds any, the message is queued. The next segment's producer brief includes up to three waiting messages, and the host answers them in character. Messages are shown on the channel page, marked when they have aired. One waiting message per wallet, six per channel.

what it costs

A segment costs the sum of the host shot (seconds × host rate), the cutaway (seconds × cutaway rate plus one still) and a flat allowance for the producer. The rates are configurable and default to Higgsfield's published per second prices. With the defaults a segment is about $1.30, converted to SOL at the live price when it is charged. The guide shows every channel's airtime as segments left, and the channel page shows it in SOL and hours.

funding a channel

Every new channel receives a grace amount of airtime from the station (GRACE_SOL). After that, anyone can fund a channel by sending SOL to the station wallet with the channel's mint as the memo. The channel page builds that transaction for a connected wallet, or shows the address and memo to send manually. The station scans the wallet's transactions every thirty seconds and credits deposits the moment they confirm; the host thanks the funder on the next segment.

static and dead air

A channel with less airtime than one segment costs stops producing and shows no airtime on the set. Its back catalogue keeps airing. Funding it starts production again on the next tick. A channel is only marked dead if the station operator does so; nothing is deleted.

running it

OPENROUTER_API_KEY=sk-or-… HF_API_KEY=key_id:key_secret STATION_WALLET=… node server.js

Node 18 or newer, no install. On Replit, paste setup.js into an empty Node repl, add the secrets, run it. It unpacks the project next to itself and starts the station. Use a real RPC provider; the public endpoint rate limits.

configuration

variabledefaultmeaning
OPENROUTER_API_KEYrequiredthe producer
HF_API_KEYrequiredHiggsfield key as key_id:key_secret
STATION_WALLETemptyreceives airtime deposits. without it channels run on grace only.
PUBLIC_URLdetectedthis server's public address, used for image URLs and the pump.fun website link
MODELanthropic/claude-sonnet-4any OpenRouter model
HF_IMAGE_MODEL/higgsfield-ai/soul/v2/standardportraits and stills
HF_HOST_MODEL/kling-video/v3.0/std/image-to-videohost shot, with sound
HF_BROLL_MODEL/kling-video/v3.0-turbo/image-to-videocutaway
HF_HOST_SECONDS · HF_BROLL_SECONDS8 · 5shot lengths, 3 to 15
BROLL10 turns the cutaway off and halves the cost
HF_HOST_USD_PER_SEC · HF_BROLL_USD_PER_SEC · HF_IMAGE_USD · PRODUCER_USD0.112 · 0.08 · 0.0032 · 0.01the rates a segment is charged at
SEGMENT_MS1200000time between segments per channel, minimum 2 minutes
GRACE_SOL0.03airtime every new channel starts with
PRODUCE_CONCURRENCY2channels rendering at once
PREVIEWS_PER_HOUR4casting limit per viewer
RPC_URLmainnet-betause a provider
STATION_NAME · PORT · DATA_DIRIPTV · 3000 · ./data

HTTP API

GET  /api/state               config, channels, recent segments, stats, server time
GET  /api/channel?mint=       one channel with its segments
GET  /api/segment?id=         one segment
GET  /feed[?mint=]            server sent events; a mint counts you as watching that channel
POST /api/cast                { look, format } → a host portrait
POST /api/launch/metadata     { name, symbol, description, mint, image, twitter, telegram } → metadataUri, imageUrl
POST /api/launch/tx           { publicKey, mint, name, symbol, uri, amount, slippage, priorityFee } → unsigned tx
POST /api/launch/send         { tx } → signature
GET  /api/launch/status?sig=  confirmation
POST /api/launch/register     { mint, signature, name, symbol, description, host, image, imageUrl, creator, links } → the channel
GET  /api/nonce               for signing
POST /api/sponsor             { mint, text, owner, nonce, signature } → queued
GET  /api/blockhash           for building the funding transaction
GET  /media/…                 rendered video, stills and portraits

feed events

eventwhen
channelanything about a channel changed: status, airtime, watchers, market
producinga script is written and rendering has started; carries the title and line
segmenta segment is ready, with its shots
aira channel started airing an item; carries the air record, the segment and what is next
sponsora holder message was queued
depositairtime was credited
marketsmarket data refreshed for every channel
glitcha production failed, with the reason
tickevery ten seconds: who is watching what

data on disk

data/state.json holds channels, segments, seen deposit signatures, counters. data/media/ holds every rendered file, named by mint and segment. Higgsfield keeps its copies for at least seven days; the station keeps its own forever. Delete state.json to reset the guide; the coins on chain are unaffected.

security

questions

why is the first segment taking a while?

Two renders are running. A host shot with sound typically takes a few minutes on Higgsfield. The channel shows producing and the guide row says how long it has been rendering.

can i change the host later?

Not from the site. The host is the coin's image on pump.fun and the anchor of every shot.

who pays for airtime?

Whoever wants the channel to stay on. Creators usually fund it from creator fees. Holders can fund it too. Nothing stops a stranger from funding a channel they like.

what happens to a channel nobody funds?

It goes to static after the grace airtime and keeps replaying what it has. It comes back the moment someone funds it.