1. Submit a post with the form mail button
Open the upload page. Fill the username, title and optional description fields. Then click form mail.
The button opens a new tab with a real mailto: message already prepared. It does not submit the form as an ?username=... web URL. The title becomes the e-mail subject and the public title, so the mail body does not repeat title:. Attach your media in the mail app, or paste a public Drive/cloud/direct link in the optional media link field.
The generated body looks like this:
username : your_username my content is nsfw : yes description : your optional description
The NSFW line is optional and is generated only when you check my content is nsfw. For a video, the bot uses an NSFW placeholder thumbnail instead of generating or publishing a real thumbnail.
You can attach a thumbnail image with the video. Without an image, the site will choose a frame from the video automatically, unless NSFW is checked.
The description is optional. If you write one in the form mail, it will be saved with the post and shown on the video page.
2. Username protection
The first e-mail address that uses a username owns that username. If another e-mail address tries to reuse it, the bot refuses the post, comment, or suspicious delete request.
The upload page may show a warning when a username already exists, but it does not block the form mail button. A static HTML page cannot know the sender e-mail address, so only the bot decides after the e-mail arrives.
If the username belongs to another e-mail address, the bot refuses the post:
Username already taken, please try again with another username.
3. Sending
After the upload page opens the mail app, send the generated e-mail. The Status page shows live progress while the bot works, then the entries are deleted automatically.
4. Delete your own post
Open the video page and copy the video ID. Then send a new e-mail from the same address that originally posted the video, with the same username that posted it.
username : your_username delete : video_id
The bot checks the sender address and the stored username before removing anything.
5. Comment on a video
Open a video page and click Send a comment. It opens a real comment form first, with the video ID already filled. Then click form comment mail to create the e-mail.
The message body must include your username and comment:
username : your_username video id: video_id comment: your multi-line comment
Comments are limited to 4000 characters. Long comments are collapsed on the video page with a show more button.
6. Dynamic homepage and channels
The homepage no longer writes one HTML block per video. index.html reads videos.json in JavaScript, then builds the video cards in the browser.
Pagination is dynamic too: the same file handles index.html?page=2, index.html?page=3, etc. That keeps the site lighter and makes manual edits to videos.json visible after refresh.
User channels are dynamic: open channel.html?user=username and the page reads videos.json to show every video posted by that username.
7. Threads, posts, and replies
thread.html reads threads.json. Without parameters it shows every active thread. With thread.html?id=THREAD_ID, it shows the selected thread, its posts, and its comments.
Create a thread by sending an e-mail where the subject is the thread title and the body contains your username. You can add a first post with:
username : your_username post: your text
To post inside a thread, include the thread ID:
username : your_username thread id: THREAD_ID post: your text
To reply to a post, include both IDs:
username : your_username thread id: THREAD_ID post id: POST_ID comment: your reply
Images attached to thread posts are uploaded to external services like Catbox, Pixeldrain, external host or Filebin. They are not stored as Neocities images.
If a thread post or reply is marked NSFW, its images are shown blurred with a warning overlay. Visitors can click to reveal them.
The original thread creator can delete the whole thread and all its posts/comments with:
username : your_username delete : THREAD_ID
The author of a post can delete that post and its replies. The thread creator can also remove posts inside their own thread:
username : your_username thread id: THREAD_ID post id: POST_ID delete : POST_ID
Threads expire automatically after 14 days. The bot checks the creation dates often and deletes old threads with their posts and comments.
8. What happens after sending
After you send the e-mail, the bot receives the message, prepares the post, chooses an upload service for real attachments, and refreshes the site automatically.
The bot accepts my content is nsfw : yes, nsfw: yes, and the typo nswf: yes as NSFW markers.
Small real attachments go to Catbox first. Bigger real attachments go to Pixeldrain anonymous, external host guest upload, Filebin temporary fallback, then optional Litterbox if enabled. If the mail provider exposes only a text body, paste a public file link instead of relying on a binary attachment.
Videos are uploaded as originals by default. The bot refuses processed files that become shorter or lose audio, so a 4-minute clip cannot be silently published as a 1:28 cut.
9. Visible errors
If a username is already taken or a message is refused, the Status page can show a privacy-safe refusal notice; old notices are deleted automatically.
If something seems missing from your mail app, also check the spam, junk and trash folders in your mailbox.
10. External feed
Applications can read the lightweight feed at flux.rss. It contains titles, video page links, media links, thumbnails, authors, and dates.