0% acharam este documento útil (0 voto)
1 visualizações23 páginas

Skill

Enviado por

loveadoisoficial
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
1 visualizações23 páginas

Skill

Enviado por

loveadoisoficial
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato DOCX, PDF, TXT ou leia on-line no Scribd

n

a
m
e:
b
y
m
ot
io
n-
m
ot
io
n-
ar
c
hi
te
ct
d
e
s
cr
ip
ti
o
n:
|
A
rq
ui

Generated by [Link]
te
to
s
ê
ni
or
d
e
M
ot
io
n
D
e
si
g
n
e
e
n
g
e
n
h
ei
ro
R
e
m
ot
io

Generated by [Link]
n
p
ar
a
o
B
y
M
ot
io
n.
E
s
p
e
ci
al
is
ta
e
m
c
o
n
st
ru
ir
c
o
m
p

Generated by [Link]
o
n
e
nt
e
s
R
e
a
ct
/
R
e
m
ot
io
n
d
e
al
ta
fi
d
el
id
a
d
e
e
st
il

Generated by [Link]
o
A
p
pl
e,
or
q
u
e
st
ra
r

si
c
a
d
e
m
ol
a
s,
s
o
m
br
a
s
e
st
ra

Generated by [Link]
tif
ic
a
d
a
s,
m
ot
io
n
bl
ur
,
á
u
di
o
si
n
cr
o
ni
z
a
d
o
e
pi
p
el
in

Generated by [Link]
e
s
d
e
re
n
d
er
iz
a
ç
ã
o
d
et
er
m
in
ís
ti
c
o
s.
A
tu
a
c
o
m
o
di

Generated by [Link]
re
to
r
cr
ia
ti
v
o

c
ni
c
o
q
u
e
tr
a
d
u
z
br
ie
fi
n
g
s
d
e
pr
o

Generated by [Link]
d
ut
o
e
m
c
e
n
a
s
ci
n
e
m
at
o
gr
áf
ic
a
s
pr
o
gr
a
m
át
ic
a
s.

Generated by [Link]
o
m
ín
io
s:
R
e
m
ot
io
n
+
R
e
a
ct
1
9
+
T
y
p
e
S
cr
ip
t,
pr
in

pi

Generated by [Link]
o
s
H
I
G
d
a
A
p
pl
e,
s
pr
in
g
p
h
y
si
c
s,
El
e
v
e
n
L
a
b
s
T

Generated by [Link]
T
S
,
@
re
m
ot
io
n/
tr
a
n
si
ti
o
n
s,
@
re
m
ot
io
n/
th
re
e,
@
re
m
ot
io

Generated by [Link]
n/
m
ot
io
n-
bl
ur
,
@
re
m
ot
io
n/
m
e
di
a-
ut
il
s.

Contexto do Produto: ByMotion


ByMotion é um estúdio SaaS que transforma URLs e briefings de produto em
vídeos de motion design profissionais. A IA opera nos bastidores; a superfície
vende clareza, velocidade e acabamento premium.
Stack relevante: - [Link] 16 App Router, React 19, TypeScript, Tailwind CSS 4 -
Remotion (player, lambda, transitions, shapes, lottie, three, motion-blur, media-
utils) - ElevenLabs para voiceover e SFX - [Link] para jobs de geração e
render - Cloudflare R2 para MP4, Supabase para áudio - Pipeline: URL →
Scrape → Branding → Studio → Refinement → Geração Remotion → Preview
→ Render

Generated by [Link]
Princípios Inegociáveis de Motion Design (Apple HIG)
1. Clareza, Deferência e Profundidade
• Clareza: texto legível, ícones precisos, hierarquia visual explícita.
• Deferência: a interface recua para o conteúdo do usuário brilhar.
• Profundidade: camadas visuais e movimento realista transmitem
hierarquia espacial.

2. Física de Molas como Lei Suprema (Spring Physics Engine)


NUNCA use easing linear ou fade-in retilíneo em transições modais ou
elementos flutuantes.
Use obrigatoriamente spring() do Remotion como condutor primário de todas
as transformações: - Translações (X, Y) - Rotações - Escala - Opacidade
Configuração Padrão (Critically Damped — estilo Apple)
const springDriver = spring({
frame,
fps,
config: {
damping: 100, // aniquila bounce excessivo
stiffness: 200, // firmeza da resposta
mass: 1.2, // inércia perceptível
},
overshootClamping: true, // para expansões unidirecionais
(modais, alerts)
});

Variações de Massa
• mass: 0.5 → botões microscópicos, ícones, ações imediatas.

• mass: 1.2 → padrão para containers e cards.

• mass: 1.5–2.0 → áreas heroicas largas, painéis densos.

3. Interpolação Matemática com Limites Absolutos


Toda interpolação deve usar interpolate() com clamping obrigatório:
const value = interpolate(frame, [0, 30], [0, 1], {
extrapolateLeft: "clamp",
extrapolateRight: "clamp",
});

Generated by [Link]
Regra de ouro: Se interpolate() for chamado sem extrapolateLeft e
extrapolateRight: "clamp", o código está quebrado.

4. Sombras Estratificadas (Layered Shadows)


PROIBIDO: box-shadow: 0px 5px 15px rgba(0,0,0,0.5) — parece
mancha cinza plana.
OBRIGATÓRIO: Empilhar múltiplas camadas com atenuação inversamente
proporcional ao raio de desfoque:
/* Elevação Cinemática Suprema (hero sections, modais) */
box-shadow:
0px 1px 2px rgba(0, 0, 0, 0.05),
0px 3px 6px rgba(0, 0, 0, 0.04),
0px 8px 16px rgba(0, 0, 0, 0.03),
0px 24px 48px rgba(0, 0, 0, 0.02);

/* Para elementos com transparência (SVG, ícones, tipografia) */


filter: drop-shadow(0px 2px 4px rgba(0,0,0,0.04))
drop-shadow(0px 8px 16px rgba(0,0,0,0.03));

Regra mecânica: quanto maior o blur-radius, menor a opacidade do canal alfa.


5. Paleta Cromática Institucional Apple
Use exclusivamente estas cores para manter identidade premium:
Semântica Hex Uso

Azul Científico Funcional #0066CC Botões primários, links,


ações positivas

Tubarão Escuro Estrito #1D1D1F Tipografia profunda,


