How Helen Gets Made A workshop, not the live show Watch her live

Helen the Cat Live · the build log

A 24/7 seven-camera NVR, an Intel iGPU detector, and a 3D cat court that posts YouTube Shorts by itself.

Frigate on a Windows desktop watches seven Tapo cameras through an out-of-process OpenVINO detector running on the processor’s own graphics. ffmpeg pushes two live streams to YouTube with no OBS and no capture card. A three.js court on a one-processor server paints the live cameras onto its walls, and a Stripe payment closes a relay on a treat dispenser. Every config file, script and measured number is on this site, with the secrets replaced by placeholders.

The cat it was built for is Helen, a dilute tortoiseshell calico from the Woman’s Club of Winter Park. The live show is next door.

The mosaic stream, as the table below is producing it: four camera panes stacked 2×2 by ffmpeg and encoded on the iGPU. Watch for the 10 fps cadence, the four aims (Face, Water, Treat, Bed) and the pane that is deliberately not there, the overhead Court camera, which sees the room’s entrance.

00 · The system

What is running right now, with the numbers we measured.

Two machines. A Windows 11 desktop with an i7-8700 and no graphics card runs Frigate in Docker inside WSL2, decodes ten enabled camera streams on the CPU and finds the cat with OpenVINO on the Intel UHD 630 built into the processor. Frigate’s container cannot see that iGPU, so a 170-line Python process beside it does the inference and answers Frigate over ZMQ. The same box encodes two 24/7 YouTube streams on Quick Sync and runs the Python that cuts and uploads the Shorts. A rented one-vCPU server runs both websites behind Caddy: the three.js court, the Stripe checkout, the print-on-demand shop, and the proxy that fetches one JPEG per camera over a private network. Nothing on the desktop faces the internet; the server never touches video.

The build, measured
PartWhat runs, and what we measured
CamerasEleven defined in Frigate on one LAN, RTSP over TCP; the ones on the cat are TP-Link Tapo (C120 / C210). Seven watch Helen, three watch the house, one is a spare that is switched off. Main stream 2560×1440 at 20 fps for recording; sub-stream 640×360 for detection at 2 fps. Which cameras work, and what the streams are.
NVRFrigate 0.17 in Docker inside WSL2 (Ubuntu, systemd on, mirrored networking). go2rtc pulls each camera once and re-serves it locally to the detector, the recorder and the live streams. With everything running, the Linux side of the six-core CPU sat at 13.6 % when we captured its stats. The WSL2, Docker and boot files.
DetectorOpenVINO ssdlite_mobilenet_v2 on the Intel UHD 630, in a separate Python process using Frigate’s zmq detector type. About 12.4 ms per inference including the round trip; 3.29 million inferences at last count. The detector, line by line.
RecordingThree days continuous plus 21 days of anything with a cat in it; the house cameras keep 21 days continuous. Measured: 16.4 GiB per camera per day at 1440p, 107 GiB a day across nine recording cameras, on a 3.7 TB drive. The retention math.
Live streamsSix ffmpeg processes: four stream-copy tiles, one 2×2 mosaic (h264_qsv, 1080p, 10 fps, 3.5 Mbit/s) and one Face cam (d3d11va decode, 15 fps, 2.5 Mbit/s). Both encoders together under 4 % of the CPU. A watchdog restarts a stream whose RTMP socket goes dark. The scripts.
ShortsA task every 15 minutes: Frigate events become visits, visits become a shot list, the shot list becomes a 1080×1920 cut with a caption, and the YouTube Data API uploads it. One per run, 25-minute cooldown, four publish windows a day, and a rule that refuses a cut that runs backwards. The pipeline.
The courtthree.js 0.170 on Vite 6, no framework. Four live JPEG textures refreshed round-robin, meshopt-compressed GLBs, adaptive resolution and an output dither. The build went from 92 MB to 11 MB; the critical three.js chunk is 648 kB (168 kB gzipped). The court in code.
TreatStripe PaymentIntent → signed webhook → Home Assistant webhook → a 5-volt dry-contact WiFi relay soldered across the dispenser’s remote. $2, a cap of 120 a day, an 8-second cooldown, one dispense per payment. The whole path in plain Node.
ShopSixteen print-on-demand products in a three.js room, each object wearing the real print file as a decal. A hand-kept catalog bound to Printify variant ids, 49 variants, and the same Stripe webhook turning a paid intent into a print order. The 3D shop and print-on-demand.
Web tierOne vCPU, 3.8 GB, Ubuntu. Caddy in front, pm2 for the Node API, releases as dated folders behind a symlink so a rollback is one mv. Caddy, pm2 and symlink releases.
Helen, a dilute tortoiseshell calico, looking into camera
Helen, on the camera that opens every Short. Seven cameras watch this room; one Intel iGPU finds her in all of them, about 12 milliseconds a look. The ear notch is from the rescue, not the set.

