Motion · Luz & ênfase
Aurora Bloom Background Flip
A light-gray backdrop lifts a purple-orange soft-focus blob from below, then the whole background darkens to near-black in ~0.36s as the blob compresses into an afterglow; copy blur-swaps in the gap.
Fonte: video-shotcraft (Vincent Wei) ↗ · Apache-2.0 · Composição Remotion (React/TSX) — vídeo de prévia, sem player no navegador
When to use
A narrative turning point ("for years… → everything changed"); the beat where a brand film pivots from setup to emphasis; a scene change between light and dark palettes.
Intention
Treat the "background inversion" as a punctuation mark: let the aurora rise slowly for the first 62% while viewers settle into the light background, then crush the whole frame to near-black in under 0.4s — this reads more like "turning a page" than any zoom or flash-white could. The copy change must land right after the inversion, with a gap in between, so viewers absorb the visual change before reading the new line.
Duration & energy
- Duration: About 5.2s (156f@30fps).
- Energy: Low to high (the first two-thirds is a slow build; the darkening instant is the film's emphasis beat).
Shot recipe (original Chinese — timing, easing, parameter table, known pitfalls)
意图
把"底色反转"当成重音符号用:前 62% 让极光慢慢升起、观众适应浅底, 然后用不到 0.4s 把整个画面压到近黑——这一下比任何缩放/闪白都更像 "翻页"。文案的换句必须卡在反转之后,且中间留空档,让观众先接住画面 变化再读新句。
动效核心
- 三层
blur(60px)blob 从画框底部升起:主紫rgba(107,79,224,.85)
90%×85%、橙核 rgba(217,122,74,.9)、白色融边 rgba(255,255,255,.8)
- 升起
seg(0.04→0.62, outCubic):translateY 32%→−6%+scale 1→1.25 - 反转
flip = seg(0.63→0.70, inOutQuad)(归一化 0.07 ≈ 0.36s):
底色 mix([236,236,236] → [10,10,18]),blob opacity 1→0.4 压成余晖, 白色融边层 1−flip 直接收掉
- 橙核独立
translateX ±8%(2.2 周期/全片)横向慢漂,让 blob 内部
有相对运动而不是整块升降
- A 句逐词
blur 0→8px+ 淡出(stagger 0.04、各 0.10、inQuad);
B 句逐词 outQuint blur-in(stagger 0.06、各 0.11),落位后 0.16 内 由 DEEPP 紫收色到白
参数表
| 参数 | 典型值 | 调节手感 | |------|--------|----------| | blob 模糊/尺寸 | blur(60px),主层 90%×85%,容器 inset −10% | 模糊小于 40px 就看得出是圆,成了"色球"不是"光" | | 升起 | translateY 32%→−6% + scale 1→1.25,t 0.04→0.62 outCubic | 占掉 60% 时长是故意的:酝酿越长,反转越有分量 | | 反转时长 | t 0.63→0.70 inOutQuad ≈ 0.36s | 命门:拉到 1s 就不是重音而是渐变过场 | | 底色 | #ececec → #0a0a12(不是纯黑) | 纯黑会让余晖 blob 边缘出现色阶断层 | | blob 压暗 | opacity 1→0.4,白色融边层同步归零 | 不压暗 blob,暗场里紫橙会过曝糊成一团 | | 橙核漂移 | translateX ±8%,2.2 周期/全片 | 幅度到 15% 就看得出是"一个球在动" | | A 句 blur-out | 逐词 stagger 0.04、各 0.10、inQuad、blur→8px | inQuad 让消失是加速的,读作"被光吞掉" | | B 句 blur-in | 逐词 stagger 0.06、各 0.11 outQuint + 0.16 内紫→白 | 收色比入场晚一点,落定瞬间才转白,是"定稿"的信号 | | 换句空档 | A 收完 t≈0.64 → B 起 0.76(≈0.6s 无字) | cross-fade 会把两句糊在一起,空档才读出"翻篇" |
已知坑
- 白色融边层(blobC)只在浅底成立,反转时必须
1−flip收掉,
否则暗场里留一团灰雾
- DEEPP/PURPLE 是这个效果的本体光色,不是品牌色槽位;要换成项目色
必须 blob 三层 + B 句文字色整组一起换,只换文字色会和背景脱节
- 文案是中性占位("For many years" / "everything changed"),逐词
stagger 的节奏依赖词数与字长,换句要回调 0.04/0.06 两个间隔
- 底色用 JS 逐帧写
background(mix()出实色),不要用 CSS transition,
否则 seek 到任意帧时颜色不确定
参考实现
demos/effects/aurora-bloom-bg-flip/ (AuroraBloomBgFlip.tsx)
Reference implementation (Remotion)
- demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx — https://raw.githubusercontent.com/Vincentwei1021/video-shotcraft/main/demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx
The component imports shared fixtures from demos/_fixtures and helpers from assets/lib in the repo; SKILL.md there documents the render workflow.
Tudo nesta página também é legível por máquina. Aponte seu agente para o JSON ou adicione o servidor MCP do gimgs e peça para buscar templates de motion.
- Baixe o JSON — contém a receita do plano (timing, easing, tabela de parâmetros, armadilhas) e o código TSX completo.
- Clone o repositório video-shotcraft; o componente importa fixtures de demos/_fixtures e helpers de assets/lib.
- Registre o componente como <Composition> em um projeto Remotion e renderize com `npx remotion render`, ou reimplemente a receita no seu próprio engine.
curl -s https://gimgs.net/motion/aurora-bloom-bg-flip.jsongit clone https://github.com/Vincentwei1021/video-shotcraft
# component: demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx
npx remotion render <CompositionId> out.mp4claude mcp add --transport http gimgs https://gimgs.net/mcp
# then: search_motion_templates / get_motion_template("aurora-bloom-bg-flip")Prompt
Use the video-shotcraft shot recipe "Aurora Bloom Background Flip" (Remotion composition, Apache-2.0) published on gimgs.net. Recipe JSON (prompt = timing/easing/parameter table/pitfalls, files = TSX source): https://gimgs.net/motion/aurora-bloom-bg-flip.json Raw TSX: https://gimgs.net/motion/aurora-bloom-bg-flip/template.html Repository: https://github.com/Vincentwei1021/video-shotcraft (component: demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx; imports demos/_fixtures and assets/lib) Spec: 1920x1080, 30 fps, 5.7s 1. Read the JSON and follow its "prompt" section (when to use, intention, parameter table, known pitfalls). 2. Adapt it for: <describe what you want>. 3. Either clone the repo, register the component as a <Composition> in a Remotion project and run npx remotion render <CompositionId> out.mp4 — or re-implement the recipe in your own engine (HTML/WAAPI works: keep the same timing and easing).
// ===== demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx =====
// aurora-bloom-bg-flip — Aurora Bloom 极光升腾底色反转(motion-lab 定稿转原生 Remotion)
// 浅灰底从底部升起紫橙柔焦 blob,随后整个底色 0.35s 内压暗到近黑、blob 压成余晖;
// 文案同步 blur-out → 换句 blur-in(强调色→白收色),换句间留空档不 cross-fade。
// 文案为中性占位;blob/文字的紫橙是这个效果本体的光色(DEEPP 常量),落地时可整组换成项目色。
// 设计坐标 480×270(DesignStage 等比放大),参数表数值以此坐标系标定。
import React from 'react';
import { DesignStage, E, lerp, seg, useT } from '../../_fixtures/Motion';
export const AURORA_BLOOM_BG_FLIP_DURATION = 156; // 5200ms @30fps
// RGB 三元组插值 → CSS 颜色(effect.js 文件级共享 mix,此处内联)
const mix = (a: number[], b: number[], k: number) =>
`rgb(${Math.round(a[0] + (b[0] - a[0]) * k)},${Math.round(a[1] + (b[1] - a[1]) * k)},${Math.round(a[2] + (b[2] - a[2]) * k)})`;
const DEEPP = [124, 92, 255]; // 效果本体光色(深紫)
const WHITE = [245, 245, 250];
const LIGHT = [236, 236, 236]; // 亮场底色
const DARK = [10, 10, 18]; // 暗场底色
// 占位文案(词数/字长贴近原片,逐词错相节奏依赖这个)
const WA = 'For many years'.split(' ');
const WB = 'everything changed'.split(' ');
const FONT = '600 26px -apple-system,system-ui,sans-serif';
export const AuroraBloomBgFlip: React.FC = () => {
const t = useT();
// blob 升起 + 放大
const rise = seg(t, 0.04, 0.62, E.outCubic);
const flip = seg(t, 0.63, 0.7, E.inOutQuad); // 快速压暗,故意只 ~0.35s
return (
<DesignStage bg={mix(LIGHT, DARK, flip)}>
{/* 柔焦 blob 组:整体 translateY 升起 + scale 放大,flip 后压成余晖 */}
<div
style={{
position: 'absolute',
inset: '-10%',
transform: `translateY(${lerp(rise, 32, -6)}%) scale(${lerp(rise, 1, 1.25)})`,
opacity: lerp(flip, 1, 0.4),
}}
>
{/* 紫色主 blob */}
<div
style={{
position: 'absolute',
borderRadius: '50%',
filter: 'blur(60px)',
left: '8%',
bottom: '-45%',
width: '90%',
height: '85%',
background: 'radial-gradient(circle,rgba(107,79,224,.85) 0%,rgba(107,79,224,0) 68%)',
}}
/>
{/* 橙色核心:横向慢漂 */}
<div
style={{
position: 'absolute',
borderRadius: '50%',
filter: 'blur(60px)',
left: '32%',
bottom: '-32%',
width: '44%',
height: '46%',
background: 'radial-gradient(circle,rgba(217,122,74,.9) 0%,rgba(217,122,74,0) 66%)',
transform: `translateX(${Math.sin(t * Math.PI * 2.2) * 8}%)`,
}}
/>
{/* 白色融边:暗场里收掉 */}
<div
style={{
position: 'absolute',
borderRadius: '50%',
filter: 'blur(60px)',
left: '-12%',
bottom: '-40%',
width: '64%',
height: '60%',
background: 'radial-gradient(circle,rgba(255,255,255,.8) 0%,rgba(255,255,255,0) 62%)',
opacity: 1 - flip,
}}
/>
</div>
{/* 文案行:flex 居中,两句各自绝对定位(同点居中,互不占位) */}
<div
style={{
position: 'absolute',
inset: 0,
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
font: FONT,
}}
>
{/* 文案 A:blob 上升期逐词 blur-out */}
<div style={{ position: 'absolute' }}>
{WA.map((w, i) => {
const out = seg(t, 0.46 + i * 0.04, 0.56 + i * 0.04, E.inQuad);
return (
<span
key={i}
style={{
display: 'inline-block',
margin: '0 .18em',
color: '#1a1a1a',
opacity: 1 - out,
filter: `blur(${out * 8}px)`,
}}
>
{w}
</span>
);
})}
</div>
{/* 空档后文案 B:逐词 blur-in + 紫→白收色 */}
<div style={{ position: 'absolute' }}>
{WB.map((w, i) => {
const d0 = 0.76 + i * 0.06;
const a = seg(t, d0, d0 + 0.11, E.outQuint);
const c = seg(t, d0 + 0.1, d0 + 0.26, E.outQuad);
return (
<span
key={i}
style={{
display: 'inline-block',
margin: '0 .18em',
opacity: a,
filter: `blur(${(1 - a) * 8}px)`,
color: mix(DEEPP, WHITE, c),
}}
>
{w}
</span>
);
})}
</div>
</div>
</DesignStage>
);
};
- Read the recipePrompt = when to use, intention, parameter table with typical values and how each one feels, known pitfalls. Treat values as calibrated starting points.
- Get the codetool: git
git clone https://github.com/Vincentwei1021/video-shotcraft && cd video-shotcraft && npm install - Register + rendertool: remotion
npx remotion render <CompositionId> out.mp4 # component: demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx - Or re-implementPort the timing/easing from the recipe to HTML + WAAPI (gimgs motion contract) or any engine; keep the same segment windows and easing.
| param | type | default | description |
|---|---|---|---|
| — | |||
Mais nesta categoria

Dark-stage spotlight reveals
Three dark-stage spotlight reveals — A wake-sleep sweep (light in = bright, light out = dark), B edge-hugging glow pan (violet light seeps along UI edges + steady rightward sweep), C corner reveal (radial light expands steadily from a corner to light the whole screen); light itself narrates in the dark.

Slam entrance moves
Three high-energy slam entrances: a whip-in perspective stop, a heavy KPI drop, and a shockwave that hits neighboring cards.

Scanline assemble fly-in
A scan line sweeps down an empty grid, flying each region's component in from off-screen — finishing as the scan ends.

Scanline annotate focus
A bright scan line sweeps down the page, framing each element it passes and labeling it with monospace annotations.