Skip to content

Repository files navigation

Teaching Studio β€” animated recording pipeline

🎬 Teaching Studio

Typing SVG

A Windows-first desktop recording studio for educators, trainers and creators β€” screen capture, always-on-top webcam, background replacement, audio controls and MP4 export in one workflow.

Repo views

⬇️ Download Β· ▢️ Watch demo Β· πŸ› Report a bug Β· πŸ’‘ Request a feature


⚑ See the system move

Animated Teaching Studio recording pipeline

Repository-hosted visual pipeline: the animation assets live inside the repository so the README does not depend on a placeholder demo URL.

Tech Stack


🧭 Navigation

Explore

✨ Highlights

Animated Teaching Studio highlights
Capability Implementation
πŸ–₯️ Desktop capture getDisplayMedia()
πŸŽ₯ Floating camera Transparent always-on-top Electron window
🎨 Background replacement MediaPipe Tasks Vision segmentation
πŸŽ™οΈ Audio Microphone + system audio controls
⚑ Encoding FFmpeg with hardware β†’ software fallback
πŸ’Ύ Recovery Incremental recording chunks
⌨️ Hotkeys F7 / F8 / F9 / F10
πŸͺŸ Platform Windows x64 Electron desktop app

Less setup. More teaching.

Teaching Studio repo card

🧠 Architecture

Animated Teaching Studio architecture

Teaching Studio separates the dashboard, native overlay and recording finalization responsibilities instead of forcing everything into one renderer.

flowchart LR
    U[Teacher] --> D[Dashboard]
    D --> P[Preload / IPC]
    P --> M[Electron Main Process]
    M --> O[Transparent Webcam Overlay]
    W[Windows Desktop] --> C[getDisplayMedia]
    O --> W
    C --> R[MediaRecorder]
    R --> CH[WebM Chunks]
    CH --> F[FFmpeg Finalizer]
    F --> E[MP4 H.264/AAC]
Loading

πŸ”¬ Why the overlay approach matters

The webcam bubble is a real transparent, always-on-top desktop window. Windows composes that overlay into the desktop, allowing the screen-capture path to capture a composed desktop view that already includes the camera bubble.


πŸ” Recording Lifecycle

A closer look at what actually happens between pressing F9 and getting an MP4 β€” including the crash-recovery path.

stateDiagram-v2
    [*] --> Idle
    Idle --> FirstRun: First launch
    FirstRun --> Idle: Setup complete
    Idle --> Recording: Press F9
    Recording --> Recording: Toggle mic (F7) / camera (F8)
    Recording --> Finalizing: Press F10
    Finalizing --> Saved: FFmpeg mux β†’ MP4
    Saved --> Idle: Ready for next take
    Recording --> Interrupted: Unexpected exit
    Interrupted --> Recoverable: Incremental WebM chunks found
    Recoverable --> Finalizing: Resume finalize
Loading

πŸ”„ Recording Pipeline

Animated recording pipeline
Select display β†’ getDisplayMedia() β†’ MediaRecorder β†’ WebM chunks β†’ FFmpeg β†’ final MP4

πŸ’Ύ Crash-aware media flow

Incremental chunks keep temporary media recoverable when a recording is interrupted before finalization.


🧩 Features

Animated Teaching Studio features

πŸ–₯️ Full desktop recording

Capture YouTube, browsers, PDFs, PowerPoint, VS Code and other Windows applications.

πŸŽ₯ Floating webcam bubble

A transparent, always-on-top camera window stays visible while you teach.

🎨 Background replacement

Use segmentation-based removal with presets and custom backgrounds.

πŸŽ™οΈ Microphone + system audio

Configure lecture audio directly from the dashboard.

⚑ Hardware-aware encoding

The FFmpeg finalization pipeline tries available hardware encoders before software fallback.

πŸ’Ύ Crash-safe chunks

Recording data is written incrementally so interrupted sessions can leave recoverable temporary media.

⌨️ Global hotkeys

Control core recording actions without returning to the dashboard.


πŸ› οΈ Technology Stack

Animated Teaching Studio technology stack
Layer Technology
πŸ–₯️ Desktop runtime Electron 30
🎨 UI React 18
🧠 Language TypeScript 5
βš™οΈ Build electron-vite + Vite
πŸ’… Styling Tailwind CSS
🧍 Segmentation MediaPipe Tasks Vision
πŸŽ₯ Capture getDisplayMedia() + MediaRecorder
🎞️ Processing FFmpeg via ffmpeg-static
πŸ’Ύ Persistence electron-store
πŸ“¦ Packaging electron-builder
πŸͺŸ Target Windows x64 / NSIS

πŸ“¦ Download

Download latest Windows build

Current release

v1.0.0 β€” Windows portable release

Teaching-Studio-1.0.0-win-x64-portable.zip

Total downloads

Portable install

1. Download the portable ZIP
2. Extract it
3. Launch Teaching Studio.exe
4. Complete first-run setup
5. Press F9 and start teaching

No separate Python, Node.js or Electron runtime is required for the packaged portable build.


πŸš€ Development Setup

Animated Teaching Studio development workflow

Terminal typing

Requirements

  • Windows 10 or Windows 11 for real device testing
  • Node.js 18+
  • npm
  • Git

Clone

git clone https://github.com/RICK2814/teaching-studio.git
cd teaching-studio

Install

npm install

Run

npm run dev

🧰 Project Commands

Command Purpose
npm run dev Development mode with hot reload
npm run typecheck TypeScript validation
npm run build Build main, preload and renderer bundles
npm run dist Build a Windows x64 distributable
npm run dist:dir Build an unpacked Windows app for smoke testing

