Cum am construit un motor care randează singur lecții video pentru copii

Personaj 3D rotunjit, un copil cu ochi mari și bluză verde, stând într-o pădure însorită — cadru din seria de lecții video pentru preșcolari

Am construit un motor care randează singur lecții video de engleză pentru preșcolari: scriu scriptul, apăs o comandă, și iese un episod de două minute cu personaje animate 3D, voce, muzică și sincronizare pe cuvânt. Randarea costă zero — rulează pe calculatorul meu. Singurii bani cheltuiți sunt pe voci. Dar partea care a durat cel mai mult n-a fost codul, ci ce am definit înainte să scriu prima linie de cod.

Pe scurt

– Conceptul s-a fixat înainte de orice generare: public, metodă, listă închisă de cuvinte. Fără acest pas, motorul ar fi produs repede episoade pe care nu le-ar fi înțeles niciun copil de patru ani. – Personajele sunt rotunde, nu cubice. Nu e o preferință estetică — stilul cubic pe care îl foloseam în alte proiecte citește „joc video”, nu „blând”, iar publicul are 3–6 ani. – Vocile au fost căutate, nu ghicite: 10 candidate ascultate, 2 alese, accent britanic, fixate într-un fișier de configurare ca să nu se schimbe de la un episod la altul. – Randarea e locală: 0 dolari per episod. Costul real e vocea. – Cea mai scumpă lecție: de două ori, agentul care verifica a raportat „arată bine”, iar cadrele extrase din video arătau altceva. Verifică pe cadre, nu pe raport.

Ce înseamnă, de fapt, „motor de randare”?

Un motor de randare, în cazul acesta, e un set de fișiere de cod care primesc un script și produc un video complet, fără ca cineva să deschidă un program de montaj. Personajele sunt obiecte 3D descrise în cod — o sferă pentru cap, capsule pentru brațe, o formă moale pentru corp. Camera, lumina, mișcarea, gura care se deschide pe silabe: toate sunt calculate cadru cu cadru, de 30 de ori pe secundă.

Pentru episodul de care scriu, înseamnă 3.012 cadre randate unul câte unul, pentru 100 de secunde de conținut. Plus introul și cardul cu numărul lecției, totalul iese la 128 de secunde.

Diferența față de a genera un video cu un model de inteligență artificială e importantă: aici nimic nu e halucinat. Dacă mărul trebuie să fie roșu și în stânga lui Buzz, va fi roșu și în stânga, la fiecare randare, identic. Un model generativ îți dă altceva de fiecare dată. Pentru o serie unde același personaj trebuie să arate la fel în episodul 1 și în episodul 40, consecvența nu e un moft — e condiția de bază.

De ce am definit conceptul înainte să scriu cod?

Pentru că un motor produce repede. Iar dacă produce repede lucrul greșit, ai doar mai mult din ce nu-ți trebuie.

Publicul sunt copii de 3–6 ani care nu știu engleză. Metoda e imersie simplă: fără traducere, fără explicații în română, doar repetiție și joc. Ceea ce impune o constrângere dură — fiecare episod are o listă închisă de cuvinte, iar fiecare cuvânt trebuie să apară de minimum trei ori.

Episodul 1 are exact 15 cuvinte: hello, bye-bye, yes, no, red, blue, yellow, green, look, big, small, happy, one, two, three. Nu 16. Iar la final am verificat, cu un tabel, de câte ori apare fiecare.

Cuvânt Apariții Unde
red 8 obiect + jocul de recunoaștere
bye-bye 7 închidere
blue, yellow, green 6 fiecare obiect + joc
hello 5 deschidere
yes, happy 4 fiecare reacții de încurajare
look, big, small 3 fiecare introducerea obiectelor, mărimea
one, two, three 1–2 numărătoare scurtă
no 0 nefolosit — rămâne pentru un episod cu alegere corect/greșit

Cuvântul „no” a rămas la zero, intenționat. Într-un episod despre culori nu există nimic de refuzat, iar forțarea lui doar ca să bifez lista ar fi stricat metoda.

Promptul cu care se face partea aceasta, dacă vrei să-l refolosești:

Promptul de definire a conceptului, înainte de orice producție
Ajută-mă să definesc conceptul unei serii video educative, ÎNAINTE de a produce ceva.

