Motion · Chuyển cảnh

Chớp trắng: logo giản lược

Chữ hiệu gradient lỏng nhiều màu đứng yên chảy sáng, màn hình chớp trắng cháy sáng một nhịp, chữ hiệu phiên bản phẳng trên nền trắng mờ vào định hình — một lần chớp trắng hoàn tất bước giản lược chất liệu.

1920×108016:930 fps4.1s · 123 frameremotionGiấy phép: Apache-2.0#shotcraft#remotion#transition

Nguồn: video-shotcraft (Vincent Wei) ↗ · Apache-2.0 · Composition Remotion (React/TSX) — có video preview, không có player trong trình duyệt

Khi nào dùng

Nhịp kết đoạn thương hiệu (trình diễn hoa mỹ → định hình sạch sẽ); nhịp chuyển cảnh chuyển từ tâm trạng phô diễn sang tuyên bố chính thức

Ý đồ

Trước tiên cho đủ độ hoa mỹ (gradient lỏng sáu màu chảy trên mặt chữ, ánh sáng mềm quét qua), rồi dùng một lần chớp trắng "thanh lọc" nó thành chữ hiệu ba màu phẳng — khán giả đọc được "màn trình diễn đã kết thúc, đây mới là hình ảnh chính thức của nó". Giản lược là một phép tu từ: cắt từ chất liệu cảm tính sang nhận diện lý tính.

Thời lượng & năng lượng

  • Thời lượng: khoảng 3.6s (108f@30fps; đứng yên chảy sáng 0–1.2s · chớp trắng 1.2–1.5s · định hình phẳng 1.7–2.7s)
  • Năng lượng: Trung bình cao (một nhịp xung duy nhất, hai đầu đều tĩnh lặng)

Công thức cảnh quay (bản gốc tiếng Trung — timing, easing, bảng tham số, lỗi hay gặp)

意图

先给足华丽(六色液态渐变在字面上流动、柔光扫掠),再用一次白闪把它"净化"成扁平三色字标——观众读到的是"演出结束,这就是它的正式形象"。降维是修辞:从感性质感切到理性识别。

动效核心

  • 液态层:六色渐变 background-size:320%,backgroundPosition = t*100% 全程缓慢流动;一块 220×120 径向柔光(blur 6px + screen 混合)随 t 横移 ±30px 做高光扫掠
  • 冲白 t=0.34–0.42(inQuad 加速冲入)白层盖满;同窗口给液态层一个 sin(π) 脉冲:blur 0→5px + brightness 1→2.2——"过曝烧穿"的一帧
  • 白层冲入后保持不退,后半场全程白底
  • 扁平字标 t=0.48–0.74 淡入 + scale 0.96→1(outCubic),字色是三段线性渐变(GRAD_A/B/C 常量,可按项目替换)
  • 柔光层随冲白同步熄灭(1-flashK),不残留在白底上

参数表

| 参数 | 典型值 | 调节手感 | |------|--------|----------| | 冲白窗口 | 0.34–0.42(inQuad) | 换算 0.29s@3.6s——冲白必须"快进慢不退";用 outQuad 会显得白光是飘进来的 | | 过曝脉冲 | blur 5px + brightness ×2.2,sin 包络 | 砍掉脉冲则冲白像纯剪辑;>8px blur 液态字彻底糊掉反而看不出"是它在烧" | | 扁平入场 | 0.48–0.74,scale 0.96→1 | 与冲白间隔 0.06 的白屏静默是呼吸位;缩太短观众来不及"清屏" | | 液态流速 | backgroundPosition t*100% | 拉长 dur 时流速自动变慢,静置段够 1s 以上流动感才可读 | | 字标字号 | 液态 62px / 扁平 58px | 扁平版略小一号是"落定收束"暗示;同号会读作换皮不换人 | | 渐变常量 | GRAD_A/B/C(块顶定义) | 换成项目品牌三色即完成收编;液态层六色一般保留(它是"演出"不是品牌) |

已知坑

  • 白层是"冲入后保持",不是闪一下回黑——后半场底色即白色,若下一镜是暗场需另接转场,或复用本卡结尾白底直切
  • WORDMARK 常量是占位字标(5 字母),换长词需同步缩字号与 letter-spacing,两层(液态/扁平)都要改
  • 冲白配 SFX 是必选项(impact/whoosh-bright 类),无声的白闪读作素材丢帧
  • mix-blend-mode:screen 的柔光层在白底上不可见属预期,别在冲白后调它

参考实现

demos/transition/white-flash-logo-simplify-cut/ (WhiteFlashLogoSimplifyCut.tsx)

Mã nguồn tham chiếu (Remotion)

  • demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx — https://raw.githubusercontent.com/Vincentwei1021/video-shotcraft/main/demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx

Component import fixture chung từ demos/_fixtures và helper từ assets/lib của repo; xem SKILL.md trong repo để biết quy trình render.

Mọi thứ trên trang này đều có bản máy đọc. Đưa agent link JSON, hoặc thêm MCP server gimgs rồi bảo nó tìm motion template.

  1. Tải JSON — trong đó có công thức cảnh quay (timing, easing, bảng tham số, lỗi hay gặp) và toàn bộ source TSX.
  2. Clone repo video-shotcraft; component import fixture chung từ demos/_fixtures và helper từ assets/lib.
  3. Đăng ký component thành <Composition> trong project Remotion rồi render bằng `npx remotion render`, hoặc dựng lại công thức bằng engine của bạn.