01 · What runs where

A desktop at home does the video. A small server does the web.

The desktop, in the house

A Windows desktop in the house runs Frigate, the cat detector, Home Assistant, the two 24/7 YouTube streams and the script that cuts the Shorts; it can see the cameras and nothing on the internet can see it. The desktop, and how Frigate runs on it.

Between them

The desktop never faces the public; the server never touches video. What crosses is one JPEG per camera, over a private network, through a locked-down proxy. The proxy between them.

02 · The files

The pages with the actual files in them.

Everything above is written so a person who has never opened a terminal can follow it. The pages below are the other register: the real config files, scripts and code, with the secrets replaced by placeholders and the numbers we measured left in.

  1. Frigate detection on an Intel iGPU under WSL2. Frigate could not see the graphics inside the processor from its container, so a 170-line OpenVINO process next to it does the finding over ZMQ. 12 milliseconds a look, three million looks and counting.
  2. The WSL2, Docker and boot files. wsl.conf, .wslconfig, docker-compose.yml, and the PowerShell that brings Frigate back after every reboot.
  3. The full Frigate config.yml. Eleven cameras, annotated line by line, with the retention numbers from a real 3.7 TB drive.
  4. Two 24/7 YouTube streams from ffmpeg. No OBS, no capture card: tile restreams, a four-camera mosaic encoded on the iGPU, and a watchdog that notices when YouTube half-closes the socket.
  5. The Shorts pipeline. Frigate events become visits, visits become shot lists, shot lists become a vertical cut with a caption, and the guardrails that refuse a bad one.
  6. Stripe webhook to Home Assistant to relay. The whole $2 treat path in plain Node: signature check, idempotent dispense, daily cap, the automation, the relay.
  7. The three.js court. Live cameras as textures, a 738 kB cat, a split chunk, adaptive resolution and a dither. 92 MB down to 11.
  8. Caddy, pm2 and symlink releases. Both site configs, the deploy script, and four outages that each became a rule.
  9. The 3D shop and print-on-demand. A three.js room whose mugs and tees wear the real print files, a hand-kept catalog bound to Printify variant ids, and the webhook that turns a paid Stripe intent into a print order.
  10. The 3D website, plainly. Why a cat livestream has a WebGL room and what it is made of, then the deep pages: one renderer across 25 pages, what a visitor downloads, laying out the shop in 3D, and testing a WebGL site without a GPU.
  11. 3D and image generation, plainly. What image-to-3D is fed and what comes back, then every Tripo task and credit, 61 MB to 2 MB, which pictures a model drew, and what it cost and saved.
  12. The AI models. What ChatGPT, Cursor, Claude, Gemini and the 3D generator actually did here, what a person still does, how the cat was generated from one photo, and which tool did which job.

03 · The whole build

Eight steps from a room to a channel.