CONTEXT
- Public: [vârsta exactă, ce știe și ce nu știe deja]
- Limba conținutului: [limba]
- Metoda: [ex. imersie fără traducere, repetiție, joc]
- Durata țintă per episod: [minute]
- Format: [16:9 clasic / 9:16 vertical]

CE VREAU DE LA TINE, în ordinea aceasta:

1. LISTA ÎNCHISĂ DE CUVINTE pentru primul episod. Maximum [N] cuvinte.
   Argumentează fiecare alegere prin criteriul: îl poate folosi copilul mâine?
   Elimină orice cuvânt care are nevoie de explicație ca să fie înțeles.

2. REGULA DE REPETIȚIE. Câte apariții minime are nevoie un cuvânt ca să
   se fixeze, la vârsta aceasta? Dă sursa, dacă există una.

3. ÎNVELIȘUL FIX — deschiderea și închiderea care se repetă IDENTIC la
   fiecare episod. Copiii de vârsta aceasta se sprijină pe ritual.

4. CE NU INTRĂ în primul episod și de ce. Vreau lista lucrurilor pe care
   le amâni, nu doar pe cele pe care le incluzi.

Nu-mi scrie încă scriptul. Vreau doar cadrul, ca să-l aprob.

De ce personaje rotunde și nu cubice?

În restul proiectelor mele de video foloseam un stil cubic, de tip joc cu blocuri. E rapid de randat și arată bine. Primul reflex a fost să-l refolosesc și aici.

A fost greșit, și se vede imediat când pui cele două variante una lângă alta: stilul cubic citește „joc video”, nu „blând”. Pentru un copil de patru ani, colțurile ascuțite și texturile de piatră spun altceva decât vrea o lecție de engleză.

Am rescris personajele din forme moi — sfere, capsule, suprafețe rotunjite. Am păstrat doar mecanismul motorului, nu geometria.

Cele două personaje ale seriei, un copil și o albinuță, într-o grădină verde, în stil 3D cu forme rotunjite

Sunt Pip, copilul curios care aproape nu vorbește, și Buzz, creatura care vorbește engleză și repetă fiecare cuvânt. Împărțirea are un rost: copilul care se uită se identifică cu Pip — și el ascultă, și el nu știe încă cuvintele — iar Buzz e cel care predă. Nimeni nu-i cere lui Pip să știe.

Cum alegi vocea unui personaj, fără să ghicești?

Metoda vine din Marea Britanie, deci accentul trebuia să fie britanic. Atât știam.

Tentația e să alegi după nume, din lista platformei de voci. E cel mai rapid mod de a greși: numele unei voci nu-ți spune cum sună la o propoziție de trei cuvinte, rostită vesel, pentru un copil.

Am căutat în biblioteca publică de voci după criterii — gen, vârstă, accent, descriptor — și am generat aceeași replică de test cu 10 candidate: șase pentru Buzz, patru pentru Pip. Le-am ascultat pe toate și am ales două.

Alegerea nu se mai renegociază la fiecare episod. E scrisă într-un fișier de configurare, împreună cu identificatorul exact al vocii. La episodul 40, Buzz va suna la fel ca în episodul 1.

Cum arată scriptul unui episod?

Text simplu, cu regie scrisă între paranteze, împărțit în trei: învelișul de deschidere (identic mereu), mijlocul cu tema zilei, învelișul de închidere (identic mereu).

Regula pe care am ținut-o: scriptul se aprobă ca text, înainte de orice discuție despre voce, animație sau stil. E partea cea mai ieftin de schimbat. O propoziție rescrisă costă zece secunde; aceeași propoziție rescrisă după randare costă o oră de calculator.

Promptul de scriere a scriptului, cu buget de cuvinte
Scrie scriptul episodului [N] dintr-o serie video pentru copii de [vârsta].

