Motion · Transição

Glitch-tear strip cut

A tearing transition — glitch-displace noise tear (16 horizontal strips jitter out of alignment, cut mid-jitter), a strip-level tear with digital-glitch meaning.

1920×108016:930 fps4.54s · 136 quadrosremotionLicença: Apache-2.0#shotcraft#remotion#transition#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 high-energy page change: digital-glitch/breakage meaning; a strip-level tear that keeps page integrity intact while pushing energy to the max

Intention

This card handles strip-level tearing: the page is sliced into horizontal strips moving at high speed, but each strip's content stays intact. This is a taste boundary drawn through repeated judging — the fragment family of transitions was rejected three times running (doom-melt vertical-strip drop, pixel-dissolve blocks flipping to black, facade-block brick flip-away, all eliminated), while the strip family passed. Fragments read as "the page being destroyed"; strips read as "the page in high-speed motion" — integrity intact, energy maxed out. The horizontal tear: strips jitter out of alignment left-right plus light/dark double-imaging, a grayscale downgrade of digital glitch (light/dark double-image instead of RGB split). Fits system-failure/instant-jump meanings.

Duration & energy

  • Duration: Pre-state ≥40f + tear 17–24f + tail ≥40f, ~4.5s (135–140f)
  • Energy: High

Shot recipe (original Chinese — timing, easing, parameter table, known pitfalls)

意图

本卡管条带级撕裂——页面被切成横条高速运动,但每条内容完整。 这是反复裁决划出的品味分界:碎块系转场三连否(doom-melt 竖条坠落、 pixel-dissolve 方块翻黑、facade-block 砖块翻飞全部淘汰),条带系过关。碎块读作"页面被破坏",条带读作"页面在高速 运动"——完整性不破、能量却拉满。横向撕:条带左右错位抖动 + 明暗重影,数字故障的灰阶降维(RGB split 改明暗双重影)。 适用系统故障/瞬间跳变语义。

单式选型

| 式 | 做法 | 适用 | |----|------|------| | A glitch-displace | 16 条水平条带(外层裁剪+内层整页 translateY 对位),每条 translateX 由库标 h(i*31+f*7) 驱动 ±70px 抖动,叠明暗错位重影;58f 抖动衰减中硬切 B 页再抖 4f 归位 | 故障/断裂语义;高潮前的暴力换页 |

参数表

| 参数 | 典型值 | 调节手感 | |------|--------|----------| | 抖幅 | ±70px(spec 加码档),底层垫完整页防露底缝 | 峰值帧条带错位必须肉眼明显——±12px 级读不出撕裂 | | 包络 | 45–48f out-cubic 冲起 → 平台 → 56–62f 线性消散 | 冲击判例:扩散 out-cubic、消散线性 | | 重影 | ±12px 明暗双重影(brightness 0.45 / invert) | RGB 分离的灰阶降维;无重影只是抖不是 glitch | | 摘罩 | 62f 起条带、重影、filter 全部条件卸载直出裸 B | opacity 0 不算摘;滤镜残留毁真静止 | | 收尾 | 73f 真静止(≥40f) | R1 |

已知坑

  • demo 在灰阶/占位素材上调校通过——参数是调校起点非实战定稿,

首次实战须以真实素材回验

  • 条带不碎块——后续同类手法一律做条带:横条各自完整,

绝不裂成方块/砖块/独立坠落物(三连否判例,见意图)

  • 高能转场,与 whip-pan/crash 系同片注意能量预算——

高能转场挤在一起互相稀释

  • 硬切藏在抖动衰减中(58f 切、62f 归位)——切点暴露在静止帧上

就失去了 glitch 的掩护

参考实现

demos/transition/tear-streak-transitions/ (GlitchDisplace.tsx)

Reference implementation (Remotion)

  • demos/transition/tear-streak-transitions/GlitchDisplace.tsx — https://raw.githubusercontent.com/Vincentwei1021/video-shotcraft/main/demos/transition/tear-streak-transitions/GlitchDisplace.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/tear-streak-transitions.json
git clone https://github.com/Vincentwei1021/video-shotcraft
# component: demos/transition/tear-streak-transitions/GlitchDisplace.tsx
npx remotion render <CompositionId> out.mp4
claude mcp add --transport http gimgs https://gimgs.net/mcp
# then: search_motion_templates / get_motion_template("tear-streak-transitions")

Prompt