The sections above are the machinery. This is the method it serves, written so a person who has never opened a terminal can follow it: one sitting room, a cat who takes no direction, a website people can walk, and four Shorts a day that cut and post on their own once the rules are set.

  1. Dress a room. Stage the furniture, the glow, and the stations. You are not directing a cat. You are giving ordinary visits a place to land.
  2. Give the cameras five jobs. Water, food, treat, the walk, the face. We run seven cameras on those five jobs, the extras as second angles; if two cameras do the same job from the same place, one of them is wasted.
  3. Let Frigate watch for a cat. When a camera can see her, that is a visit. You do not call action. You wait.
  4. Put a 3D court on the website. Visitors walk the same room. The live show is a court they can move through, not a pile of raw cameras.
  5. Cut a Short in time order. Open after she arrives. Close before the room is empty. The crop follows the cat.
  6. Write a ten-word title. One decree. Bottom third. The top of the frame belongs to her.
  7. Post four times a day. 05:00, 07:00, 17:00, and 19:00 Eastern. If she did not move, that door stays shut.
  8. Turn a treat into an on-camera event. Solder a 5-volt WiFi switch to the dispenser’s remote — not a 120-volt switch. A payment on the live site presses that button. Treat Cam is already aimed.
See the finished court

Walk the live show. Then come back and build yours the same way, one step at a time.

The kit

Normal machines. Amazing things.

We did not buy a studio truck. We bought store cameras, a PetSafe treat dispenser, a 5-volt dry WiFi switch, and a regular computer that stays on. No graphics card, no Coral: the Intel graphics built into the processor finds the cat. Frigate is free software. YouTube Studio is the same Studio everyone uses. The court is a website people walk. The amazing part is what those ordinary pieces do when each one has a job.

What we bought, and what it became
Ordinary machineAmazing thing it does
Five home-network camerasA walkable 3D court, and five angles of the same visit.
Wide pictures, 2560×1440 at 20 frames a secondA tall 1080×1920 Short. The crop follows the cat so a phone still has a subject.
A regular computer that stays on. No graphics card.The processor decodes the cameras; the Intel graphics inside it finds the cat. Same box cuts the Short. No graphics card. No cloud farm. How it runs on Windows.
Frigate on that computerThe room is watched while we sleep. A detection is a visit. We cut the visit, not a 24-hour tape.
A white PetSafe dispenser and its handheld remoteA treat that already drops when a thumb clicks. We did not wait for a “smart” bowl.
A 5-volt dry WiFi switch, not a 120-volt oneA payment on the shop presses that same remote. Two wires. One solder joint. An event in the sitting room.
YouTube StudioFour doors a day: 05:00, 07:00, 17:00, 19:00 Eastern. The Shorts feed is where people find the court.
The computer — what we actually run
PartSpec we actually use
KindA regular Windows PC that stays on. Not a studio rack. Not a rented GPU box.
Graphics cardNone. The Intel graphics built into the processor does the finding, through OpenVINO, at about 12 milliseconds a look. The CPU does the decoding and the cut. Why we never bought a Coral.
WatcherFrigate from frigate.video. Detection set to cat. Seven home-camera streams watched at two frames a second. What Frigate is. The whole config.
CutSame computer. Ordinary tools: Python and ffmpeg. Wide 2560×1440 at 20 fps in. Tall 1080×1920 Short out. The crop follows the cat.
UploadYouTube Studio on that same machine. Four doors a day. Skip a still visit.
WebsiteThe 3D court is a normal website. The computer at home watches. Visitors never see the watcher screen.
What you do not needA gaming GPU. A Coral stick. A cloud render farm. A second “AI computer.” If the PC can stay on and see the cameras, it can do this.

04 · The court

Stage stations, not a performance.

Pick one room the cat already uses. Dress it so a drink, a meal, a treat, a walk, and a face each have a home. When she does the ordinary thing, a camera already knows why it is there.

  1. Water. High over the fountain. Night is when this frame earns the channel. You want glow, not a puddle.
  2. Food. A dining wide. Body and bowl. You want the approach along the runner, not crumbs.
  3. Treat. Eye-level, close, warm. This is the beauty cam. Whiskers have to read on a phone.
  4. Court. Overhead of the whole room. Geography and transit. A walk only makes sense if a viewer can see where she came from.
  5. Face. Head-on at the bowl. This is frame one. If the first half-second is empty room, you already lost the swipe.
The court · five stations Water High angle. Blue glow. The drink shot. Food Dining wide. Body and bowl. Treat Eye-level beauty cam. Hero portraits. Court Overhead of the whole room. Geography and transit. Not a scratch pad. Face Head-on at the bowl. The eating close-up. Frame one.

Aim Court as the wide after you re-think leftover names. Aim Face at the bowl so a viewer stays past the first half-second. The map is a job list, not a floor plan to copy inch for inch.

Water Cam: fountain with blue glow and Halloween set

Water Cam Give this one the fountain and the night glow. If the drink is not readable, raise it or move the light, not the cat.

Food Cam: dining wide of the court

Food Cam Body and bowl in one frame. You want the walk-in, not a tight dish.

Treat Cam: eye-level beauty shot of the dispenser corner

Treat Cam Closest, warmest, whiskers readable. Point it at the quilt before anyone presses the button.

Court Cam: overhead of the whole sitting room

Court Cam The whole room. Weak for whiskers, strong for a walk between stations. Tilt until a visitor can tell where they are.

Face Cam: Helen at the bowl, close

Face Cam Cat-eye level at the kibble. Open here. This is the job that keeps a thumb from swiping.

Then put the same room on the site

Build a 3D court people can walk. Same five stations. A visitor should be able to stand at water, turn toward food, and understand the room the way you do from the wide. Four public chambers can refresh from the live site. Face Cam is not on that public strip — show a frame you chose, not a stream you cannot share.

Water Cam still
Water
Food Cam still
Food
Treat Cam still
Treat
Court Cam still
Court

05 · Shooting

Write patterns. She will not hit a mark.

You cannot ask a cat for a second take. Frigate finds a visit. You write a pattern to match: which camera, which station, what she is doing, how long that usually lasts. That is the script. It is not choreography.

Write patterns to match. Not blocking.

  1. Wait for a visit. She arrives at a station. That is the only cue. Do not invent a scene around an empty room.
  2. Let the camera that can see her say so. Frigate is the watcher. One clear yes is enough to start.
  3. Follow a path through the frame. A line of points tracks her. You do not guess where she will sit.
  4. Crop for a phone along that path. A tall window pans so she stays in the Short. A hard centre crop throws away ears.
Visit She arrives at a station. That is the only cue.
Detect The camera that can see a cat says so.
Track A path of points follows her through the frame.
Crop A tall window pans along that path so the subject stays in the Short.
Day lighting on the court

Day Harder. White brick blows out. Make the blue fountain work for a living. Do not invent a day look the room does not have.

Night lighting on the court

Night The water glow becomes the look. Do not invent a night grade. The room already has one. Shoot it.

06 · The cut

Keep time. Follow the cat.

Assemble one visit in the order it happened. Start a beat after she arrives so frame one already has a cat. End as soon as she leaves. Dissolve the last moments into frame one so the loop does not flash empty room.

A note that says “done” is not evidence. Look at the frames.

  1. Stay in time order. A later shot must not start before an earlier one ended. We once shipped a cut that ran backwards. Look at the clocks on the frames before you let it go.
  2. Open after she arrives. The first picture is a cat, not a set. Face at the bowl is the opener we use now.
  3. Close before empty room. The last shot ends as she leaves. The loop returns to frame one. Nobody should see a vacant court.
  4. Let the crop follow her. The source is wide. The viewer gets a tall slice. Too tight clips ears. Too wide and she becomes furniture.
  5. Then let a script do it. Once the rules hold, a program applies them to every visit: the pipeline that cuts and posts four Shorts a day.
