Sprint commerciali: un commercial si fa con lastra, file del film e dati - #15
Merged
Merged
Conversation
…in moduli puri Il catalogo dichiara i rapporti e Root registra ogni scena in 16:9, 9:16 e 4:5, piu' TopicsFilm, le stesse scene in finestre (kit/film.ts, kit/SceneWindow.tsx), misurato da film-identity.sh contro le scene da sole. Le pose verticali vengono dalla regola R (poses.ts) e il thread va a capo dove finisce il quadro. I tempi di CardHandoff e di PromptInput escono dai componenti in moduli puri, per i banchi. expect.sh e bench-coverage.py pronti per i controlli generati. Il 16:9 resta identico a main (still-identity su tutte le scene e sulle finestre di UIMockup, CardHandoff e PromptInput). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…erati, provini in ogni formato manifest.mjs prende --ratio (chain, fill, film, project-cases con le pose del rapporto), ha 'bench NOME' che legge la geometria di un banco dal suo modulo sotto il prodotto, e 'checks' che raccoglie i controlli da scripts/checks/*.mjs nel formato di expect.sh. I provini del tempo stanno nel catalogo e Root li registra nei tre rapporti. no-product-literals guarda i prodotti, non il kit, anche nelle sottocartelle. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… i negativi --must-fail Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…hiarate dalla scena tempo.py confrontava i primi 480x270 byte: in 9:16 era il terzo alto del quadro. Adesso scala a un quarto del lato e confronta tutto. Le soglie che non scalano (il ritardo della card sulla mano) le dichiara CardHandoff nel manifest: fuori da quelle finestre il tempo normalizzato deve coincidere, dentro il residuo deve esserci. fixture-tempo.sh e fixture-trim.sh prendono rapporto e percorsi. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
seam.sh controllava la separazione prima della soglia, quindi una giunta rotta usciva 2 (misura inutile) e mai 1. Adesso 2 solo se anche il taglio di controllo e' quasi zero. rest-point.sh prende --ratio; i due negativi (ritaglio mosso, fermo immagine) sono generati per rapporto con tempi presi dalla durata. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…lo, negativi in ogni formato Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
… per la fixture, il vuoto esce 3
Il ritaglio sull'intestazione del thread si proietta con la posa del rapporto
(nel 16:9 resta {0,410,628,40}). Un ritaglio senza testo usciva 1 dando la colpa
al pavimento: adesso esce 3. La fixture a 0,25 e' un remotion still invece di
450 fotogrammi, e il banco controlla che il quadro sia quello del rapporto.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…l quadro, soglia misurata La geometria e' la card all'ultimo fotogramma nel quadro del rapporto e la stessa zona della lastra al primo, proiettata con yaw e pitch veri; K dalle larghezze proiettate. Il banco esce 3 se il quadro non e' lo stage o un ritaglio non esce della dimensione chiesta (prima dava 449159000x). Nitidezza a mezzo pixel e soglia 1,35: render veri 2,81/1,79/2,02, screenshot 1,09/1,14/1,06. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Il banco contava il quadro intero e in 9:16 e 4:5, con il pulsante d'invio fuori quadro, promuoveva scarto 2 qualunque fosse lo scarto vero. Adesso guarda due zone proiettate dal manifest nel tratto a camera ferma: lo svuotamento del campo e la bolla nella coda del thread. Tre copie guaste per rapporto (eventi fusi, interfaccia lenta, clic mancato) escono 1. Scarto misurato: 5 frame, 4 sul provino veloce in 9:16. Tolto uno slideY ridondante che tsc segnalava. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…in quadro, OCR sulla zona I sei frame e le parole copiate dalla scena diventano il manifest: campioni dalla battitura, dall'invio e dallo streaming, verificati crescenti; tolte le parole che lo scambio precedente del thread gia' mostrava (thread.ts). L'OCR legge thread e campo alla posa ferma del rapporto. TESSERACT sostituisce il sudo mv nel negativo; aggiunti due negativi veri, fermo immagine e coda coperta. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ddrizzata In 9:16 la camera segue la card e sullo schermo si misurava la panoramica; e i campioni prima della presa facevano passare un taglio secco. Adesso ogni campione del trascinamento si raddrizza sulla lastra con la camera di quel frame (angoli proiettati dal manifest), e il baricentro del cambiamento si legge li'. Le intestazioni delle colonne, ferme durante il gesto, controllano il raddrizzamento: zero pixel sui render veri, 40-150 su un fermo immagine, che prima in 9:16 attraversava 208 px. Fermo, contrario e taglio escono 1 in ogni rapporto. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ggiornati pagina (dimostrazioni e proiezione, senza render), formato x3 (render, provini, expect.sh sui controlli del manifest, bench-coverage col suo negativo), deploy (assembla col 16:9 e pubblica). Cache per rapporto. Tolti i comandi vecchi del manifest e benches.ts. film-identity: il negativo guarda il frame in cui la camera corre, calcolato dalla traccia. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
In CI (ImageMagick 6) la coppia al contrario di seam risultava quasi identica e l'inizio di BoardOrbit in 9:16 sfondava la soglia di rest-point, mentre sul Mac (ImageMagick 7) passavano. compare -fuzz non conta allo stesso modo nelle due versioni. _pixeldiff.sh fa il conto con ffmpeg, grigio e soglia 20 su 255: giunte fino allo 0,21%, tagli di controllo 2,8-11%, coppia al contrario 41%. rest-point ricalibrato sui tre rapporti (peggiore 0,24, soglia 0,45). Gli artefatti della CI si caricano anche quando un banco boccia. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…eografie, testo, cursore, tipografia, film di esempio kit/filmCamera.ts: la camera di un film intero a chiavi per formato, cubica monotona (niente scavalchi), velocita' zero ai capi, checkFilmCamera. kit/FilmView.tsx: il componente Film. Shot prende strati a profondita' diverse (CAM-02) e la luce dello schermo sul piano (MAT-02). kit/choreo.ts (CHR-01/02/03, TXT-04), kit/text.ts (TXT-01/02/03/05), kit/cursorArc.ts (CUR-01/02), kit/type.ts e TypeLine.tsx (TYP-01/02/03/04/05/09/10) con le regole di sosta e di battute. products/demo: Registro, un prodotto inventato, e DemoFilm in tre formati, costruito solo con i pezzi del kit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…it consumabile I due banchi del film e il job che li fa girare, piu' quello che hanno trovato sul film di esempio. film-rules.py calcola le regole di regia sui dati, senza renderizzare: camera senza inversioni e ferma ai capi, soste delle battute, battute che non si pestano i piedi, esitazione prima della pressione, catene di conseguenze, ordine delle consegne, nessun cambio di stato a camera ferma. Ogni regola ha la sua copia guasta (products/demo/rules.ts) e il negativo la nomina con --regola: un guasto che fa scattare un'altra regola non copre la sua. film-type.py misura la tipografia sui fotogrammi che il manifest indica, con il film reso due volte: com'e' e con il solo strato tipografico bianco sul nero, che e' la maschera delle lettere. Contrasto WCAG a riquadri di 48 px, contando il peggiore: la media nascondeva la didascalia della chiusura, bianca sulla lastra bianca per tre caratteri (1,03:1 contro una media di 3,34:1). Frasi da 3:1, didascalie da 4,5:1. I negativi sono il corpo doppio (esce dal quadro), il fondo scuro tolto (non si legge) e la maschera sporca, che esce 3 perche' non sta misurando lettere. Quello che i banchi hanno trovato, e che si vedeva bene in ogni fotogramma che qualcuno aveva guardato: - il fondo scuro sotto le frasi era tarato sul 16:9 e nel 9:16 lasciava la frase a 2,8:1; adesso sale con lei (6,3:1 e oltre); - lo scambio di TYP-04 lasciava il buco di una lettera fra "un" e "lavoro.", perche' la cella era larga quanto la parola piu' larga: adesso passa da una larghezza all'altra con due copie invisibili di corpo calante e crescente, senza misurare niente in JavaScript; - la maschera di una riga sporgeva di 0,28em anche verso la riga accanto e la parola che usciva passava sopra la base di quella sopra: fra due righe adesso sporge 0,06em; - la chiusura attenuava l'opacita' delle parti della UI ma non il fondo della lastra (1,53:1 sotto la frase): adesso Film prende `dim` e vela tutta la ripresa sotto la tipografia, e l'ultima chiave del 16:9 scende di 108 unita' perche' la lastra finisca sopra la frase; - il carattere veniva dal sistema, cioe' Helvetica Neue sul Mac e un clone di Arial in CI: adesso il film carica Inter da file (kit/font.ts, OFL accanto al file). La passata della maschera la fa il kit: `Film` prende `solo` e toglie lastra, bordo, copia dietro, luce e velo. Prima era il materiale trasparente di ogni film, e il primo film scritto fuori da questo repo se l'e' dimenticato. CI: un job `film` per rapporto, con la sua cache, che esegue i controlli del film e poi renderizza i 1350 frame come artefatto; `formato` gira tutti gli altri (--tranne film-demo). Il deploy non lo aspetta: il film non sta sulla pagina. Il kit si usa da un altro repository, ed e' stato provato: un progetto Remotion separato che importa il kit da un percorso, carica il suo carattere dalla sua cartella public e fa girare questi banchi sul suo film nei tre rapporti, con expect.sh e bench-coverage.py verdi. Per questo manifest.mjs prende un modulo di banco per percorso e i moduli dei controlli da un'altra cartella (--moduli), film-type.py prende --progetto e framelocked-verdict.sh legge PROGETTO. Le sei scene di Topics restano identiche a origin/main (still-identity.sh). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Il passo che mancava allo sprint: la chiusura degli script (al f1300 marchio, chiamata all'azione, dominio). `Lockup` sta nel kit e prende il marchio come nodo, perche' nel repo dei film e' l'asset vero del prodotto e qui non puo' stare; le righe salgono dalla maschera, sfalsate, e non escono piu'. La regola che ci va accanto: la chiusura deve essere tutta in campo almeno venti frame prima della fine (kit/type.ts `lockupProblems`), perche' un marchio che sta ancora salendo sull'ultimo fotogramma non e' una chiusura, e nei social l'ultimo fotogramma e' quello che resta fermo nel feed. Il guasto `marchio-tardi` la fa scattare. Per farci stare il marchio, la frase finale sale di un blocco a f1224, che cade fra l'uscita di "Approvato." e l'ingresso della chiusura: in quei due fotogrammi sul vetro non c'e' niente, quindi lo spostamento non si vede. Rifare i conti della chiusura ha trovato due difetti di tempo nel film: - la battitura partiva tre frame prima del clic sul campo, cioe' il testo compariva in un campo non ancora attivo: adesso `TYPING.start` si calcola da `FIELD_CLICK`; - la mano partiva verso il pulsante al f1020 mentre la battitura finiva al 1088: adesso la scena dell'assistente sta quaranta frame prima (clic 868, battitura 872-1055, pressione 1088) e la mano parte a testo finito. E un difetto della misura: nella maschera della tipografia finiva anche il segno quadrato del marchio, che nel render e' viola, e film-type.py lo contava come lettere (4,14:1 contro una soglia di 4,5). Il segno sta fuori dalla maschera: e' un marchio, non una lettera. 15 controlli del film per rapporto, tutti col codice atteso nei tre formati. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…o contiene gia' identico
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Sta sopra la #14 (blocco 6): finche' quella non e' mergiata, il diff qui contiene anche i suoi commit.
Cosa cambia
Alla fine di questo sprint, per fare il film di un prodotto servono tre cose: la lastra (la sua UI in DOM, divisa nelle parti che la camera separa), un file del film (chiavi di camera per formato, cosa succede sulla lastra, le frasi) e i dati. Le animazioni si prendono dal kit, con i numeri degli script gia' dentro; i controlli girano da soli nei tre formati.
La prova e'
video/src/products/demo/: Registro, uno sportello richieste inventato, 45 secondi, 1350 frame, in 16:9, 9:16 e 4:5, costruito solo con i pezzi del kit. Niente di Cifra o di Zeno.I due banchi del film
film-rules.pycalcola le regole di regia sui dati, senza render (meno di un secondo): camera senza inversioni e ferma ai capi, soste delle battute, battute che non si pestano i piedi, esitazione prima della pressione, catene di conseguenze, ordine delle consegne, nessun cambio di stato a camera ferma. Sette copie guaste, una per regola, e il negativo nomina la regola che deve accorgersene (--regola).film-type.pymisura la tipografia sui fotogrammi che il manifest indica. Il film si rende due volte: com'e' e con il solo strato tipografico bianco sul nero, che e' la maschera delle lettere. Poi bordo del quadro e contrasto WCAG a riquadri di 48 px, contando il peggiore. Negativi: corpo doppio, fondo scuro tolto, e maschera sporca (esce 3, perche' non sta misurando lettere).Cosa hanno trovato sul film di esempio
Ogni voce qui sotto stava in fotogrammi che avevo gia' guardato a occhio:
Filmprendedime vela tutta la ripresa; l'ultima chiave del 16:9 scende di 108 unita'kit/font.ts, OFL accanto)CI
Un job
filmper rapporto, con la sua cache: esegue i controlli del film e poi renderizza i 1350 frame come artefatto da guardare.formatofa girare tutti gli altri (--tranne film-demo). Il deploy non aspetta il film, che non sta sulla pagina.Il kit da un altro repository
Provato davvero: un progetto Remotion separato che importa il kit da un percorso, carica il suo carattere dalla sua cartella
publice fa girare questi banchi sul suo film nei tre rapporti, conexpect.shebench-coverage.pyverdi. Serve a questo il modulo di banco per percorso,--moduliper i controlli,--progettoinfilm-type.pyePROGETTOinframelocked-verdict.sh. Il README lo spiega passo per passo.Verifiche
still-identity.sh origin/main: le sei scene di Topics sono identiche fotogramma per fotogramma.npm run lint,no-product-literals.sh: puliti.🤖 Generated with Claude Code
Aggiunto dopo: la chiusura col marchio
Lockupnel kit (il marchio arriva come nodo: qui e' scritto in DOM, nel repo dei film sara' l'asset vero), con la sua regola: la chiusura deve essere tutta in campo almeno venti frame prima della fine, e il guastomarchio-tardila fa scattare. Rifare i conti della chiusura ha trovato due difetti di tempo nel film di esempio, che nessuna immagine faceva vedere:TYPING.startsi calcola daFIELD_CLICK;E un difetto della misura: nella maschera finiva anche il segno quadrato del marchio, viola nel render, contato come lettere (4,14:1). Il segno sta fuori dalla maschera.
15 controlli del film per rapporto, tutti col codice atteso nei tre formati.
La prima run di CI (commit precedente)
Tutti e sette i job verdi. Tempi:
pagina5,0 min;formato15,7 / 15,0 / 10,0;film11,1 / 10,4 / 9,3. La run intera sta in 16 minuti perche' i job vanno insieme.