~/projekty / screencaster
Screencaster
Piszesz skrypt w YAML, uruchamiasz jedno polecenie i dostajesz film MP4 z lektorem, pokazujący działanie strony. Render działa w Dockerze z Playwrightem, offline'owym głosem Piper i ffmpeg; serwer MCP pozwala tworzyć dema z poziomu Claude Code.
- rola
- projekt i implementacja: CLI w Go, serwer MCP, potok renderowania
- czas
- paź 2026
- typ
- własny
- stack
- Go · Playwright · Piper TTS · ffmpeg · SQLite · MCP · Docker
01 / problem
Filmy demo nigdy nie powstają
Nagranie, lektor i montaż robione ręcznie kosztują zbyt wiele, więc notatki do wydań ukazują się bez wideo. Każda zmiana w interfejsie oznaczałaby nagrywanie od nowa.
02 / rozwiązanie
Demo to skrypt, a nie nagranie
Demo opisuje się zwykłym językiem, Claude Code zapisuje je jako skrypt YAML, a CLI albo serwer MCP go renderuje. Playwright wykonuje kroki w przeglądarce, lokalny głos Piper czyta narrację w chwili rozpoczęcia akcji, a ffmpeg składa MP4. Render nie wywołuje LLM, więc ten sam skrypt zawsze odtwarza to samo demo, a zmiana w interfejsie oznacza poprawkę jednego kroku i ponowny render.

Skrypt YAML wpisywany w terminalu: jeden krok na akcję, z opcjonalną narracją

Jedno polecenie renderuje całość: narracja, nagranie i montaż krok po kroku
03 / architektura
Jak to działa
Jeden moduł Go z warstwową strukturą internal/: czyste reguły domenowe, przypadki użycia za portami i jeden adapter na każde zewnętrzne narzędzie (Playwright, Piper, ffmpeg, SQLite, MCP). CLI screencaster i serwer MCP współdzielą ten sam potok renderowania, a całość działa w jednym obrazie Dockera.
04 / wyniki
Efekt
05 / wnioski
Czego się nauczyłem
- Brak wywołań LLM przy renderowaniu sprawia, że demo jest artefaktem do odtworzenia: ten sam skrypt, te same kroki, ten sam czas.
- Jeden proces i jeden plik SQLite wystarczają narzędziu, z którego korzysta jeden programista, więc projekt pomija kwestie skalowania.