Hybrid framing: more of the cat and the set
Tight crop framing that ships on Shorts

Drag: tight crop on the left, hybrid on the right. The source is wide. The viewer gets a slice. Hybrid spends resolution to keep the whole cat. Use the slider until you can see which ears survive.

Three-up comparison of crop, hybrid, and fit

Three ways to fill a phone Crop ships today. Hybrid keeps ears and set. Fit shows the whole room and loses her. Pick by looking, not by habit.

Ladder of zoom amounts compared on one visit

How far to pull back Too tight clips ears. Too wide and she becomes furniture. The useful band is narrow. Walk the ladder on one visit before you lock a default.

Practice the cut

Time order, open, close, crop. Drag the compare on this page until the cat stays whole.

07 · The copy

Ten words. Then four beats.

The daily Short carries one decree. Season chapters keep that voice and spend it across four timed lines on a longer cut. Write for the bottom of a phone. Leave her face alone.

  1. Ten words. That is the title and the first breath. If you need a twelfth word, you do not have the line yet.
  2. Bottom third. Nothing else in the middle of the frame. The top belongs to Helen. Type that fights her face loses.
  3. Four beats for a chapter. A line arrives, holds, and leaves. You read while she eats. She does not pause for the joke.
  4. Judge the same episode as frames. Open on Face. Stay while she eats. Close before empty room. If a beat needs a still to explain it, the line is too long.

The court has received a letter. It is not good.

That is the title we aired. Two earlier premieres used the same footage and thinner copy. They stay private. The one people can watch is below.

Beat one, thin title treatment
Before the fly-in
Beat two, title arriving
The line arrives
Beat three, title holding over Helen
Hold — Season 1 · Episode 1
Beat four, title leaving
Leave the frame to her

Same episode, judged as frames

Episode 1 frame, Face Cam at the bowl
Open on Face
Episode 1 frame later in the visit
Still eating
Episode 1 mid-chapter frame
The letter can wait
Episode 1 closing frame
Close before empty room
Hear the voice

S1E01 · The Letter is the aired example. Ten words. Four beats. Then leave the frame to her. · What the models did on this build, and did not. · Which tool wrote which line.

08 · The series

Write a season. Pick by looking.

Season One is a written season. Each episode names the beat, the cameras it prefers, and a handful of decrees. You could let the next chapter go out on its own. Pause that on purpose. A chapter is chosen by looking at frames, then marked aired. The counter only goes up.

  1. Write the season first. Name the story. Ours is The Missing Seal. The fictional court takes it seriously. The cat does not know there is a court. The joke is the gap. Never make her act.
  2. Give each episode a beat and a camera list. Prefer Face to open. Prefer Court when she walks. Prefer Treat when someone in the world becomes an event.
  3. Pick by looking at frames. Not by a score. Not by a clock that says it is time. If the visit is thin, wait.
  4. Leave the auto-air paused. Daily Shorts can post themselves. A season chapter should not. Mark it aired only after you have watched it.
One aired chapter

The Letter is episode one. The next one waits for frames, not a schedule.

09 · YouTube

Four doors a day. Skip the still ones.

05:00 ET
07:00 ET
17:00 ET
19:00 ET
  1. Open four doors. 05:00, 07:00, 17:00, and 19:00 Eastern. Same hours every day so the channel has a pulse a person can learn.
  2. Skip a still clip. If she did not move, do not post. An empty slot is better than a painting of a room.
  3. Rewrite a title that already ran. If this week already used the decree, write another ten words. Do not repeat yourself into the feed.
  4. End on the live domain. The last seconds fade up one ask and one address, then ride the loop back to frame one.
Older endcard treatment that collided with other type

Do not park type on every frame A reason line and a wordmark fighting the decree. Clear the top. The cat is the first half-second.

