docs(hyperframes): lecciones medidas contra un corpus de referencias, y cuatro herramientas de verificación - #9
Open
occazzio wants to merge 3 commits into
Conversation
… verificación
Producir ocho piezas contra un corpus de 22 referencias de motion graphics dejó
un conjunto de hallazgos que contradicen o completan lo que el skill ya decía.
Todo lo que se afirma acá está medido, no estimado.
Nuevo: references/lecciones-medidas.md
· Las trampas del motor de captura por seek: immediateRender muerde en las dos
direcciones (con false el elemento muestra su estado FINAL desde el cuadro 0),
los fundidos que terminan en un límite de clip necesitan un tl.set duro, no
hay obturador así que todo el motion blur es autoreado, y dos tweens sobre la
misma propiedad se pisan en silencio.
· La escala real de un travelling: medido sobre una referencia, el objeto pasa
del 13 % al 88 % del ancho del cuadro. Un empuje de 1.0 a 1.15 no es una
cámara. Umbral de percepción: 1 px de desplazamiento aparente por cuadro.
· Por qué una cámara necesita textura (grano) para verse, y por qué el modo de
fusión importa: overlay sobre negro devuelve negro.
· Cómo se ilumina un objeto en la oscuridad: lo define su borde, no su relleno.
· Ninguna medición de texto es válida antes de document.fonts.ready — offsetWidth
devuelve el ancho de la tipografía de respaldo, medido 23 % menor. Alternativas
por porcentaje y transformada que no dependen de ninguna métrica.
· Siete layouts de composición leídos de las referencias, con el único caso en
que corresponde centrar.
· Ritmo (variación 3×), tiempo de lectura (17 caracteres por segundo), y las
equivalencias de curva entre la literatura y GSAP: cubic out es power2.out,
no power3 — la numeración de GSAP induce a este error.
· Audio: el sonido va en el pico de la animación, y loudnorm controla el pico de
muestra mientras el encoder AAC reconstruye picos entre muestras.
Nuevo: scripts/lab/ — cuatro herramientas que sostienen esas afirmaciones
· fluidez.sh mide cuántos cuadros no cambian respecto del anterior
· sfx.sh sintetiza aire/click/sub/cama/riser con el pico en posición conocida
· master.sh deja el audio en -16 LUFS verificando el pico real y corrigiéndose
· getfont.mjs baja cualquier Google Font en woff2 y arma el @font-face
Correcciones a contenido existente
· references/typography.md prohibía tipografías sin advertir que el motor sólo
embebe 18 familias. Siguiendo la lista tal como estaba se podía elegir una que
no está embebida, y el render caía a la de respaldo en silencio.
· references/motion-principles.md proponía animar letterSpacing como variación
de entrada, y el propio lint del motor lo rechaza: reflowea el texto y se clava
a píxeles enteros, así que tiembla bajo la captura por seek.
Verificado: npm run check (695 archivos, 0 errores) y npm run sync:skills sin
discrepancias entre .claude/ y .agents/.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
scripts/lab/logos.mjs baja logos del CDN de Simple Icons con el color oficial de cada marca, sin API key. Se bajan al proyecto en vez de enlazarlos porque el motor renderiza sin red garantizada y una composición tiene que ser reproducible offline. No todas las marcas están: Adobe, Canva, Slack y OpenAI devuelven 404 porque pidieron que no se use su logo. La herramienta lo reporta en vez de tragárselo — la diferencia entre notarlo y descubrir un hueco recién en el render. Y un detalle que no es decoración: el logo va sobre una pastilla blanca. Notion, Vercel, GitHub y OBS son casi negros y sobre fondo oscuro desaparecen. Además, en lecciones-medidas.md: el color vive en los objetos, no en las letras. Texto blanco sobre oscuro o negro sobre claro. Si el texto compite en color con el objeto, hay dos cosas peleando por el mismo trabajo. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Un valor relativo (+=, -=) captura su base al inicializar el tween. El render reparte la pieza en tramos entre varios workers: uno inicializa a mitad de vuelo del tween anterior y otro arranca en frío con el estado final, así que el mismo cuadro sale en dos posiciones distintas y se ve como un salto en el límite del tramo. Va siempre fromTo con extremos explícitos. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Qué es
Usé el kit para producir ocho piezas, midiendo cada una contra un corpus de 22 referencias reales de motion graphics. El proceso dejó un conjunto de hallazgos que contradicen o completan lo que el skill de
hyperframesya decía, más cuatro herramientas que sostienen esas afirmaciones.Todo lo que se afirma en el documento está medido, no estimado.
Qué cambia
Nuevo ·
references/lecciones-medidas.mdEnlazado como primera referencia del SKILL.md, con la nota de que donde contradiga al resto del skill gana, porque está medido.
immediateRendermuerde en las dos direcciones: con el default el elemento se congela en su estado inicial desde el cuadro 0, y confalsemuestra su estado final desde el cuadro 0. Este último apareció tres veces en piezas distintas. También: los fundidos que terminan en un límite de clip necesitan untl.setduro, no hay obturador —todo el motion blur es autoreado—, y dos tweens sobre la misma propiedad se pisan en silencio.mix-blend-mode: overlaysobre negro devuelve negro, así que el grano queda puesto y es invisible.document.fonts.ready:offsetWidthdevuelve el ancho de la tipografía de respaldo, medido 23 % menor, y una caja calculada con ese número recorta la frase para siempre. Incluye las alternativas por porcentaje y transformada que no dependen de ninguna métrica.power2.out, nopower3— la numeración de GSAP induce a este error.loudnormcontrola el pico de muestra mientras el encoder AAC reconstruye picos entre muestras (~1.6 dB).Nuevo ·
scripts/lab/fluidez.shsfx.shmaster.shgetfont.mjs@font-faceLas cuatro usan sólo ffmpeg y Node, que el kit ya requiere.
Correcciones a contenido existente
references/typography.mdprohibía tipografías sin advertir que el motor sólo embebe 18 familias. Siguiendo la lista tal como estaba se podía elegir una que no está embebida y el render caía a la de respaldo en silencio. Ahora dice cuáles sobreviven a ambos filtros y cómo traer las demás.references/motion-principles.mdproponía animarletterSpacingcomo variación de entrada, y el propio lint del motor lo rechaza: reflowea el texto y se clava a píxeles enteros, así que tiembla bajo la captura por seek. Corregido con la alternativa (partir en spans y animar laxde cada glifo).Para el revisor
.claude/y.agents/están sincronizados connpm run sync:skills, como pide el CLAUDE.md del repo.npm run checkda 695 archivos y 0 errores;npm run sync:skillsno reporta discrepancias.scripts/lab/y no envideo-projects/, que está en.gitignore— las referencias del documento apuntan ahí.🤖 Generated with Claude Code