CONSTRÂNGERI DURE (nu le încălca, nici măcar „ca să sune mai bine"):
- Vocabular permis: DOAR cuvintele din lista de mai jos. Niciun cuvânt în afara ei.
  [lista completă]
- Fiecare cuvânt din listă apare de minimum 3 ori. Excepțiile le semnalezi tu,
  cu motivul, nu le strecori.
- Fără traducere, fără explicații în limba maternă a copilului.
- Durata țintă: [minute]. Estimează-o pe baza a ~2 cuvinte rostite pe secundă,
  cu pauze de joc între replici.

STRUCTURA:
1. Deschidere — învelișul fix, identic la fiecare episod: [descrie-l]
2. Mijloc — tema episodului: [tema]. Introdu obiectele unul câte unul,
   fiecare cu repetiție apăsată. Apoi un joc de recunoaștere unde
   personajul-copil ARATĂ obiectul, nu îl numește.
3. Închidere — învelișul fix: [descrie-l]

FORMAT: replici + regie scrisă între paranteze (ce face fiecare personaj,
ce obiect apare, unde). Regia trebuie să fie suficient de precisă cât să
poată fi transformată în animație de altcineva decât tine.

LA FINAL, OBLIGATORIU: un tabel cu fiecare cuvânt din listă și de câte ori
apare efectiv în scriptul pe care tocmai l-ai scris. Numără în text, nu
estima. Dacă un cuvânt e sub 3 apariții, spune-mi înainte să continui.

Ce s-a stricat, de fapt, la prima randare

Aici e partea utilă a articolului.

Prima variantă a episodului a ieșit tehnic corect: 100 de secunde, sunet sincronizat, personaje care se mișcă. Agentul care verifica a raportat că totul e în regulă.

Am extras cadre din video și m-am uitat la ele. Iată ce arăta cadrul de la secunda 37, în jocul de recunoaștere:

Cadru din prima variantă: mărul roșu acoperă fața personajului care vorbește, iar frunza verde e suprapusă peste corpul copilului

Mărul roșu stă peste fața lui Buzz. Frunza verde e lipită peste corpul lui Pip. Obiectele plutesc într-un șir care trece prin personaje, nu în fața lor. Niciun copil n-ar înțelege ce arată cine.

Au urmat trei runde de corecții, fiecare pornită de la un cadru, nu de la un raport:

  1. Obiectele suprapuse peste personaje — recalculate pozițiile în adâncime, ca obiectele să stea în fața personajelor, nu prin ele. Tot atunci, Pip apărea uriașă la cuvântul „big” și tăiată de marginea cadrului la închidere.
  2. Postura — Pip stătea cu spatele pe toată durata naratiunii, iar gestul de recunoaștere nu indica vizibil culoarea. A primit o postură atentă implicită și o secvență reală de mers către obiect.
  3. Corpul care ascunde obiectul — la mers, Pip ajungea să stea peste obiectul pe care tocmai trebuia să-l arate. Distanțele au fost recalculate per obiect, cu o scalare mică animată, ca brațul să facă puntea spre obiect, nu corpul.

Așa arată același moment, după:

Același cadru după corecții: obiectele stau clar în fața personajelor, copilul întinde brațul spre mărul roșu, nimic nu se suprapune

Lecția care contează, dincolo de proiectul acesta: de două ori, verdictul agentului a fost mai optimist decât realitatea de pe ecran. Nu pentru că ar fi mințit — pentru că verifica altceva decât ce vedeam eu. Un raport care spune „randarea s-a terminat fără erori” e adevărat și inutil în același timp.

Promptul de verificare pe cadre, nu pe raport
Am randat un video. Vreau să-l verifici pe CADRE EXTRASE, nu pe log-ul randării.

CE FACI:
1. Extrage cadre din video la momentele-cheie pe care ți le dau mai jos.
   [listă de momente, în secunde, cu ce ar trebui să se întâmple la fiecare]
2. Deschide fiecare cadru și DESCRIE ce vezi efectiv — nu ce ar trebui să fie
   acolo conform scriptului. Dacă un obiect lipsește, spune că lipsește.
3. Pentru fiecare cadru, răspunde explicit la:
   - Se suprapun elemente care n-ar trebui să se suprapună?
   - Personajul e întreg în cadru, sau tăiat de margine?
   - Se vede clar CINE face acțiunea și CU CE obiect?
   - Un om care nu știe scriptul ar înțelege ce se întâmplă?

REGULI:
- Nu raporta „arată bine" fără să numești ce ai văzut în cadru.
- Dacă un cadru e ambiguu, spune că e ambiguu. Nu completa din script
  ce nu se vede în imagine.
- La final: lista problemelor, ordonată după cât de tare încurcă înțelegerea,
  nu după cât de greu sunt de reparat.

Cât costă un episod?

Componentă Cost
Randarea video (3.012 cadre, 3D) 0 $ — rulează local
Introul animat 0 $ — același motor
Cardul cu numărul lecției 0 $
Sunetul de clopoțel 0 $ — din biblioteca deja plătită
Naratiunea (100 de secunde de voce) costul platformei de voci
Muzica de intro o singură dată, refolosită la toate episoadele

Partea grea nu e costul, e timpul de calcul: o randare de 3.000 de cadre ține calculatorul ocupat. Dar e timp de mașină, nu de om — pornesc randarea și fac altceva.

Ce NU face motorul acesta

Cum arată rezultatul

Primul episod, cap-coadă — intro, cardul unității, lecția despre culori:

Ce am dus mai departe în munca pentru firme

Motorul acesta e pentru copii, dar tiparul e același cu cel din automatizările pe care le construiesc pentru firme: definești regula strict înainte, lași mașina să execute repetitiv, și verifici rezultatul pe dovada concretă, nu pe raportul procesului.

Un flux care mută facturi dintr-un loc în altul are aceeași structură ca un motor care randează episoade. Diferența e doar ce iese la capăt. Iar partea în care cineva se uită la ce a ieșit — și nu doar la mesajul „s-a terminat cu succes” — rămâne, în ambele cazuri, la om.

Dacă vrei să înveți să construiești lucruri de tipul acesta, exact acest lucru predau în cursul de AI pentru firme: patru ședințe, grupe de maximum opt oameni, cu garanție bani înapoi după a doua ședință.

Întrebări frecvente

Ce e un motor de randare și prin ce diferă de un generator video cu AI?

Un motor de randare calculează fiecare cadru din cod: aceleași instrucțiuni produc mereu exact același rezultat. Un generator video cu inteligență artificială produce altceva la fiecare rulare. Pentru o serie unde personajele trebuie să arate identic în zeci de episoade, consecvența e obligatorie — de aceea am ales varianta calculată, nu cea generată.

Cât durează să produci un episod, după ce motorul e gata?

Scrierea și aprobarea scriptului sunt partea de om — câteva ore. Randarea propriu-zisă e timp de mașină, în care nu trebuie să faci nimic. Corecțiile de animație depind de câte probleme apar la verificarea pe cadre; la primul episod au fost trei runde, tocmai pentru că se construia și motorul în același timp.

De ce lista de cuvinte e închisă și de ce fiecare cuvânt se repetă de minimum trei ori?

Pentru că metoda e imersie fără traducere: copilul nu are cârjă. Un cuvânt care apare o singură dată trece pe lângă el. Lista închisă previne tentația de a strecura cuvinte „ca să sune mai natural” — exact lucrul care face un episod de neînțeles pentru un copil de patru ani.

Pot folosi prompturile din articol pentru altă limbă sau alt subiect?

Da. Sunt scrise cu variabile între paranteze drepte — vârsta, limba, metoda, lista de cuvinte. Structura rămâne aceeași pentru orice serie educativă cu personaje recurente și vocabular controlat. Nu se potrivesc însă la conținut fără vocabular limitat, unde constrângerea de repetiție n-are sens.

De ce ai renunțat la stilul vizual pe care îl foloseai deja?

Pentru că era construit pentru alt public. Formele cubice se citesc ca joc video, iar publicul aici are între trei și șase ani. Am păstrat mecanismul motorului și am rescris doar geometria personajelor, în forme rotunjite — costul a fost o zi de lucru, nu reconstruirea de la zero.

Ce s-ar întâmpla dacă aș sări peste verificarea pe cadre?

Ai publica un episod în care un obiect stă peste fața personajului care vorbește, fără să afli vreodată. Randarea se termină „fără erori” în ambele cazuri — sistemul nu are cum să știe că un măr acoperă o față. Diferența o face un om care se uită.

Surse

#agenți AI #Educație #prompturi #video
Costin Pietraru
Scris de

Costin Pietraru

Inginer cu 30+ ani în sisteme, fondator SimpluSPV. Livrează cursul de AI pentru firme și scrie despre automatizare aplicată — fără teorie, doar sisteme care lucrează.

Vezi profilul complet →

Vrei firma pregătită pentru AI, corect și legal?

4 ședințe aplicate, echipa pleacă cu sisteme reale și documentele de conformitate. Garanție bani înapoi după 2 ședințe.

Înscrie echipa la curs →