curl -s https://gimgs.net/motion/white-flash-logo-simplify-cut.json
git clone https://github.com/Vincentwei1021/video-shotcraft
# component: demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx
npx remotion render <CompositionId> out.mp4
claude mcp add --transport http gimgs https://gimgs.net/mcp
# then: search_motion_templates / get_motion_template("white-flash-logo-simplify-cut")

Prompt

Use the video-shotcraft shot recipe "Chớp trắng: logo giản lược" (Remotion composition, Apache-2.0) published on gimgs.net.
Recipe JSON (prompt = timing/easing/parameter table/pitfalls, files = TSX source): https://gimgs.net/motion/white-flash-logo-simplify-cut.json
Raw TSX: https://gimgs.net/motion/white-flash-logo-simplify-cut/template.html
Repository: https://github.com/Vincentwei1021/video-shotcraft  (component: demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx; imports demos/_fixtures and assets/lib)
Spec: 1920x1080, 30 fps, 4.1s

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

3,511 chars · Apache-2.0Mở template gốc ↗
// ===== demos/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.tsx =====
// white-flash-logo-simplify-cut — White Flash Simplify 冲白降维切换
// (motion-lab 定稿转原生 Remotion)
// 彩色液态质感词标(占位字标)静置后画面 0.2s 冲白(冲白瞬间叠一帧轻微
// blur 做过曝感),紧接扁平渐变版字标从白底淡入 + scale 0.96→1 定格。
// 一次闪白完成"液态质感→扁平字标"的降维切换。
// 设计坐标 480×270(DesignStage 等比放大),参数表数值以此坐标系标定。
import React from 'react';
import { DesignStage, E, lerp, seg, useT } from '../../_fixtures/Motion';

export const WHITE_FLASH_LOGO_SIMPLIFY_CUT_DURATION = 108; // 3600ms @30fps

// 该效果依赖的文件级共享量(扁平字标渐变三色 + 占位词标)
const GRAD_A = '#7b3df0';
const GRAD_B = '#5a6cf5';
const GRAD_C = '#22c4e8';
const WORDMARK = 'BRAND';

export const WhiteFlashLogoSimplifyCut: React.FC = () => {
  const t = useT();
  // 液态层:静置期缓慢流动的渐变 + 高光微移
  const flow = t * 100;
  // 冲白瞬间给彩色层一帧过曝 blur
  const flashK = seg(t, 0.34, 0.42, E.inQuad);
  const blurPulse = Math.sin(seg(t, 0.34, 0.46) * Math.PI);
  // 扁平 logo:opacity 0→1 + scale 0.96→1,cubic ease-out
  const lk = seg(t, 0.48, 0.74, E.outCubic);
  return (
    <DesignStage bg="#08070c">
      <div style={{ position: 'absolute', inset: 0, background: '#08070c', overflow: 'hidden' }}>
        {/* 彩色液态词层 */}
        <div
          style={{
            position: 'absolute',
            inset: 0,
            display: 'flex',
            alignItems: 'center',
            justifyContent: 'center',
            font: `900 62px/1 -apple-system,'Helvetica Neue',sans-serif`,
            letterSpacing: 6,
            background: 'linear-gradient(105deg,#ff5fa2 0%,#ff9d4d 22%,#ffe45c 38%,#4de3c1 58%,#4d9bff 76%,#a05cff 100%)',
            backgroundSize: '320% 100%',
            WebkitBackgroundClip: 'text',
            backgroundClip: 'text',
            color: 'transparent',
            textShadow: 'none',
            backgroundPosition: `${flow}% 0`,
            filter: `blur(${blurPulse * 5}px) brightness(${1 + blurPulse * 1.2})`,
          }}
        >
          {WORDMARK}
        </div>
        {/* 液态高光扫层(贴在字上方的柔光条) */}
        <div
          style={{
            position: 'absolute',
            left: '50%',
            top: '50%',
            width: 220,
            height: 120,
            margin: '-60px 0 0 -110px',
            background: 'radial-gradient(closest-side,rgba(255,255,255,.28),transparent 70%)',
            filter: 'blur(6px)',
            mixBlendMode: 'screen',
            pointerEvents: 'none',
            transform: `translateX(${lerp(t, -30, 30)}px)`,
            opacity: 1 - flashK,
          }}
        />
        {/* 白色全屏层:easeIn 冲入后保持 */}
        <div style={{ position: 'absolute', inset: 0, background: '#fff', opacity: flashK }} />
        {/* 扁平渐变字标层(渐变色见顶部 GRAD_*) */}
        <div
          style={{
            position: 'absolute',
            inset: 0,
            display: 'flex',
            flexDirection: 'column',
            alignItems: 'center',
            justifyContent: 'center',
            opacity: lk,
            transform: `scale(${lerp(lk, 0.96, 1)})`,
          }}
        >
          <div
            style={{
              font: `800 58px/1 -apple-system,'Helvetica Neue',sans-serif`,
              letterSpacing: 8,
              background: `linear-gradient(92deg,${GRAD_A} 0%,${GRAD_B} 45%,${GRAD_C} 100%)`,
              WebkitBackgroundClip: 'text',
              backgroundClip: 'text',
              color: 'transparent',
            }}
          >
            {WORDMARK}
          </div>
        </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/transition/white-flash-logo-simplify-cut/WhiteFlashLogoSimplifyCut.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
—

Cùng danh mục