Escapement Studio

Escapement Studio

A single-user video production application · Last updated: July 28, 2026

Escapement Studio is a personal application that produces original short-form educational videos and uploads them to its developer's own YouTube channels using the YouTube Data API. It is written in Python and runs on the developer's own computer and on a private server rented by the developer.

This is not a public product. Escapement Studio has exactly one user: the developer who wrote it. There is no sign-up, no user account system, no hosted service, and no way for anyone else to install or run it. It authorises only against YouTube channels owned by that same developer, and it never requests access to any other person's Google account or YouTube data.

Channels it uploads to. Each channel is authorised separately, and each has its own stored OAuth token on the developer's machine:

What it does

Each production run turns a written editorial brief into one finished vertical video and publishes it. The channel currently in use carries two editorial lines: short Turkish-language explainers about the natural world, and English-language documentary shorts about documented business collapses. The second channel is being prepared for an English-language series about hidden mechanisms — how things actually work, why they fail, and what is commonly misunderstood about them — across four recurring series (mechanism, scale, creature, myth).

How it works

The application is a command-line program with an optional local web control panel. A single run of the full pipeline looks like this:

StageWhat happensRuns where
1. Script LLM drafts narration, title, description, tags and one pinned comment from the developer's series brief; output is validated and rejected if it breaks the brief's rules. Third-party LLM API
2. Voice Narration text is synthesised to an MP3 track. Third-party TTS API
3. Visuals Per-scene search terms fetch licensed stock media; some shots are generated with an AI image model. Duplicates are filtered out. Stock & image APIs
4. Edit Transcription produces caption timings; FFmpeg assembles video, audio, captions and music into a 1080×1920 MP4. Local machine
5. Publish Resumable upload to YouTube, then a scheduled publish time is set. One comment written in the script is posted on the video once it is public. YouTube Data API

Runs are triggered manually (python main.py pipeline), on a schedule by a local daemon, or from the control panel. Interrupted runs resume from the stage that failed rather than starting over.

Example of a production run

> python main.py pipeline

============================================================
TITLE  : Why Escapement Wheels Tick
TOPIC  : mechanical clock escapement
HOOK   : The sound your clock makes is a controlled failure.
TAGS   : #Escapement, #Horology, #Mechanism
SCENES : 7 scenes, ~44 seconds
============================================================
Voice ready: voiceover.mp3  (43.8 s)
Media ready: media/  (source mix: pexels=5, ai=2)

VIDEO READY: final.mp4
  Duration : 44.2 s
  Size     : 11.4 MB
  Captions : yes | Music: yes

YouTube upload starting: 'Why Escapement Wheels Tick' | 11.4MB | privacy=private
UPLOAD COMPLETE [OK] https://youtube.com/shorts/XXXXXXXXXXX (private)
Video XXXXXXXXXXX scheduled for 2026-07-29T13:00:00Z [OK]

How Escapement Studio uses YouTube API Services

Escapement Studio uses YouTube API Services. It authorises through Google OAuth against the developer's own Google account, and it holds one separate set of credentials per channel, each stored in its own local token file on the developer's machine.

OAuth scopes requested

ScopeWhy it is needed
youtube.force-ssl Upload videos to the developer's own channel; set and read their privacy status and scheduled publish time; read the developer's own videos; post the developer's own first comment on the developer's own videos.
yt-analytics.readonly Read aggregate performance metrics for the developer's own channel only, so the developer can decide which topics are worth continuing. Optional — the application still uploads without it.

API endpoints called

EndpointPurpose
videos.insert (resumable upload) Upload a finished video file with its title, description, tags and status.
videos.update (part=status) Set the scheduled publish time on a video that has already been uploaded.
videos.list Read back the status and basic details of the developer's own uploads.
channels.list (mine=true) Confirm which channel the stored credentials belong to and show the channel's own totals in the control panel.
commentThreads.insert Post one comment, written as part of the script, on the developer's own video after it becomes public.
reports.query (YouTube Analytics, ids=channel==MINE) Retrieve aggregate metrics for the developer's own channel for a local report.

The application never reads, writes, searches, scrapes or stores data belonging to any other channel, video or user. It does not resell, redistribute or expose YouTube API data to anyone.

Policy compliance

Technical details

Contact

Questions about this application, its use of YouTube API Services, or the policies below can be sent to sivrii1940@gmail.com. See the contact page for more detail.

Policies