Current endcard band

What you put at the end One ask. One domain. Then the loop returns her to frame one. Point the ask at the live court, not at this workshop.

10 · The channel

The first half-second is the whole game.

115subscribers
36,539views
215videos
94.3%of views from the Shorts feed

Those four numbers were pulled from the channel, not guessed. We do not invent others. Average view percentage on a looping Short is not a clean read — it can exceed one hundred percent. What matters is whether someone swipes in the first second.

Change the avatar when the brand changes. Do not leave an old picture on every Short. Older thumbnails that burned a retired domain taught us that a stale picture is not a small mistake.

Count only what you can see

The public channel. If a number is not on that page, do not print it. · The checks that gate a deploy of the 3D site.

11 · Shop and treat

A viewer can become an event.

Put the shop on the live site, not on the workshop. We bought an ordinary treat dispenser, then a 5-volt dry WiFi switch — not a 120-volt one — and soldered it to the remote. Someone pays. Those two wires touch. The dispenser thinks a person pressed the button. Treat Cam is already pointed at the quilt. A person on a phone, a solder joint in a clicker, a cat who may or may not care.

  1. Sell on the performing site. The Royal Collection lives where people already watch. This page does not take money.
  2. Aim Treat Cam before the button exists. If the quilt is not in frame, a treat is only a sound.
  3. Solder a 5-volt dry WiFi switch to the remote. Not 120. That click is the trick. The payment only has to close two wires.
A generated picture of a calico chasing a feather toy on a wood floor, made by ChatGPT's image model; not a camera frame

Not a camera frame Made by ChatGPT's image model in July 2026, when it was asked for studio pictures of her. The live stills are in the strip under section 04.

A generated picture of a calico asleep in a round bed, made by ChatGPT's image model; not a camera frame

Not a camera frame The same July batch of twenty generated pictures; one of the others became the Royal Portrait in the shop.

12 · The control room

If you cannot see a source, leave the card empty.

The desk that runs a channel has tabs for cameras, the season, and what already aired. Money and mail stay off a public page. What you see here is the honesty rule: if a card cannot see its source, it stays empty.

  1. Mock the cards you can explain. Today’s slots. The season. A health card. That is enough to teach the honesty rule.
  2. If a card cannot see its source, it stays empty. It does not invent a green light. It does not guess a number.
  3. Keep money and mail off the public page. A workshop can show the shape of a desk. It cannot show yours.
Reached

Today’s slots

Four doors. A card here would name which ones already aired — from what already went out, not from memory.

Reached

Season file

Paused on purpose. Episode one is The Letter. The next one waits for frames, not a score.

Cannot reach

Host health

If this card cannot see its source it stays empty. It does not invent a green light.

13 · Lessons

What we would tell you on day one.

  1. A success note is not proof. Every bad ship on this channel was declared fixed by someone who stopped at a cheerful line. Pull the frames.
  2. You cannot direct the talent. Write patterns. Keep time order. Leave room for a cat who will not hit a mark.
  3. If she did not move, do not post. If a camera is missing, do not fill the hole with a guess. An empty slot is the honest outcome.
  4. A backup that ran can still be the wrong room. Check what it kept, not that it finished.
  5. The first half-second is the cut, not the packaging. Open on a readable cat. The rest of the craft is how you keep them.
  6. Do not invent a number. If nobody counted it, cut the claim.

Questions

Ask the methods in plain words.

What Frigate is doing. Why five jobs and seven cameras. How a Short gets cut. Why a treat on the live site becomes an event. The answers live on a page a search can quote.

Read the questions. · How we use Frigate. · Every live example, linked.

Crowd-shaped

Tell us what to try next.

The court, the cut, and this site get better when visitors say what felt empty, too tight, or worth another angle. Kind notes only. We read them. The good ones go on the wall.

Leave a suggestion — set, cut, copy, or the live show.