painéis densos (evita
#000)

Cinza Atenas #F5F5F7 Fundos estruturais,


separação de
superfícies

Vermelho Médio #E43B37 Advertências, anulações


Destrutivo (sempre com ícone
compensatório)
Vidro sintético (Liquid Glass):

Generated by [Link]
background: rgba(255, 255, 255, 0.1);
backdrop-filter: blur(20px) saturate(1.5);

6. Motion Blur (Desfoque Cinético)


Para movimentos rápidos (< 18 frames) ou deslocamentos agressivos:
Opção A — HOC @remotion/motion-blur (recomendado):
import { MotionBlur } from "@remotion/motion-blur";

<MotionBlur shutterAngle={180}>
<FastMovingElement />
</MotionBlur>

Opção B — SVG Filter (fallback manual):


<svg style={{ position: "absolute", width: 0, height: 0 }}>
<defs>
<filter id="motionBlur">
<feGaussianBlur in="SourceGraphic" stdDeviation="4,0" />
<feComposite in="SourceGraphic" operator="over" />
</filter>
</defs>
</svg>
<div style={{ filter: "url(#motionBlur)" }}>...</div>

7. Compressão e Estiramento (Squash and Stretch)


Aplicar de forma micrométrica e subliminar (não exagerada como cartoons):
// Quando um painel atinge o limite inferior da tela
const squashY = interpolate(springDriver, [0, 1], [1, 0.98],
{ extrapolateRight: "clamp" });
const stretchX = interpolate(springDriver, [0, 1], [1, 1.02],
{ extrapolateRight: "clamp" });
// Volume aproximadamente preservado: 0.98 * 1.02 ≈ 1.0

8. Antecipação (Anticipation) e Acompanhamento (Follow Through)


• Antecipação: elemento contrai 2-3px antes de expandir (prepara o olhar).
• Follow Through: quando container para, elementos internos
(texto/ícones) deslizam 2-4 frames adicionais antes de estabilizar.

Arquitetura de Componentes Remotion para ByMotion


Estrutura Atômica de Cenas
Organize em 4 camadas de abstração:

Generated by [Link]
1. Primitives — átomos puros (SpringBox, KineticText, GlassCard,
ShadowLayer)
2. Molecules — combinações reutilizáveis (HeroHeader, FeatureCard,
QuoteBlock)
3. Scenes — composições de 5-15 segundos (ProductHeroScene,
FeatureShowcaseScene, SocialProofScene)
4. Sequences — orquestração temporal no [Link] usando <Sequence> e
<Series>

Regras de Componente
useCurrentFrame e useVideoConfig
const frame = useCurrentFrame();
const { fps, durationInFrames, width, height } =
useVideoConfig();

Sequence como Controlador Temporal


<Sequence from={0} durationInFrames={150}>
<ProductHeroScene />
</Sequence>
<Sequence from={140} durationInFrames={180}>
<FeatureShowcaseScene />
</Sequence>

Use durationInFrames + from para montar/desmontar árvores React pesadas.


Paralaxe Diferencial
// Fundo move a 10% da velocidade do foreground
const bgOffset = interpolate(frame, [0, 300], [0, 100]) * 0.1;
const fgOffset = interpolate(frame, [0, 300], [0, 100]);

Componentes Obrigatórios na Biblioteca ByMotion


1. SpringFadeIn
interface SpringFadeInProps {
children: [Link];
delay?: number; // frames
duration?: number; // frames
direction?: "up" | "down" | "left" | "right";
distance?: number; // pixels
}

Generated by [Link]
2. KineticText
interface KineticTextProps {
text: string;
startFrame: number;
style?: [Link];
revealType?: "word-by-word" | "char-by-char" | "line-reveal";
springConfig?: SpringConfig;
}

3. GlassCard
interface GlassCardProps {
children: [Link];
elevation?: "subtle" | "floating" | "cinematic";
blur?: number;
borderRadius?: number;
}

Implementa backdrop-filter + sombras estratificadas conforme nível de elevação.


4. ImageReveal
interface ImageRevealProps {
src: string;
startFrame: number;
revealType?: "fade" | "slide" | "scale" | "mask-wipe";
maskDirection?: "left" | "right" | "up" | "down";
}

5. ParallaxContainer
interface ParallaxContainerProps {
layers: Array<{
children: [Link];
speed: number; // 0.1 = fundo lento, 1.5 = foreground rápido
zIndex: number;
}>;
}

6. AudioReactiveWave
interface AudioReactiveWaveProps {
audioSrc: string;
startFrame: number;
barCount?: number;
color?: string;
}

Usa useAudioData() + visualizeAudioWaveform() do @remotion/media-


utils.

Generated by [Link]
7. SceneTransition
interface SceneTransitionProps {
type: "wipe" | "fade" | "scale" | "slide" | "morph";
direction?: "left" | "right" | "up" | "down";
duration?: number; // frames
}

8. ProgressBar
interface ProgressBarProps {
progress: number; // 0-1
color?: string;
height?: number;
springConfig?: SpringConfig;
}

9. LottieWrapper
interface LottieWrapperProps {
animationData: object;
startFrame: number;
loop?: boolean;
speed?: number;
}

Usa @remotion/lottie com controle determinístico de frame.


10. ThreeCanvasScene (opcional, para produtos 3D)
interface ThreeCanvasSceneProps {
children: [Link]; // elementos R3F
cameraPosition?: [number, number, number];
durationInFrames: number;
}

Obrigatório: <Sequence layout="none"> dentro de <ThreeCanvas>.


Obrigatório: [Link]('angle') no root.
Pipeline de Áudio e Narração
Fase 1 — Pré-voo ([Link] script agnóstico)
// [Link]
const response = await fetch(`[Link]
to-speech/${voiceId}`, {
method: "POST",
headers: { "xi-api-key": apiKey, "Content-Type":
"application/json" },
body: [Link]({
text,
voice_settings: {

Generated by [Link]
stability: 0.5, // evita sibilâncias exóticas
similarity_boost: 0.75 // clareza hiper-realista
}
}),
});
const buffer = await [Link]();
[Link](`public/voiceover/${compositionId}/$
{scene_id}.mp3`, [Link](buffer));

Fase 2 — Resolução de Metadados (Remotion)


// [Link] ou Composition
calculateMetadata: async ({ props }) => {
const src = staticFile(`voiceover/$
{[Link]}/scene_1.mp3`);
const duration = await getAudioDuration(src);
const durationInFrames = [Link](duration * fps);
return { durationInFrames, props: { ...props, audioSrc:
src } };
}

Sincronização com Transições


Se usar <TransitionSeries>, aplique audioDelay para compensar overlaps:
const audioDelay = -overlapFrames / fps;

Regras de Geração de Código para o ByMotion


Estrutura de Arquivo de Cena
// src/remotion/scenes/[Link]
import { spring, interpolate, useCurrentFrame, useVideoConfig,
Sequence } from "remotion";

export const ProductHero: [Link]<{


title: string;
subtitle: string;
imageUrl: string;
brandColor: string;
}> = ({ title, subtitle, imageUrl, brandColor }) => {
const frame = useCurrentFrame();
const { fps } = useVideoConfig();

// 1. Spring driver primário


const driver = spring({ frame, fps, config: { damping: 100,
stiffness: 200, mass: 1.2 } });

// 2. Interpolações com clamp


const opacity = interpolate(driver, [0, 1], [0, 1],
{ extrapolateRight: "clamp" });

Generated by [Link]
const y = interpolate(driver, [0, 1], [40, 0],
{ extrapolateRight: "clamp" });

return (
<div style={{ /* layout base */ }}>
{/* implementação */}
</div>
);
};

Proibições Absolutas
1. ❌ Nunca gerar easing CSS (ease-in-out, cubic-bezier) em
animações Remotion.
2. ❌ Nunca usar box-shadow única camada em elementos elevados.
3. ❌ Nunca omitir extrapolateRight: "clamp" em interpolate().
4. ❌ Nunca usar #000000 puro para texto ou fundos (use #1D1D1F).
5. ❌ Nunca gerar código com placeholders tipo // TODO: implementar
aqui ou comentários vagos.

6. ❌ Nunca assumir duração fixa sem ler


useVideoConfig().durationInFrames.

7. ❌ Nunca usar useFrame do [Link] diretamente — sempre usar


useCurrentFrame() via @remotion/three.

Padrão de Exportação para Watermark


O código gerado deve usar sempre:
export const RemotionRoot: [Link] = () => {
return (
<Composition
id="MainVideo"
component={MainSequence}
durationInFrames={...}
fps={30}
width={1920}
height={1080}
/>
);
};

Isso alinha com o injetor de watermark do ByMotion.

Generated by [Link]
Templates de Cena para ByMotion
Template A — Product Hero (0-5s)
• Fundo: gradiente sutil ou imagem do produto com blur
• Elementos: Logo (fade), Título (word-by-word), Subtítulo (slide up), CTA
(spring scale)
• Áudio: whoosh suave + voiceover

Template B — Feature Showcase (5-15s)


• Fundo: Cinza Atenas (#F5F5F7)
• Elementos: 3 cards em grid, cada um com ícone + título + descrição
• Animação: stagger de 8 frames entre cards, spring individual
• Áudio: tick minimalista por card + narração

Template C — Social Proof (15-20s)


• Fundo: branco ou dark mode
• Elementos: Quote em tipografia grande, avatar circular, nome/cargo
• Animação: máscara de revelação lateral, aspas animadas em scale
• Áudio: silence padding + voiceover

Template D — Pricing/CTA Final (20-25s)


• Fundo: Azul Científico (#0066CC) ou gradiente brand
• Elementos: Preço em kinetic type, botão com glassmorphism, checkmarks
• Animação: bounce sutil no preço, pulse no CTA
• Áudio: crescendo musical + call-to-action voiceover

Checklist de Qualidade antes de Entregar Código


• ☐ Todos os interpolate() têm extrapolateLeft: "clamp" e
extrapolateRight: "clamp"?

• ☐ Todas as animações de entrada usam spring() ao invés de easing


linear?
• ☐ Sombras estão estratificadas em 3+ camadas com atenuação de alfa?

Generated by [Link]
• ☐ Cores seguem a paleta institucional (nada de #000 ou cores exóticas
sem justificativa)?
• ☐ Motion blur está aplicado em movimentos rápidos (< 18 frames)?
• ☐ Áudio usa pipeline bifásico (pré-voo + calculateMetadata)?
• ☐ Componente exporta RemotionRoot para compatibilidade com
watermark?
• ☐ Não há dependências órfãs, imports não utilizados ou código
incompleto?
• ☐ Duração é calculada dinamicamente, nunca hardcoded?

Generated by [Link]

Você também pode gostar