Use the video-shotcraft shot recipe "Glitch-tear strip cut" (Remotion composition, Apache-2.0) published on gimgs.net.
Recipe JSON (prompt = timing/easing/parameter table/pitfalls, files = TSX source): https://gimgs.net/motion/tear-streak-transitions.json
Raw TSX: https://gimgs.net/motion/tear-streak-transitions/template.html
Repository: https://github.com/Vincentwei1021/video-shotcraft  (component: demos/transition/tear-streak-transitions/GlitchDisplace.tsx; imports demos/_fixtures and assets/lib)
Spec: 1920x1080, 30 fps, 4.54s

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,172 chars · Apache-2.0Abrir template bruto ↗
// ===== demos/transition/tear-streak-transitions/GlitchDisplace.tsx =====
// glitch-displace|噪声置换撕裂
// FakeDashboard A 播到 45f,45–62f 撕裂转场:页面切 16 条水平条带
// (外层 overflow hidden + 内层整页反向 translateY 对位),每条 translateX
// 由 h(条号*31+f*7) 驱动 ±70px 抖动,幅度包络 0→峰值→0(起势 out-cubic、
// 消散线性,冲击判例)。同时叠 2 份整页明暗错位重影(+12px 暗 / -12px 亮反相,
// opacity ≤0.35,灰阶版代替 RGB 分离)。58f 抖动衰减中硬切 variant="B",
// 再抖 4f 至 62f 归位。62f 起摘罩直出 B(条带/重影全部条件卸载),
// 62–135f 真静止 73f ≥ 40f。帧确定:h() 伪随机,无 Math.random。
import React from 'react';
import { AbsoluteFill, useCurrentFrame, interpolate, Easing } from 'remotion';
import { FakeDashboard, G } from '../../_fixtures/Fixtures';

const STRIPS = 16;
const H = 1080;
const STRIP_H = H / STRIPS; // 67.5
const AMP = 70; // 峰值条带错位(spec 备选加码值,QA 要一眼看到撕裂)

// 库内标准伪随机
const h = (n: number) => {
  const s = Math.sin(n * 127.3) * 43758.5453;
  return s - Math.floor(s);
};

export const GlitchDisplace: React.FC = () => {
  const frame = useCurrentFrame();

  const tearing = frame >= 45 && frame < 62;
  const variant: 'A' | 'B' = frame >= 58 ? 'B' : 'A';

  if (!tearing) {
    // 45f 前 A 静置;62f 起 B 摘罩真静止(无 transform / filter / 重影)
    return (
      <AbsoluteFill style={{ background: G.bg }}>
        <FakeDashboard variant={variant} />
      </AbsoluteFill>
    );
  }

  // 幅度包络:45–48f out-cubic 冲起 → 平台 → 56–62f 线性消散(帧驱动,确定性)
  const rise = interpolate(frame, [45, 48], [0, 1], {
    easing: Easing.out(Easing.cubic),
    extrapolateLeft: 'clamp',
    extrapolateRight: 'clamp',
  });
  const decay = interpolate(frame, [56, 62], [1, 0], {
    extrapolateLeft: 'clamp',
    extrapolateRight: 'clamp',
  });
  const env = Math.min(rise, decay);

  return (
    <AbsoluteFill style={{ background: G.bg, overflow: 'hidden' }}>
      {/* 底垫一份完整页,防条带间横移露底色缝 */}
      <AbsoluteFill>
        <FakeDashboard variant={variant} />
      </AbsoluteFill>

      {/* 明暗错位重影(灰阶版 RGB 分离):+12px 压暗 / -12px 反相提亮 */}
      <AbsoluteFill
        style={{
          transform: 'translateX(12px)',
          opacity: 0.35 * env,
          filter: 'brightness(0.45)',
        }}
      >
        <FakeDashboard variant={variant} />
      </AbsoluteFill>
      <AbsoluteFill
        style={{
          transform: 'translateX(-12px)',
          opacity: 0.28 * env,
          filter: 'invert(1)',
        }}
      >
        <FakeDashboard variant={variant} />
      </AbsoluteFill>

      {/* 16 条水平条带:外层裁切,内层整页反向 translateY 对位 + 逐帧横向抖动 */}
      {Array.from({ length: STRIPS }).map((_, i) => {
        const dx = (h(i * 31 + frame * 7) * 2 - 1) * AMP * env;
        return (
          <div
            key={i}
            style={{
              position: 'absolute',
              top: i * STRIP_H,
              left: 0,
              width: 1920,
              height: STRIP_H,
              overflow: 'hidden',
            }}
          >
            <div
              style={{
                width: 1920,
                height: H,
                transform: `translate(${dx.toFixed(2)}px, ${-i * STRIP_H}px)`,
              }}
            >
              <FakeDashboard variant={variant} />
            </div>
          </div>
        );
      })}
    </AbsoluteFill>
  );
};


  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/tear-streak-transitions/GlitchDisplace.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