Una pieza corta en bucle: una foto de oficio dentro de la lente, la voz que entra con el golpe de la esfera, la selección que encaja y el cierre de marca. La foto es material fijo que sólo se acerca un poco. Guía completa: docs/agent-composition/surfaces/motion.md.
motion
2 aprobadas
Token
surfaces.motion
01 · motion
Gráfica animada con foto fija
Redes, pantallas y presentaciones: la animación de la línea sobre una foto hecha para la lente, con el reveal del logo al final.
En silencio y en autoplay: quien mira entra en cualquier momento, por eso el mensaje completo ocupa la mayor parte del tiempo.
Reglas de la superficie
photo-passes-still-qaLa foto es material fijo: pasa el QA de foto fija antes de animar.
animate-the-line-not-the-photoSe anima la línea (arco, esfera, halo) y la voz; la foto no.
photo-zoom-max-10pct-logLa foto sólo se acerca, dentro de su lente o a sangre: hasta 10 %, en escala logarítmica, nunca mientras entra la voz.
message-80pct-of-timeEl mensaje completo ocupa al menos el 80 % del tiempo.
last-frame-static-fallbackEl último cuadro (o el sostén) es el estático de respaldo completo y la versión con movimiento reducido.
no-audio-outdoorEn vía pública, sin audio. Con sonido, sólo el golpe sintetizado.
signature-in-close-own-brand-onlyLa firma va en el cierre (sting o reveal), sólo en marca propia; nunca en piezas de clientes. La toma nunca lleva logo.
no-generated-animationNunca se genera la animación con un modelo de video ni paralaje falso sobre la foto.
La regla general es el logo de Efeonce centrado. Cada superficie la adapta a cómo se lee.
La toma nunca lleva logo: firma el cierre (reveal o sting).
Sólo en marca propia; nunca en piezas de clientes.
Rechazado
Lo que el operador rechazó
Lo rechazado no es receta: no tiene id ni imagen de referencia. Queda escrito para no repetirlo.
No hay rechazos explícitos en esta superficie.
Pendientes y hallazgos a revisar
Los tiempos de la maqueta aprobada se escribieron en su script; el contrato los lleva a los tokens y un render nuevo los lee de ahí.
En el cuadro de sostén de la animación aprobada, el final de la pregunta toca el anillo de la lente: un render nuevo tiene que respetar «ningún texto cruza el anillo».
Para agentes
Intent de ejemplo
Pasa por el contrato real al construir esta página: si trae un error, el Lab no se publica. Cópialo, cambia el texto y resuélvelo.
{
"contract": "efeonce.surface-composition",
"version": "0.1.1",
"surface": "motion",
"format": "16x9",
"role": "storyboard",
"recipe": "storyboard",
"line": "growth",
"theme": "dark",
"voice": {
"question": "¿Tu marketing mide lo que vende?",
"answer": [
"Ahora",
"sí"
]
},
"title": "Motion · 8 s con foto fija · el lenguaje de movimiento de la órbita, cuadro a cuadro",
"frames": [
{
"segment": "anticipation",
"title": "Anticipación",
"caption": "Navy vacío. El anillo aparece chico y la esfera retrocede antes de salir."
},
{
"segment": "lens-opens",
"title": "La lente se abre",
"caption": "El círculo crece y descubre la foto: la escena entra por la lente, rápido y con curva de llegada."
},
{
"segment": "arc-runs-sphere-hits",
"title": "El arco corre y la esfera golpea",
"caption": "Tramo rápido con estela; la esfera llega con sobrepaso y un pulso de impacto con eco."
},
{
"segment": "voice-enters",
"title": "La voz entra con sobrepaso",
"caption": "Pregunta primero; «Ahora» ya asentó; «sí» llega un 12 % más grande y se asienta."
},
{
"segment": "selection-settles",
"title": "La selección encaja",
"caption": "Los corchetes de AXIS se ajustan a la respuesta y entra el cursor de Growth. Un protagonista a la vez."
},
{
"segment": "hold",
"title": "Sostén",
"caption": "Todo quieto salvo la foto, que respira dentro de la lente (hasta 10 %). Este cuadro es el estático de respaldo."
},
{
"segment": "close-reveal",
"title": "Cierre: reveal",
"caption": "El reveal aprobado v1.1, el mismo cierre del audiovisual: la nave entra en su órbita y se asienta."
},
{
"segment": "end-card",
"title": "Tapa final",
"caption": "Logo con el eslogan: la tapa de cierre del reveal. Con sonido, el golpe del lenguaje de movimiento."
}
],
"photo": {
"register": "respuesta",
"subject": "person",
"plateRef": "ai-generations/2026-09-26_web-movil/plates/M1-avanza-polo.png",
"alt": "Una directora de cuentas con el polo de Efeonce avanza hacia la cámara y la mira",
"native": "4:7",
"focus": {
"xOfWidth": 0.456,
"yOfHeight": 0.2372
}
}
}
{
"schema": "axis.surface-composition.v1",
"contract": {
"id": "efeonce.surface-composition",
"version": "0.1.2",
"lifecycle": "candidate"
},
"status": "resolved",
"surface": "motion",
"format": "16x9",
"role": "storyboard",
"recipe": {
"id": "storyboard",
"status": "approved",
"role": "storyboard"
},
"use": null,
"layout": null,
"line": "growth",
"theme": "dark",
"palette": {
"background": "#001a33",
"accent": "#36c8bf",
"ink": "#ffffff",
"soft": "#e2e2e2"
},
"canvas": {
"width": 1920,
"height": 1080,
"unit": "px",
"format": "16x9",
"fps": 30,
"render": {
"width": 960,
"height": 540
},
"codec": "h264",
"pixelFormat": "yuv420p",
"audio": false
},
"safeArea": null,
"reserves": [
{
"band": "voice",
"side": "start",
"inset": 0.0729,
"fromTop": 0.2426
},
{
"band": "answer",
"side": "start",
"inset": 0.0667,
"fromTop": 0.3259
},
{
"band": "lens",
"region": "center",
"circle": {
"cxOfWidth": 0.599,
"cyOfHeight": 0.3889,
"rOfHeight": 0.363
},
"source": "pieces.lens.wall"
}
],
"type": {
"question": {
"family": "Poppins",
"weight": 300,
"px": 40,
"lineHeight": null,
"tracking": null,
"uppercase": false,
"color": "#ffffff"
},
"answer": {
"family": "Bricolage Grotesque",
"weight": 760,
"px": 170,
"lineHeight": 0.92,
"tracking": "-0.05em",
"uppercase": false,
"color": "#ffffff"
}
},
"dominance": {
"ratio": 4.25,
"min": 3,
"ok": true
},
"steps": null,
"signature": {
"mode": "close-only",
"photoCarriesLogo": false,
"orbitDelegate": "surface-owned"
},
"timeline": {
"durationMs": 8000,
"loop": true,
"audio": false,
"segments": [
{
"id": "anticipation",
"fromMs": 0,
"toMs": 300
},
{
"id": "lens-opens",
"fromMs": 300,
"toMs": 800
},
{
"id": "arc-runs-sphere-hits",
"fromMs": 800,
"toMs": 1200
},
{
"id": "voice-enters",
"fromMs": 1200,
"toMs": 1800,
"overshoot": [
{
"key": "default",
"value": 1.2
},
{
"key": "letters",
"value": 1.6
}
],
"secondWordScaleOver": 0.12
},
{
"id": "selection-settles",
"fromMs": 1800,
"toMs": 2400
},
{
"id": "hold",
"fromMs": 2400,
"toMs": 4400,
"photoZoomMax": 0.1,
"staticFallback": true
},
{
"id": "close-reveal",
"fromMs": 4400,
"toMs": 5400
},
{
"id": "end-card",
"fromMs": 5400,
"toMs": 8000
}
],
"close": {
"piece": "reveal",
"startMs": 4400,
"durationMs": 3600
},
"crossfadeMs": 250,
"curves": {
"arrive": "emphasized",
"transform": "standard",
"exit": "emphasizedAccelerate"
},
"cameraZoom": "log",
"staticFallback": "hold",
"reducedMotion": "static-fallback"
},
"rules": [
{
"id": "efeonce-dark-ground",
"text": "El fondo Efeonce (#001a33) se mantiene en toda pieza de línea; la línea sólo aporta el acento (operador, 2026-09-26)."
},
{
"id": "one-sphere-per-piece",
"text": "Una esfera por pieza: cierra la respuesta; nunca es viñeta ni adorno."
},
{
"id": "one-orbit-per-piece",
"text": "Una órbita por pieza o lámina: anillo, lente, indicador o medida, uno solo."
},
{
"id": "accent-text-min-size",
"text": "El acento nunca colorea texto de menos de 24 px: ahí el texto va en blanco o suave sobre oscuro (navy sobre claro); el acento marca con un elemento de 24 px o más o con el ícono."
},
{
"id": "timings-from-tokens",
"text": "Los tiempos salen de efeonceGraphicLine (surfaces.*.timeline y motion); nunca se escriben en el script."
},
{
"id": "answer-dominates-3x",
"text": "La respuesta mide al menos 3 veces la pregunta (type.answer.minRatioOverQuestion)."
},
{
"id": "figures-with-source",
"text": "Cifras sólo con fuente; precios siempre como marcador."
},
{
"id": "isotype-composed",
"text": "El isotipo en prendas generadas se compone desde @efeoncepro/axis-brand-assets; nunca el que dibuja el modelo."
},
{
"id": "cine-only-nexa-or-proposal",
"text": "Registro cine sólo con Nexa protagonista o en las recetas de cine del deck (photo.cine.recipes: proposal-cinematic y, desde el 2026-09-27, la portada de brochure, las contraportadas con foto, la sección de cine, la lente de la propuesta sobria desde el 2026-09-28 y, como excepción aprobada con personas del equipo en luz dramática, la sección partida); proporciones reales (cámara a ~2 m, 85 mm)."
},
{
"id": "no-close-gaze-pairs",
"text": "Nunca dos personas mirándose de cerca: se lee romántico (rechazo del operador, 2026-09-27)."
},
{
"id": "semantic-reserves-only",
"text": "Sin coordenadas libres: regiones semánticas y fracciones que salen de tokens."
},
{
"id": "photo-passes-still-qa",
"text": "La foto es material fijo: pasa el QA de foto fija antes de animar."
},
{
"id": "animate-the-line-not-the-photo",
"text": "Se anima la línea (arco, esfera, halo) y la voz; la foto no."
},
{
"id": "photo-zoom-max-10pct-log",
"text": "La foto sólo se acerca, dentro de su lente o a sangre: hasta 10 %, en escala logarítmica, nunca mientras entra la voz."
},
{
"id": "message-80pct-of-time",
"text": "El mensaje completo ocupa al menos el 80 % del tiempo."
},
{
"id": "last-frame-static-fallback",
"text": "El último cuadro (o el sostén) es el estático de respaldo completo y la versión con movimiento reducido."
},
{
"id": "no-audio-outdoor",
"text": "En vía pública, sin audio. Con sonido, sólo el golpe sintetizado."
},
{
"id": "signature-in-close-own-brand-only",
"text": "La firma va en el cierre (sting o reveal), sólo en marca propia; nunca en piezas de clientes. La toma nunca lleva logo."
},
{
"id": "no-generated-animation",
"text": "Nunca se genera la animación con un modelo de video ni paralaje falso sobre la foto."
}
],
"references": [
{
"id": "storyboard",
"title": "Motion · cuadro a cuadro con el lenguaje de movimiento",
"status": "approved",
"image": "/references/surfaces/motion/storyboard.jpg",
"canvasPage": "motion",
"canvasBoard": "MotionStoryboard.dc.html"
}
],
"delegates": {
"orbit": [
{
"scene": "main",
"contract": "efeonce.graphic-line-orbit",
"intent": {
"canvas": {
"width": 1920,
"height": 1080,
"line": "growth",
"surface": "dark",
"channel": "screen"
},
"elements": [
{
"kind": "voice",
"id": "voice",
"questionId": "question",
"answerId": "answer",
"answerText": "Ahora sí"
},
{
"kind": "lens",
"id": "lens",
"photoId": "ai-generations/2026-09-26_web-movil/plates/M1-avanza-polo.png",
"alt": "Una directora de cuentas con el polo de Efeonce avanza hacia la cámara y la mira",
"region": "center"
}
]
}
}
],
"close": {
"piece": "reveal",
"format": "16x9",
"durationMs": 3600,
"startMs": 4400,
"source": "efeonceGraphicLine.motion.pieces.reveal",
"signsOnlyOwnBrand": true
},
"selection": [],
"icons": [],
"photo": {
"register": "respuesta",
"subject": "person",
"plateRef": "ai-generations/2026-09-26_web-movil/plates/M1-avanza-polo.png",
"alt": "Una directora de cuentas con el polo de Efeonce avanza hacia la cámara y la mira",
"native": "4:7",
"focus": {
"xOfWidth": 0.456,
"yOfHeight": 0.2372
},
"emblem": "compose-from-axis-brand-assets"
}
},
"content": {
"eyebrow": null,
"question": "¿Tu marketing mide lo que vende?",
"answer": [
"Ahora",
"sí"
],
"answerSphere": "closes-last-line",
"body": null,
"proof": null,
"measure": null,
"progress": null,
"cta": null,
"variants": null,
"levels": null,
"note": null,
"panels": null,
"figures": null,
"nav": null,
"title": "Motion · 8 s con foto fija · el lenguaje de movimiento de la órbita, cuadro a cuadro",
"frames": [
{
"segment": "anticipation",
"title": "Anticipación",
"caption": "Navy vacío. El anillo aparece chico y la esfera retrocede antes de salir.",
"fromMs": 0,
"toMs": 300
},
{
"segment": "lens-opens",
"title": "La lente se abre",
"caption": "El círculo crece y descubre la foto: la escena entra por la lente, rápido y con curva de llegada.",
"fromMs": 300,
"toMs": 800
},
{
"segment": "arc-runs-sphere-hits",
"title": "El arco corre y la esfera golpea",
"caption": "Tramo rápido con estela; la esfera llega con sobrepaso y un pulso de impacto con eco.",
"fromMs": 800,
"toMs": 1200
},
{
"segment": "voice-enters",
"title": "La voz entra con sobrepaso",
"caption": "Pregunta primero; «Ahora» ya asentó; «sí» llega un 12 % más grande y se asienta.",
"fromMs": 1200,
"toMs": 1800
},
{
"segment": "selection-settles",
"title": "La selección encaja",
"caption": "Los corchetes de AXIS se ajustan a la respuesta y entra el cursor de Growth. Un protagonista a la vez.",
"fromMs": 1800,
"toMs": 2400
},
{
"segment": "hold",
"title": "Sostén",
"caption": "Todo quieto salvo la foto, que respira dentro de la lente (hasta 10 %). Este cuadro es el estático de respaldo.",
"fromMs": 2400,
"toMs": 4400
},
{
"segment": "close-reveal",
"title": "Cierre: reveal",
"caption": "El reveal aprobado v1.1, el mismo cierre del audiovisual: la nave entra en su órbita y se asienta.",
"fromMs": 4400,
"toMs": 5400
},
{
"segment": "end-card",
"title": "Tapa final",
"caption": "Logo con el eslogan: la tapa de cierre del reveal. Con sonido, el golpe del lenguaje de movimiento.",
"fromMs": 5400,
"toMs": 8000
}
],
"chapter": null,
"shots": null,
"subtitles": null,
"lines": null,
"slogan": null
},
"adapterChecks": [
"text-inside-its-reserve",
"text-never-crosses-ring",
"answer-dominates-3x-painted",
"accent-text-min-size",
"signature-where-the-surface-says",
"subject-outside-text-reserve",
"last-frame-is-static-fallback",
"legibility-at-reading-distance"
],
"issues": []
}