Interactive Halloween CAPTCHA Ghost Built with Rive and GPU CanvasInteractive Halloween CAPTCHA Ghost Built with Rive and GPU Canvas
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started
Prove You're Human: a Halloween captcha that trains a ghost
Built with the Rive CLI and GPU Canvas.
It starts as free Wi-Fi at a guesthouse in the Himalayas. A friendly helper called Momo asks you to prove you're human: select all squares with mountains. Then feet. Then a human. The last picture pulls back, and you see she was standing in every one of them. Whatever you pick is "Correct". The captcha thanks you for the training data, plays your own clicks back in reverse, and every square you picked flips over into a piece of her. Then she ticks "I'm not a robot".
Play again and the check changes. There are five, and each one teaches her one more human thing:
Look: select the squares.
Move: slide the piece to fit. The second slider runs backwards, and she replays your drag.
Talk: type the word you see. She types it back the right way round: OPEN THE DOOR.
Find: click in order, ending with "you". She walks your route, footprints pointing the wrong way.
Final: select all squares with Kichkandi. She is not in the picture any more.
Kichkandi is a ghost from Nepali folklore. You can only recognise her by her feet: they point backwards.
Rive CLI + GPU Canvas
The scene is RML generated by a Python script and built, checked and published with the Rive CLI (--verify, scripted --pointer/--advance playthroughs of all five checks, push, --publish=web). The agent was Claude Code.
GPU Canvas runs two WGSL shaders:
captcha.wgsl draws the captcha board from my drawing: square selection, the pans between rounds, her eyes catching light, the tiles flipping into her portrait, the slide-to-fit puzzle piece, her footprint trail, and the blank paper where she used to stand.
snow.wgsl is the night outside: Himalayan ridges, prayer flags, snow that slows and then rises as the dread grows, and her footprints in the snow coming closer every check.
Luau scripting runs the game (five checks, input, replay of your own clicks and drag) and feeds both shaders.
Data binding: 68 view model properties drive the UI, the shaders and Momo.
A state machine gives Momo six moods (idle, happy, unsure, scared, gone, evil), switched by data.
Human touch
Both pictures are my own hand drawings: the village scene is the captcha photo, and the full figure is her portrait.
Sound is synthesised in code (an original music-box tune, drone, stinger, knock, footsteps). No stock audio. The voiceover is the Windows speech voice.
#rivehalloweenchallenge @rive_app
Back to feed
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started