Pitchee is my own app for recording demo videos. I press Record, read my script from a teleprompter that follows my voice, and do the demo on my 2nd screen. Pitchee keys me out of the green screen, puts me in the bottom-left corner of the demo, and Claude Code edits the takes into a finished video with slides, captions and clean audio.
The name follows the -ee family of my other tools (Notee: my own Markdown editor for macOS, Dictee: my own local dictation app). My demos are sales pitches, hence Pitchee. The story of why I build my own apps is in The era of personal software is here. This note is the what and the how.

Why I built it
I record demo videos for clients regularly: set up a demo of a Kaltura solution, record myself in several takes, then edit. I did that in ScreenFlow for years. The recording was quick. The editing took hours: finding the best take of each part, cutting the stumbles, placing slides, fixing the sound.
I wanted an app that does only what I need from ScreenFlow, and does it better:
- 2 screens and me: my demo screen recorded with its sound, and me from my camera, in sync.
- Better keying than ScreenFlow's green screen, with hair that looks like hair.
- The editing done for me: the best take per paragraph, cuts in the pauses, my slides as intro, outro and backgrounds.
How a demo gets made
- Prepare. I ask Claude Code for a demo. It writes the script and makes the slides, then 1 command creates the Pitchee session from them. All I have to do is press Record.
- Record. I press the Record key on my Stream Deck. The camera autofocuses, the script opens on my teleprompter, and it scrolls as I speak. I record paragraph by paragraph and restart whenever I stumble.
- Edit. I click Edit with Claude. Claude Code transcribes every take, picks the best one per paragraph, cuts inside the pauses and places the slides. A draft renders in seconds.
- Finish. After I've watched the draft, Render final keys me again at full quality, levels the sound, writes the captions, and delivers an MP4 and an SRT file ready for Kaltura MediaSpace.
The editing runs in a Claude Code session on my subscription. Pitchee never calls an AI API itself.

What it does
| Feature | How it works |
|---|---|
| Recording | My camera through the ATEM Mini as ProRes 422 HQ, plus the demo screen and its sound, in sync |
| Crash safety | Files are written in 2-second pieces. A crash costs at most the last 2 seconds of a take |
| Teleprompter | The whole script on my Elgato Prompter. It follows my voice; scroll, speed, text size and margins by hand |
| Live previews | The raw camera, and the final layout: me keyed over the demo screen, as the video will look |
| Checks | Camera, microphone, screen, prompter and disk. A problem that would ruin a take blocks Record |
| Camera look | 1 button sets the camera and the lights, then measures the picture against its targets |
| Slides | Intro, outro and insert pictures for each session, dropped on the window or prepared by Claude |
| Stream Deck | A profile of 19 keys. Each key shows its live state: the take timer, the prompter mode, the text size |
| Editing | A Claude Code skill: transcripts, take choice, cuts, slides, captions, loudness |

The teleprompter was the part I wanted most. It shows the whole script, not 1 paragraph at a time, and the line I'm reading stays a third of the way down the screen. The words I've already said turn grey. If I paraphrase, add a filler word or restart a sentence, it still finds my place. When I scroll by hand, it waits until I'm back on script, then follows my voice again.

For business people
For a seller, a demo video is a pitch that works while you sleep. The limit was never the idea, it was the hours of editing per video.
- Time: recording stays what it was. The editing drops from hours to a draft in seconds and a final in minutes, while I do something else.
- Quality: every video gets the same framing, keying, captions and loudness.
- Volume: when a video costs little, I can record one per prospect instead of one per quarter.
For technical people
| Part | Built with |
|---|---|
| App | Swift and SwiftUI on macOS 26. AVFoundation for the camera, ScreenCaptureKit for the screen and its sound |
| Sync | Both recordings are timed on the Mac's host clock, so the edit lines them up without a clap |
| Prompter | On-device speech recognition on the camera audio. A small matcher finds the heard words near the cursor in the script |
| Editor | Python and ffmpeg. whisper.cpp (large-v3-turbo) for word timings |
| Keying | A fast green-screen key for drafts, CorridorKey running in MLX on Apple silicon for the final |
| Audio | A voice chain (rumble cut, less boom, light noise reduction, presence, de-esser, compression), then -14 LUFS and a limiter |
| Output | H.264 1080p30, AAC 256 kbit/s, SRT captions of at most 2 lines of 42 characters |
| Stream Deck | A native Swift plugin. The app writes a small status file and the keys redraw themselves from it 4 times a second |
Some numbers from the 1st weekend, on a Mac Studio M1 Ultra:
| Measure | Result |
|---|---|
| Draft of a 47-second video | about 25 s |
| Final keying with CorridorKey | 0.48 s per frame |
| Transcription | about 2 s for a 25 s take |
| Disk space while recording | about 1.75 GB per minute |
| Recorder killed mid-take | both files playable, take recovered |
What I learned building it
- Spec first, then build. Claude Code wrote the spec, then built and tested version 1 in one go. Most of the later changes came from my 1st real recordings, not from the spec.
- Hardware fails in ways tests don't show. 2 recording processes on the same audio device froze the sound of the whole Mac, until a restart of Core Audio. Force-quitting the app while it held the camera left the ATEM's USB video stuck until I replugged the cable. Both now have a guard.
- Defaults are opinions. The first version slowly zoomed every slide, and I wanted them still. My voice also sounded boomy until the render got a proper voice chain.
- Specialists for the UI. 2 sub-agents reviewed the app, one for the user experience and one for the visual design. A 3rd one built what they specified. That's how the edit flow, the problem banner and the red recording frame came in.
The name
The first version was called Demoee. I renamed it after the 1st weekend: these videos are sales pitches, and Pitchee says it. The rename touched everything: the app, its links, its Stream Deck plugin, its folders and its Claude Code skill.
![]()
The icon follows my NicAI design rules: the full hexagon logo, unchanged, with a clapperboard band above it and the name below, set like the one in my Notee icon.
Further reading
- The era of personal software is here: why I build my own apps now
- Notee: my own Markdown editor for macOS: my own Markdown editor, built the same way
- Dictee: my own local dictation app: my local dictation app
The open-source parts inside Pitchee:

