Rozkmina · sandbox identyfikacja_yt · 2026-08-28

Styl jako dane

Jak działa fabryka faceless-wideo klasy RepoChad / CalebWritesCode — i jak zbudować ją w duchu wytwórni. Teza: styl nie jest talentem ani magią. Styl to plik konfiguracyjny — kilkanaście tokenów, ~10 komponentów CSS pisanych raz, 4 layouty i jedna doktryna ruchu. LLM przy masówce podaje wyłącznie dane.

dowód rzeczowy: videos/local-ai-break-even/renders/video.mp4 · 41,7 s · odtworzenie stylu 1:1

§0

Pięć tez (TL;DR)

RODZINYStyl RepoChada nie jest szczególny

To jedna z kilku rodzin stylistycznych gatunku. Każda rozkłada się na tokeny + komponenty + layouty + ruch. Rodzina = plik, nie talent.

CALEBCalebWritesCode ≈ DNA wytwórni

106k subów w rodzinie „tablica wykładowa": przyrostowa czarna tablica + screenshoty-rekwizyty. Architektonicznie to tablica ciągła + ryciny, które wytwórnia już ma. Brakuje skinu, nie zdolności.

GOTOWCEFabryka składa gotowce

CSS komponentu pisze się RAZ i wchodzi do silnika. Dzisiejszy film powstał w trybie droższym (LLM pisał HTML per scena, ~650k tokenów) — to tryb R&D, nie fabryczny.

SYNC„Premium feel" = synchronizacja

Element wchodzi na słowie lektora (timestampy), easing power3, licznik + wypełnienie na jednym easie. Tanie w kodzie; wymaga whispera — który i tak jest w roadmapie.

BIBLIOTEKAGotowców jest mnóstwo, lokalnie

13 skinów (frame-presets), 22 blueprinty ujęć, 48 reguł ruchu, 12 adapterów — wszystko na dysku, ścieżki w §7. Nowego kodu potrzeba tyle, co cienki composer.

§1

Anatomia dzisiejszego filmu

Sześć warstw. Kluczowa obserwacja: jedyna droga warstwa to nr 4 — i to jest dokładnie ta, którą tryb fabryczny zamienia na kod.

