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.

1920×108016:930 fps5.7s · 171 quadrosremotionLicença: Apache-2.0#shotcraft#remotion#effects

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.

  1. Baixe o JSON — contém a receita do plano (timing, easing, tabela de parâmetros, armadilhas) e o código TSX completo.
  2. Clone o repositório video-shotcraft; o componente importa fixtures de demos/_fixtures e helpers de assets/lib.
  3. 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.json
git clone https://github.com/Vincentwei1021/video-shotcraft
# component: demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx
npx remotion render <CompositionId> out.mp4
claude 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).

JSON · Markdown · llms.txt

4,530 chars · Apache-2.0Abrir template bruto ↗
// ===== 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>
  );
};


  1. Read the recipe
    Prompt = when to use, intention, parameter table with typical values and how each one feels, known pitfalls. Treat values as calibrated starting points.
  2. Get the code
    tool: git
    git clone https://github.com/Vincentwei1021/video-shotcraft && cd video-shotcraft && npm install
  3. Register + render
    tool: remotion
    npx remotion render <CompositionId> out.mp4 # component: demos/effects/aurora-bloom-bg-flip/AuroraBloomBgFlip.tsx
  4. Or re-implement
    Port the timing/easing from the recipe to HTML + WAAPI (gimgs motion contract) or any engine; keep the same segment windows and easing.
paramtypedefaultdescription
—

Mais nesta categoria