PhreeLabsStart a Project

Work / 001

Explainer Studio

Explaining how money moves takes more than a good script. Explainer Studio keeps every figure on screen tied to the page it came from, so a video can be checked, not just watched.

Type
Desktop application
Platform
macOS 14 or later, Apple silicon
Built With
Swift, AppKit, Core Graphics, Core Text, AVFoundation
Status
In development · In-house build, not publicly released
Role
Founder: product direction, design, and testing
Exported video · Loyalty Penalty development demo, 1:15 · Not the editor interface · Open Full Video
Explainer Studio v2 on macOS: the pose editor reshaping a character’s outline on a scene that quotes a cited CMA report, with the scene list, layers, timeline and inspector visible.
Editor interface · App screenshot · Pose editing on a source-cited case scene

01 Purpose

Explainer Studio makes the videos for Artificially Awkward, a YouTube channel that explains recurring patterns such as money flows and pricing.

Intended user: a creator producing sourced explainer videos, who needs character animation, diagrams, and evidence in one editable project.

02 Problem and Constraints

In a general-purpose video editor, a quoted figure is plain text with no link to where it came from. One wrong number can undo a whole video.

  • Native macOS only: Swift and AppKit, with no web view or Electron.
  • Preview and export must match frame for frame.
  • Every action must be scriptable, not only clickable.

03 What Was Built

  • Editable scenes with text, shapes, connected diagrams, charts, images, video, and audio, exported to H.264 MP4 with mixed audio, including the sound inside video clips.
  • Keyframe animation of numbers and colors with linear, hold, and eased interpolation. Fill, stroke, text, subtitle, and axis colors blend in linear light.
  • Character rigs with editable body poses, anchored eyes and feet, and drawing exposures with holds and onion skin. A new outline point is added to every pose, so morphs stay valid.
  • Linked before/change/after comparison cards: editing the master updates every case unless a case overrides it.
  • Evidence records: on-screen text bound to a claim with its source, page, and quote; unsourced figures are flagged.
  • A command-line tool and a local MCP server running the same 107 commands as the app. With the project open in the app, the MCP server edits that window live, in its undo history. Video export runs from the app or command line.
  • Rational frame rates: 23.976, 29.97, and 59.94 alongside whole numbers, with frame-based timing.
  • Autosave every 15 seconds, and conflict-safe saving between the app, the command line, and MCP.

04 Design and Engineering Decisions

  1. 01

    One Command API for Every Surface

    The app, the command line, and the MCP server all call one typed command registry. Undo, validation, and revision checks live in one place, so a scripted edit behaves exactly like a click.

  2. 02

    One Renderer for Preview and Export

    The canvas and the exporter draw with the same Core Graphics renderer. Parity is measured, not assumed: exported frames are compared against preview renders.

  3. 03

    Evidence as Data, Not Text

    A quoted figure is a record with its source, page, and quote. Bound on-screen text updates when the claim changes, and validation flags literal figures with no source.

  4. 04

    Saves That Refuse to Overwrite

    Every write carries the document revision it expects. A stale write from another session is refused, and the editor shows a conflict instead of silently replacing work.

  5. 05

    Core Graphics Before Metal

    A cold 1080p frame rendered in 7.7–45.4 ms, fast enough that a Metal renderer would add complexity without need.

05 Architecture

Mac appAppKit canvas, timeline, inspector
Command lineexplainer: run, render, export
MCP serverexplainer-mcp, local only
Command registryUndo, validation, revision checks
Project modelScenes, layers, keyframes, characters, evidence records
RendererCore Graphics and Core Text
Preview canvasWhat you see while editing
ExporterAVFoundation: H.264 video, AAC audio
Preview and export share one renderer, so what you see is what exports: 50.96–54.80 dB PSNR at 14 checked frames of the demo.

06 Verified Results

MeasureResultContext
Automated tests52 of 52 passingXCTest suite, 4 November 2026
App interaction checks22 of 22 passingScripted runs of the real canvas, inspector, menus, playback, and a live MCP connection, 4 November 2026
Audio inside video clipsTest tones measured in the exported MP4Timing, trim, level, and mute checked on a generated video, 4 November 2026
Playback outputPeak level 0.366 at the output mixerSoftware measurement at the running app’s output mixer.
Export speed75.5 s of 1080p30 video in 10.8 s (7.0× real time)Release build on an Apple M3 with 16 GB, 4 November 2026
Preview vs export50.96–54.80 dB PSNR14 decisive frames of the Loyalty Penalty demo
Source quotes6 of 6 found on the cited PDF pagesLoyalty Penalty demo
Character checks2,115 samples, 0 anomaliesAutomated pose inspection across the demo
Evidence visibility755 frames, 34 evidence objects, 0 coveredAutomated check across the demo

07 Third-Party Components

Built on Apple’s own frameworks: AppKit, Core Graphics, Core Text, and AVFoundation. The demo quotes E.CA Economics’ 2020 report for the UK Competition and Markets Authority.

Need something
like this?

Tell me what the software should do. Similar problems are a good place to start. Need a custom Mac app or a tool for a creative workflow? See Custom Software.

Next Project
Webs