#warstwaartefaktktokoszt dziśkoszt fabryczny
1spec designu (tokeny + komponenty)frame.mdraz, agent/człowiekjednorazowy0 — plik skinu
2storyboard: co i na którym słowieSTORYBOARD.mdLLM~10k tok.mały LLM (JSON)
3TTS + timestampy słówaudio_meta.jsonkod0 tok.0 tok.
4HTML+GSAP per scenacompositions/frames/*.html5 × LLM worker~650k tok.0 — composer z szablonów
5napisy karaokecompositions/captions.htmlkod (szablon + timestampy)00
6montaż, przejścia, renderindex.html → video.mp4kod (HyperFrames)00

Mechanika warstwy 4 to zwykły frontend plus dwie nieoczywistości, które są całą „sekretną wiedzą":

  • Klipy na osi czasu: kompozycja to HTML w <template>; elementy z data-start/data-duration to klipy na trackach.
  • Render = seek, nie play: cały ruch żyje w jednym gsap.timeline({paused:true}); renderer przewija czas klatka po klatce i fotografuje. Stąd twarde prawo determinizmu: zero Math.random, Date.now, CSS-animacji, pętli; każde wejście przez fromTo.
§2

Elementarz: 5 poziomów stylu

Poziom 1 — tokeny (kilkanaście wartości: tło, tusz, 3–5 akcentów, 2–3 fonty, promień, glow) → Poziom 2 — komponenty (10–30 linii CSS każdy, pisane raz) → Poziom 3 — layouty scen (5 szablonów starczyło na cały film) → Poziom 4 — ruch (5 ruchów + doktryna) → Poziom 5 — skin (tokeny + warianty = rodzina stylu; to jest „wariancja").

Poniżej komponenty poziomu 2 renderowane na żywo — to są dosłownie te same techniki CSS, które widzisz w filmie (kafle celowo trzymają jeden, ciemny świat — niezależnie od motywu tej strony; tak działa skin):

kicker-spark
· PER MONTH ·
* THE TRUE COST OF RENTING AI *
mono + letter-spacing .32em — sygnatura gatunku
hatch-bar
ChatGPT Pro$200
Claude Max$200
Cursor Ultra$192
repeating-linear-gradient(45deg …) + glow — jedna linia CSS
glow-card + badge-on-border
base config
M5 Max
128 GB unified memory
border 1px + box-shadow zewn./wewn.; badge = absolute na krawędzi
dashed-pill
✓a real machine, not a spec sheet
+$2,600 — THE AI PART
border: dashed + radius 999px; ikony to glify tekstowe
annotation (Caveat + SVG)
almost the same money
font odręczny + nieregularna krzywa = „ludzka ręka"
hero-hand + check-item
$7,2003 lata × $200
✓professional local inference✓sensitive data stays home
wielka liczba w foncie odręcznym + glow; checki jako glify

Poziom 4 — ruch. Pięć ruchów pokrywa cały gatunek, wszystkie po stronie kodu: wejście (fromTo + power3.out), count-up (licznik + rosnąca skala), fill (pasek wypełnia się na tym samym easie co licznik), draw (stroke-dashoffset — linia się rysuje), karaoke (słowo rozjaśnia się na swoim timestampie). Doktryna ważniejsza od ruchów: nic nie wchodzi, zanim lektor tego nie powie; reveale w tylnej połowie sceny; gładki ogon zamiast bounce; stop-klatka lepsza niż zły ruch; zero „oddychania".

§3

Rodziny stylistyczne (research)

dark-dashboard

Ciemna navy, neonowy akcent rotowany per scena, mono-kickery, hatch-bary, glow-karty, odręczne dopiski.

RepoChad (nasz test 1:1)

gotowiec: nasz frame.md z override'ami — gotowy do destylacji

blackboard-lecture

Czarna tablica, przyrostowe odręczne diagramy (mapy, strzałki, wielokolorowa „kreda"), screenshoty-rekwizyty z różowymi dopiskami.

CalebWritesCode · 106k subów · kuzyn: 3Blue1Brown

DNA wytwórni (tablica ciągła + ryciny); brakuje: rough-stroke, font odręczny, multicolor

paper / editorial

Kremowy papier, serif + mono, siatka milimetrowa, granatowy tusz. RepoChad zmienia skiny między filmami — odcinek z 14.08 był właśnie taki.

rodzina „notatnika inżyniera"

presety: cartesian · cobalt-grid · code-editorial · biennale-yellow

poster / brutalist

Wielka lowercase-typografia jako grafika, jeden wściekły akcent, płaska płaszczyzna, hairline'y.

kanały „motion essay"

presety: broadside (nasza baza) · bold-poster · capsule

Trzy wnioski z Caleba (mozaiki storyboardu w scratchpadzie: caleb_sb_M*.jpg): (1) tablica przyrostowa — kolejne ujęcia to ta sama plansza + jeden element; różnica ze slajdami wytwórni jest czysto skórkowa (rough kreska, odręczne etykiety, 4 kolory, czerwona strzałka-wskaz); (2) screenshot jako rekwizyt — białe karty na czarnym + odręczne kółka NA nich; (3) napisy chunkowane maszynowo, łamane w pół zdania — cecha całego gatunku, nie wada.

Jak rozpoznać HTML-owy rodowód kanału (nasza metoda śledcza): glify tekstowe zamiast ikon, border: dashed, hatch z gradientu, liczniki złapane w pół animacji, napisy z trailing-słowem następnego zdania, nieludzka kadencja publikacji, wpadki TTS wyłapane w komentarzach.

§4

Sufit możliwości HTML→wideo

W zasięgu ręki (istnieje gotowa reguła)

  • kinetic typography: slam / relay / typewriter / decode-flip
  • liczniki, gauge'y, wykresy rysujące się, scrub z tooltipem
  • diagramy węzły+krawędzie, SVG self-draw, marker-emphasis (kółko/highlight/scribble)
  • kamera wirtualna: push / pan / zoom-to-target / multi-phase
  • pseudo-3D: tilt kart, 3D page-scroll, depth scatter
  • glitch chromatyczny, particle-burst (deterministyczny), morph kart, FLIP
  • Lottie, a nawet Three.js/WebGL i shadery — ale to już tryb drogi

Poza gatunkiem / twarde prawa

  • prawdziwa fizyka, character animation, lip-sync, fotoreal 3D
  • „żywe" losowe particle fields — determinizm zabrania losowości (wariacja tylko z indeksu elementu)
  • jeden spauzowany timeline; fromTo na każdym wejściu; zero random / wall-clock / CSS-animacji / pętli
  • offsety wejść proporcjonalne do trwania sceny (pułapka sweep_static z HANDOFF wytwórni)
  • kontrast AA — u nas dziś przygaszone kickery wymagały podbicia alfa (ta sama lekcja co napis_dim)
§5

Architektura mini-fabryki

temat/tekst → SCENARZYSTA ─→ SCENOGRAF v2 ──→ composer.mjs ─→ hyperframes → film.mp4
              [LLM: lektor │  [LLM: plansze.json v2:          (KOD: skin +
               + plan scen]│   komponent+dane+kotwice]         szablony → HTML)
                           └→ tts → whisper (timestampy) ───────┘  + captions z szablonu

Kontrakt plansze.json v2 — scena przestaje być tytuł+punkty, staje się wywołaniem komponentów. Nadal mały task LLM, nadal schemat z udowodnionym słownikiem (enum, minItems, additionalProperties:false):

{ "scena": "s03",
  "layout": "rows-stack",
  "kicker": "PER MONTH",
  "elementy": [
    { "typ": "hatch-bar", "label": "ChatGPT Pro", "nota": "highest usage tier",
      "wartosc": 200, "sufiks": "$/month", "akcent": "green",  "kotwica": "ChatGPT" },
    { "typ": "hatch-bar", "label": "Claude Max",  "nota": "20x tier",
      "wartosc": 200, "sufiks": "$/month", "akcent": "orange", "kotwica": "Claude" },
    { "typ": "hatch-bar", "label": "Cursor Ultra",
      "wartosc": 192, "sufiks": "$/month", "akcent": "purple", "kotwica": "Cursor" } ] }

kotwica = słowo lektora; composer znajduje jego timestamp u whispera i tam ustawia wejście elementu. To ten sam mechanizm kotwic, który wytwórnia ma już w rezyseria.json — rozciągnięty na każdy element wizualny. skin.json = tokeny + parametry komponentów; drugi skin = drugi plik, zero zmian w composerze. composer.mjs — jedyny nowy kod, cienki: skin + plansze + timestampy → HTML z szablonów (szablony destylujemy z naszych 5 klatek, nie piszemy z powietrza).

Ekonomia na film ~40 s: tryb rzemieślniczy (dzisiejszy) ≈ 650k tokenów, ~35 min; tryb fabryczny ≈ pojedyncze tysiące tokenów (scenarzysta+scenograf), render 1–2 min. Hybryda: flaga „premium" wysyła workera-LLM tylko do 1–2 hero-scen odcinka.
§6

Plan wdrożenia — 4 małe etapy

Biblioteka komponentów + skin „repochad-dark" (sandbox, bez LLM)

Destylacja 9 komponentów i 5 ruchów z naszych klatek do komponenty/*.mjs + skiny/repochad-dark.json.

test koronny: odtworzyć dzisiejszy film z ręcznego plansze-v2.json + istniejącego audio_meta.json — zero tokenów
Scenograf v2

Claude pisze BRIEF promptu (gramatyka komponentów + kotwice + schemat); prompt produkcyjny pisze codex1 (doktryna). Flagi zamiast stopów, jak w wytwórni.

Timestampy + napisy

Whisper wg gotowych przepisów (matura_PL_2/pipeline/transkrybuj.py, napisy.py); kotwice → czasy wejść; skin napisów karaoke na czekający track 3.

Drugi skin = dowód wariancji

„blackboard-lecture" à la Caleb: rough-stroke z jitterem z indeksu (nie z randoma), font odręczny, 4 kolory kredy, czerwona strzałka-wskaz, screenshot-rekwizyt z kółkiem. To zarazem najbliższy lifting obecnej estetyki wytwórni — rozważ wykonanie E4 jako pierwszego.

Czego nie robić: frameworka skinów „na zapas", rejestru komponentów, guardów. Komponent dopisujemy, gdy scenariusz go potrzebuje (KISS/Pareto). Port do wytwórni dopiero po zielonych E1+E2 w sandboxie.

§7

Ściągawka: skąd zrzynać

cogdzie (lokalnie)
5 klatek-wzorców (działający deterministyczny GSAP)videos/local-ai-break-even/compositions/frames/*.html
spec skinu dark-dashboardvideos/local-ai-break-even/frame.md
skin napisów karaoke (3 stany słowa, lewe kotwiczenie)videos/local-ai-break-even/.hyperframes/caption-skin.html
format timestampów słówvideos/local-ai-break-even/audio_meta.json
13 gotowych skinów (tokeny + komponenty w YAML)~/.claude/skills/hyperframes-creative/frame-presets/
48 reguł ruchu (przepisy seek-safe)~/.claude/skills/hyperframes-animation/rules/
22 blueprinty ujęć + 12 adapterów runtime~/.claude/skills/hyperframes-animation/blueprints/ · adapters/
doktryna ruchu (anty-PowerPoint, anty-bounce)~/.claude/skills/faceless-explainer/references/motion-language.md
silnik i pułapki wytwórni (sweep_static, kontrast, pin)misc/wytwornia/HANDOFF.md · etapy/slajdy.mjs
mozaiki storyboardu Caleba (referencja skinu E4)scratchpad sesji: caleb_sb_M0/M1/M3.jpg
§8

Słowniczek prowadzącego

seek-safe / deterministyczny
Render przewija czas i fotografuje klatki — każda klatka musi być czystą funkcją czasu. Stąd zakazy z §4.
paused timeline
gsap.timeline({paused:true}) w window.__timelines[id]; renderer sam ustawia tl.time(t).
fromTo
Wejście z jawnie zadeklarowanym stanem startowym — bez tego element „mryga" przy seeku do t=0.
kotwica / reveal-cue
Słowo lektora, którego timestamp wyznacza wejście elementu. Serce „premium feel".
karaoke captions
Napisy wypalane; grupy słów z timestampów, aktywne słowo rozjaśnione. Chunki łamią się w pół zdania — cecha gatunku.
komponent · layout · skin · plansza v2
Szablon z parametrami (dane+akcent+kotwica) · rozmieszczenie komponentów na scenie · tokeny+warianty (rodzina stylu) · dane sceny w JSON od LLM.
front-load / slideshow-failure
Wszystko wchodzi w pierwszych 25% sceny i zamiera. Główny grzech gatunku; leczony kotwicami.
blueprint
Sprawdzony, time-codowany szablon całego ujęcia (22 szt.); w trybie fabrycznym odpowiednik „layout+choreografia".