← JuicyLucy AdsCONTENT HISTORY

Update to JuicyLucy Ads

Snapshot Sep 30, 2026 · 23:16 UTC · version 0.22.1

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "description": "The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]",
  "included_files": [
    {
      "relative_path": "examples/gsap-implementation.md",
      "size_in_bytes": 10070
    }
  ],
  "name": "cut-the-curve",
  "skill_md_contents": "---\nname: cut-the-curve\ndescription: \"The technique catalog: five velocity-matched SEAMS (zoom-through, INVERSE zoom-through, cut-the-curve, waterfall cut, rack-focus blur-cut) plus the two in-scene techniques — waterfall ENTRY (staggered arrival cascades for title cards / segment openers) and the nudge curve (slow-fast-slow three-phase group slides). Covers partial-travel (~12% of frame) velocity matching via mirrored power4 eases, the Z scale-sign rule, size-scaled blur (10px text / 18-20px full-frame), word-by-word staggered cuts, cascade pacing by element weight, and the 10/65/25 slide ratio. Read before authoring any transition, text-beat handoff, kinetic text entry, or group reposition. [depth, zoom, inverse-zoom, scale-sign, mirrored-zoom, rack-focus, pacing, velocity, cut-the-curve, waterfall, stagger, cascade, kinetic-text, title-card, segment-opener, nudge, slide, easing, group-motion, z-depth, motion-graphics, cinematic, transition, blur, directional-continuity]\"\n---\n\n> Modified by Juicy Lucy AI, UAB for JuicyLucy Ads: CLI invocation, the review-approval reference and/or frontmatter (description layout, upstream-only metadata) adjusted at build time. See the plugin root NOTICE for details.\n\n\n# Cut the Curve — the technique catalog\n\nFive SEAM techniques, one principle: **cut at peak velocity, match direction and speed\non both sides of the cut** — plus the two in-scene techniques (§6 arrivals, §7 slides).\nThe seam LAW — vector law, the current, the ledger, the Seam Gate — lives in\n`motion-doctrine`; read it first. This skill is the parameters and mechanics.\nAll GSAP code templates (worker + registry): `examples/gsap-implementation.md`.\n\n## Catalog\n\n| #   | Technique                  | Scope                          | Axis                | Use for                                                |\n| --- | -------------------------- | ------------------------------ | ------------------- | ------------------------------------------------------ |\n| 1   | **Zoom-Through** (forward) | Within-scene text swap         | Z, toward viewer    | progressing deeper into the same thought               |\n| 2   | **Inverse Zoom-Through**   | Arrival / payoff beat          | Z, away from viewer | something bigger lands                                 |\n| 3   | **Cut the Curve**          | Between scenes                 | X / Y               | the default boundary, the film's current               |\n| 4   | **Waterfall Cut**          | Text-to-text seam              | X, per-word         | word-level handoff between big-text beats              |\n| 5   | **Rack-Focus Blur-Cut**    | Same-surface state swap        | X / Y / Z           | the one cut you want SEEN — a DSLR focus-pull flourish |\n| 6   | **Waterfall Entry**        | In-scene ARRIVAL (no seam)     | Y, from below       | title cards, segment openers, list intros              |\n| 7   | **Nudge Curve**            | In-scene group slide (no seam) | X / Y               | repositioning a composed group to make room            |\n\n## Z direction is a sign\n\n\"Same axis\" is not enough on Z — the sign of d(scale)/dt must match across the cut:\n\n| Z vector       | Exit scale          | Entry scale          | Variant              |\n| -------------- | ------------------- | -------------------- | -------------------- |\n| Push (forward) | growing `1 → 1.2`   | growing `0.75 → 1`   | zoom-through         |\n| Pull (back)    | shrinking `1 → 0.8` | shrinking `1.25 → 1` | inverse zoom-through |\n\nBanned mirrors: a receding exit answered by a grow-from-small entry (pull flips to push —\nthe common one, since grow-from-small is the default element entrance), and a push exit\nanswered by an oversized retraction. This binds the incoming scene's OWN entrances during\nthe seam window (cut + ~0.5s), not just the wrapper tween: hold the incoming frame\ncomposed, or author its entrance to match the sign. Verify per Seam Gate rule 7.\n\n## Blur logic (all Z variants)\n\n| Subject                                       | Peak blur   | Why                                                            |\n| --------------------------------------------- | ----------- | -------------------------------------------------------------- |\n| Text-scale (headline, word group)             | **10px**    | 20px smears letterforms — the cut reads as a glitch, not speed |\n| Full-frame surface (window, card, screenshot) | **18–20px** | lighter blur on a big surface reads as a rendering hiccup      |\n\nSame peak blur on both sides at the swap frame. Blur the WRAPPER, never children.\n\n---\n\n## 1. Zoom-Through (forward)\n\nZ-axis velocity-matched cut; **never both texts visible.** Everything GROWS: the outgoing\ntext accelerates toward camera, a hard swap hides at peak blur, the incoming text keeps\ngrowing into the focal plane. Headlines and short phrases only. Total ≈ 0.4s.\n\n| Phase          | Scale    | Blur     | Opacity           | Ease                                       | Duration |\n| -------------- | -------- | -------- | ----------------- | ------------------------------------------ | -------- |\n| Exit           | 1 → 1.2  | 0 → 10px | 1 → 0.15          | power3.in (opacity: separate `none` tween) | 0.2s     |\n| Cut (`tl.set`) | in: 0.75 | 10px     | out: 0 / in: 0.15 | —                                          | —        |\n| Entry          | 0.75 → 1 | 10 → 0px | 0.15 → 1          | expo.out                                   | 0.5s     |\n\nExit opacity MUST be its own linear tween — `power3.in` holds opacity near 1 too long.\nOn entry all properties share `expo.out`.\n\n## 2. Inverse Zoom-Through (backward)\n\nThe pull-back mirror: the outgoing element RECEDES; the incoming arrives OVERSIZED (as if\njust behind camera) and retracts into the focal plane. Everything SHRINKS. Spend on\nARRIVAL/payoff beats — a payoff line, a giant reply, a held end-state — never ordinary\nboundaries. Total ≈ 0.7s (30% exit / 70% entry).\n\n| Phase          | Scale    | Blur     | Opacity           | Ease                                       | Duration |\n| -------------- | -------- | -------- | ----------------- | ------------------------------------------ | -------- |\n| Exit           | 1 → 0.8  | 0 → 10px | 1 → 0.15          | power3.in (opacity: separate `none` tween) | ~0.2s    |\n| Cut (`tl.set`) | in: 1.25 | 10px     | out: 0 / in: 0.15 | —                                          | —        |\n| Entry          | 1.25 → 1 | 10 → 0px | 0.15 → 1          | expo.out                                   | ~0.5s    |\n\nBlur is 10px text-scale; 18–20px only when both sides are full-bleed surfaces.\n\n**Sign discipline:** the incoming scene arrives as a composed frame inside the retracting\nwrapper — no grow-from-small intro in the seam window. Staged entrances happen after the\nretraction settles, or start ≥1 and retract.\n\n## 3. Cut the Curve (default scene boundary)\n\nX/Y velocity-matched cut — the default for ALL scene-to-scene boundaries, in the film's\ncurrent, not an accent. The outgoing hero accelerates in one direction, the cut lands\nmid-motion, the incoming hero continues the SAME direction and decelerates. Total ≈ 0.6s;\ndirections LEFT / RIGHT / UP / DOWN (default LEFT).\n\n**Partial travel:** ~12% of frame (≈230px at 1920) — never full off-screen moves.\n\n| Direction | Exit          | Entry start → end |\n| --------- | ------------- | ----------------- |\n| Leftward  | `x: 0 → −230` | `x: +230 → 0`     |\n| Rightward | `x: 0 → +230` | `x: −230 → 0`     |\n| Upward    | `y: 0 → −230` | `y: +230 → 0`     |\n| Downward  | `y: 0 → +230` | `y: −230 → 0`     |\n\nMechanics:\n\n- **Mirrored eases:** exit `power4.in` + entry `power4.out`, same distance and duration —\n  the two halves of one `power4.inOut`, so velocity matches exactly at the cut.\n- **The fade trick:** exit opacity completes at ~25–30% of its travel (fade ≈ 0.18–0.3s\n  vs motion 0.3–0.34s); entry ignites at ~0.35 opacity mid-path. Time the last fading\n  element to die right at the cut — a gap where nothing moves reads as dead air.\n- Exit 0.2–0.4s; entry ≥ exit. Optional blur 8–10px.\n- **Stage ground:** `#root` must be opaque\n  (`background: var(--canvas-deep, var(--canvas, #000))`) — the mid-window cut opens a\n  summed-opacity < 1 window that flashes white otherwise (see `seam-craft`).\n\n`push-slide` exists but violates partial-travel and mid-motion phase; prefer cut-the-curve.\n\n## 4. Waterfall Cut (word-by-word cut-the-curve)\n\nCut-the-curve at WORD granularity — the strongest leftward cut for text-to-text seams.\nOutgoing words ramp out on their own curves; incoming words cascade in mid-flight — a\nwave the eye rides across the seam.\n\n**Scope:** worker-authored inside one multi-beat comp (stacked full-frame `.beat` layers),\nNOT a registry/injector type — it tweens word spans, not clip wrappers. The boundary into\nand out of the text-beat block still gets a normal registry transition. Does not count\nagainst the 2–3 transition budget.\n\n| Parameter           | Value                 | Why                                         |\n| ------------------- | --------------------- | ------------------------------------------- |\n| Travel              | ±230px (~12% frame)   | partial travel + velocity > full-frame push |\n| Exit                | 0.34s `power4.in`     | the acceleration IS the cut                 |\n| Exit fade           | 0.18s, starts with x  | word gone by ~25–30% of travel — no smear   |\n| Exit stagger        | +0.022s reading order | the line peels, not a block slide           |\n| Entry               | 0.3s `power4.out`     | back half of the composite — velocity match |\n| Entry start opacity | 0.35                  | mid-path ignition; binary 0→1 pops          |\n| Entry gaps          | 0.05s × 0.84 decay    | accelerating cascade, resolves composed     |\n\nRules:\n\n- One direction per chain, riding the current. Inverse zoom is the chain's ARRIVAL beat only.\n- Pre-set all words to `x: +230, opacity: 0` at build time — `immediateRender: false`\n  alone leaves un-started words visible at rest.\n- A short first beat may exit whole-line: its fade ends ~0.02s before the cut so it is\n  still streaking when the next words ignite — no dead gap.\n- Transform/opacity only (seek-safe); opaque stage ground applies.\n\n## 5. Rack-Focus Blur-Cut (the visible cut)\n\nThe one variant where the cut is SEEN: a defocus blur SPIKE hides a single-frame hard\nswap — a handheld-DSLR focus-pull. Use as an occasional flourish for a state swap of the\nSAME surface within one visual theme; never the default boundary.\n\nDifferences from the others: outgoing stays FULLY OPAQUE until the cut (the blur hides\nthe swap — no early fade); eases `power2.in` / `power2.out` (soft optics, not momentum).\n\nRules:\n\n- Fire only at a narrative beat, ≤ once per ~8s; never mid-caption or during a hold.\n- Cut at PEAK blur (≥6px; peak 8–12px, ≤16–18px max) — swapping on the way up shows the cut.\n- A subtle scale (~1.06 lens-breathing) sells it as optics.\n- Same direction on both sides — the vector law still holds. Entry ≥ exit duration.\n- Blur the wrapper; never blur + opacity in one tween on one element (headless\n  compositing bug); never blur a `<video>` directly (wrap it).\n\n---\n\n## 6. Waterfall Entry (in-scene arrival — not a seam)\n\nStaggered ARRIVAL cascade: words/elements whip in from below (one consistent direction),\neach starting before the previous settles — an accelerating wave that resolves into a\ncomposed layout. Title cards, segment openers, list/feature intros. The seam sibling is\n§4; do not mix their rules:\n\n|               | §6 Entry (arrival)                            | §4 Waterfall Cut (seam)                                   |\n| ------------- | --------------------------------------------- | --------------------------------------------------------- |\n| Opacity       | BINARY 0→1 via `tl.set` at entry — never fade | ignites at 0.35 mid-path — the fade IS the velocity trick |\n| Axis default  | Y, from below                                 | X, riding the current                                     |\n| Outgoing side | none                                          | words ramp out on mirrored power4.in                      |\n\nChoreography:\n\n- **Overlap, don't queue** — next element starts within ±2 frames of the previous\n  settling; gaps SHRINK across the cascade; the last element snaps.\n- **Velocity varies by weight** — heavy/anchor elements travel further and longer;\n  light words/punctuation snap in tight:\n\n| Parameter | Anchor/heavy | Normal word | Light/punctuation |\n| --------- | ------------ | ----------- | ----------------- |\n| Y offset  | 60–80px      | 40–50px     | 30–48px           |\n| Duration  | 0.16–0.20s   | 0.13–0.16s  | 0.10–0.13s        |\n| Overlap   | 0–2f gap     | 1f overlap  | 1–2f overlap      |\n\n- Ease `power4.out` (expo.out for extra snap); never `.inOut` on an entry.\n- One direction per cascade.\n- Split the FINAL word into fragments to extend the climax; fragments travel further.\n- Post-settle, the group usually slides to make room for the next beat — that's §7.\n\n## 7. Nudge Curve (in-scene group slide — not a seam)\n\nSlow-fast-slow repositioning of a composed group (word rows, card stacks, lists) to\nreveal content or make room. No single built-in ease produces it — `power4.inOut`\nsmacks to a stop. Chain three tweens on one property:\n\n| Phase     | Ease            | Distance | Time | Feel                                     |\n| --------- | --------------- | -------- | ---- | ---------------------------------------- |\n| 1 ramp-in | `power3.in`     | ~10%     | ~20% | barely moves — motion registers, no jolt |\n| 2 burst   | `none` (linear) | ~65%     | ~18% | ~2× average px/frame — purposeful        |\n| 3 tail    | `power4.out`    | ~25%     | ~62% | decaying creep to rest — kills the smack |\n\nRules:\n\n- The tail is ≥3× the ramp-in in TIME. If it still smacks: extend the tail's time (not\n  distance) or use `power5.out`.\n- Phase 2 stays linear — easing it loses the burst contrast.\n- Reveal new content DURING phase 2 — the burst masks its appearance.\n- Same ratios vertical; scale distances proportionally, keep the time ratios.\n\n---\n\n## Choosing a Variant\n\n|               | Zoom-Through                 | Inverse Zoom                 | Cut the Curve          | Waterfall Cut          |\n| ------------- | ---------------------------- | ---------------------------- | ---------------------- | ---------------------- |\n| Scope         | Within-scene text swap       | Arrival/payoff beat          | Between scenes         | Text-to-text seam      |\n| Z sign / axis | growing (push)               | shrinking (pull)             | X / Y                  | X, per-word            |\n| Travel/scale  | 1→1.2, then 0.75→1           | 1→0.8, then 1.25→1           | ±230px                 | ±230px                 |\n| Peak blur     | 10px text / 18–20 full-frame | 10px text / 18–20 full-frame | 8–10px optional        | none                   |\n| Eases         | power3.in / expo.out         | power3.in / expo.out         | power4.in / power4.out | power4.in / power4.out |\n| Feel          | progressing through          | arriving at                  | carried sideways       | a wave across the seam |\n\n## Anti-Patterns\n\n| Don't                                                                      | Instead                                                                           |\n| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |\n| Two texts visible during a zoom-through                                    | Hard cut at blur peak, one text at a time                                         |\n| 20px blur on text-scale subjects                                           | 10px text; 18–20px only full-frame                                                |\n| Inverse-zoom exit → grow-from-small entry (or push → oversized retraction) | Match the scale-velocity SIGN; verify at cut±0.1s                                 |\n| Incoming comp's own scale-up intro under a Z-seam wrapper tween            | Arrive composed; stage entrances after the seam settles or match the sign         |\n| Mismatched blur/opacity at the swap                                        | Identical values at the cut frame                                                 |\n| Gentle entry easing (`power2.out`)                                         | Mirror the exit: `power4.out` / `expo.out`                                        |\n| Full off-screen exits/entries                                              | Partial travel (~12%) + early fade                                                |\n| `.inOut` eases on either side of a cut                                     | Mirrored `power4.in` / `power4.out`                                               |\n| Lone element fading long before its cut                                    | Fade ends ~0.02s before the cut, or word-cascade                                  |\n| Equal gaps across a waterfall cascade                                      | Shrink gaps ×0.84 per word                                                        |\n| Zoom-through on body text                                                  | Headlines and short phrases only                                                  |\n| Scene cuts without cut-the-curve                                           | It is the default boundary                                                        |\n| Consecutive boundaries in opposing directions                              | One current; reserved vectors spent on meaning                                    |\n| Unpainted `#root` behind a mid-window cut                                  | Opaque stage ground                                                               |\n| Queued entries (each waits for the previous to settle)                     | Overlap ±1–2 frames — the cascade is a wave, not a queue                          |\n| Same offset/duration for every cascade element                             | Vary by weight: anchors travel further, punctuation snaps                         |\n| Gradual opacity fade on a §6 arrival                                       | Binary 0→1 via `tl.set` — fading fights the snap (seam cuts fade; arrivals don't) |\n| Single ease for a group slide (`power4.inOut`, `slow()`)                   | The §7 three-phase chain                                                          |\n| Nudge tail shorter than 3× the ramp-in                                     | Extend the tail's TIME, not its distance                                          |\n\n## Code\n\nAll GSAP templates — worker-authored versions, registry `gsap_template`s, the combined\ncut-the-curve + zoom, waterfall DOM/CSS/JS, rack-focus — live in\n`examples/gsap-implementation.md`.\n"
}

SHA-256 of public snapshot: 62ef7743b3b1f50dda1b4e207810d19d4535f2b66dd167bc8b9f3a2fa75839c6