Search projects, hackathons, sponsors and tech

    ← All projects

    HorrorTube

    A horror battle royale on late-night TV. Choose the monsters. Bet on the survivor.

    Demo

    About

    Instead of doomscrolling, ghoul-scrolling: terrifying battles between the most nightmarish villains and ghouls. The blockchain has an ENS name for each of these creatures, and it stores their powers, spookiness, abilities, and battle scars. It's the perfect way to see what kind of doom we have in store when we match them. In the arena, players (who have to prove they're human, not vampires, using Worldcoin) settle in front of the creepy TV their great-uncle left them, loaded with videos of the arena battles he watched in the old days. But YOU get to vote for the winner of the doom and win USDC on Sui.

    How it's made

    We built Horror Tube with TypeScript, Three.js, and Vite. World ID turns entry into a waiver you sign at the table. The backend verifies proof of humanity and connects your session to a Sui wallet. Shinami handles wallet creation and sponsored transactions, so the player can use USDC without managing gas. Each monster has an ENS subname under horrortube.eth. Its appearance, background, injuries, and survival status are stored as text records. Those records supply the character files and the lore for AI-generated fights. Any previous injuries from past battles won carry into the battle arena text. The LLM text is then fed into Fal to generate the battle scene. At the end of the scene, the video is stored on DO Space for later playback, plus the last image frame to make battle arenas be consistent. Voting is done to pick the fan favorite to win, and Sui Smart contracts handle betting pools and payouts. For Worldcoin, we couldn't get Sandbox permission for ID v4, so we had to use the legacy simulation web app. This made having multiple humans in the room impossible because the simulation/staging mode only has one proof on chain per "room" that we do proof of human in, so we have companion bots to vote and bid with the human. We had many problems with 429 throttles and slow update and read time with ENSv2 records. We switched to using Multicall3 to get load times from 44s to 2.3s. I also had issues with keys and records, when I first imported the roster of monsters, I used the root key, but when I went to revive dead monsters with the roster key, I couldn't flip all the fields and rebuilt the roster with the roster key to fix. We had issues getting Sui, so we ended up making our own coin to get liquidity for betting.