πŸ“¦ Build & Release

Animated Teaching Studio build and release workflow

Standard build

npm run dist

Unpacked build

npm run dist:dir

Output:

release/win-unpacked/

The Windows packaging configuration targets x64 and uses NSIS. Current binaries are unsigned by default.


🎬 Usage

Animated Teaching Studio usage workflow

Real teaching flow

1. FIRST RUN β†’ Camera Β· Microphone Β· Quality Β· Background
2. OVERLAY  β†’ Shape Β· Size Β· Position Β· Border Β· Shadow
3. RECORD   β†’ Dashboard β†’ F9
4. TEACH    β†’ Bubble stays on top of the desktop content
5. CONTROL  β†’ F7 mic Β· F8 camera
6. FINISH   β†’ F10 β†’ MP4

What the real demo shows

Teaching Studio is designed for exactly this kind of session: a PDF, browser, presentation or code editor can remain the main teaching surface while the floating webcam bubble stays visible above it.

▢️ Watch the real-world demo on YouTube

Default output location:

Videos/Teaching Studio/

⌨️ Hotkeys

Animated Teaching Studio hotkeys
Key Action
F9 Start recording
F10 Stop and save
F8 Toggle camera
F7 Toggle microphone

A full in-app hotkey editor is planned.


πŸ“ Project Structure

Animated Teaching Studio project structure
src/
β”œβ”€β”€ main/
β”‚   β”œβ”€β”€ main.ts
β”‚   β”œβ”€β”€ overlayWindow.ts
β”‚   β”œβ”€β”€ recorder.ts
β”‚   β”œβ”€β”€ store.ts
β”‚   β”œβ”€β”€ hotkeys.ts
β”‚   β”œβ”€β”€ env.ts
β”‚   β”œβ”€β”€ preload-dashboard.ts
β”‚   └── preload-overlay.ts
β”‚
β”œβ”€β”€ renderer/
β”‚   β”œβ”€β”€ dashboard/
β”‚   β”‚   β”œβ”€β”€ App.tsx
β”‚   β”‚   β”œβ”€β”€ ui.tsx
β”‚   β”‚   β”œβ”€β”€ RecordingHistory.tsx
β”‚   β”‚   β”œβ”€β”€ FirstRunWizard.tsx
β”‚   β”‚   └── recordingEngine.ts
β”‚   β”‚
β”‚   β”œβ”€β”€ overlay/
β”‚   β”‚   β”œβ”€β”€ App.tsx
β”‚   β”‚   └── compositor.ts
β”‚   β”‚
β”‚   └── globals.css
β”‚
└── shared/
    └── types.ts

πŸ§ͺ Verification

Animated Teaching Studio verification workflow

Before shipping a Windows build, validate it on an actual Windows 10/11 machine.

Recording

  • Camera ON/OFF during recording
  • Microphone ON/OFF during recording
  • Repeated start/stop cycles
  • 5+ minute continuous session
  • Audio/video synchronization

Overlay

  • Always visible above teaching content
  • Smooth dragging
  • Lock Position works
  • Resize behavior works
  • No unwanted rectangular background

Background replacement

  • Every preset
  • Custom image
  • Hair / shoulder / clothing edges

Export

  • MP4 opens in a standard player
  • Audio is present
  • Audio/video stays synchronized
  • Webcam bubble appears in captured frames
  • No unexpected green fringing

πŸ“΄ Offline MediaPipe Model

The segmentation runtime/model can be loaded from Google's CDN on first use and may subsequently benefit from cache.

For fully offline first-run environments, bundle the MediaPipe WASM runtime and selfie_segmenter.tflite under resources/mediapipe/, then update the corresponding local paths in src/renderer/overlay/compositor.ts.


πŸ›‘οΈ Windows Defender / SmartScreen

Current Windows packaging is unsigned. Unsigned Windows applications may trigger SmartScreen warnings on first launch.

For wider distribution, sign the Windows package with an Authenticode certificate and configure the corresponding electron-builder signing settings.


⚠️ Limitations

  • Multi-monitor presets currently target the primary display work area, although dragging onto another display is supported.
  • Hotkeys have stored settings, but there is not yet a complete in-app key-rebinding editor.
  • Crash recovery data can be detected, but a one-click recovery UI remains on the roadmap.
  • Hardware-specific capture, transparency and encoder behavior should be validated on target Windows machines.

πŸ—ΊοΈ Roadmap

Animated Teaching Studio roadmap
Status Item
πŸ”œ In-app hotkey editor
πŸ”œ One-click recording recovery UI
πŸ”œ Improved multi-monitor presets
πŸ”œ Automated Windows release builds
πŸ”œ Code signing for production distribution
πŸ”œ More webcam shapes and layout presets
πŸ”œ More recording quality/export profiles
πŸ”œ Richer animated product demo assets

πŸ› Troubleshooting

See TROUBLESHOOTING.md for common problems and fixes.


🀝 Contributing

Contributions, bug reports and feature ideas are welcome.

1. Fork the repository
2. Create a feature branch    β†’ git checkout -b feature/my-improvement
3. Make your changes          β†’ npm run typecheck && npm run build
4. Commit with a clear message
5. Open a Pull Request against main
Contributors Open pull requests

⭐ Star History

Star History Chart

If Teaching Studio saves you setup time, consider dropping a ⭐ β€” it helps other educators find it.


πŸ“„ License

Licensed under the MIT License.


Teaching Studio animated footer

Teaching Studio

Capture. Teach. Export. Repeat.

Built for teachers who'd rather be teaching than debugging OBS scenes.

⬆ Back to top

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages