Hypernatural

TechniqueBy HypernaturalVersion 2, Oct 29, 2026

nano-banana-derive-last-frame

Make the pinned last frame of a shot by editing the locked first frame with nano banana Pro, as text edits only, so face, hair, props and grain stay continuous by construction; then crop it to the source's push-in with python-match-push-in. Use before a first-and-last-frame render (Seedance, Kling, H3 Max) whenever the shot must end on an exact state.

SKILL.md

Derive the last frame from the locked first

You give it the locked first frame, a character sheet per person in it, and the end state as a numbered list of changes; you get four takes of the same frame a few seconds later. Because it is an edit of the first frame, the two match (face, hair, cuffs, props, grain) without a second swap, and a video pinned to both doesn't morph between them. Use it for every shot that pins a last frame. Then crop it with python-match-push-in before anything else.

Inputs

  • The locked first frame (the approved pick, 1080p).
  • One character sheet per person in the frame, with who it is ("the woman at the desk (dark curly hair, green cardigan)", "the bald man in the shirt and tie").
  • The end state as single changes, one per line.
  • What must not change (keep): "the woman's face, hair and cardigan; the manager's tie and glasses; the desk, monitors and windows".
  • How much later, in seconds (the shot's length).

Never give the source's own last frame as a composition reference: Pro puts the source's actor and props back in. Text edits only.

Run it

Call describe on the model before its first run in a job. Four takes, one call each, seeds 7700 to 7703:

run(model="fal/fal-ai/nano-banana-pro/edit",
    input={"prompt": <the later-frame prompt>,
           "image_urls": ["<job>/stills/shot09_first_p.png", "<job>/references/sheet_b.jpg",
                          "<job>/references/manager_sheet.jpg"],
           "aspect_ratio": "16:9", "resolution": "2K", "num_images": 1, "seed": 7700,
           "output_format": "png", "safety_tolerance": "5"},
    into="<job>/stills/lastframe", unit="shot09_last")

Keep the 2K outputs: python-match-push-in crops from the 2K render.

Prompt

Image 1 is the first frame of a shot from a live-action commercial. Image 2 is a character sheet of {who 1}. Image 3 is a character sheet of {who 2}.

Produce the LAST frame of this shot: image 1 about {seconds} seconds later. Change exactly these things:
1. {edit}
2. {edit}

Keep everything else exactly as in image 1: {keep}; the room, light, color grade, sharpness and fine film grain. Do not soften, blur or smooth anything; keep the film grain over the whole frame. Photorealistic, like a real frame from the same shoot.

Edits are end states, concrete and one per line: "The copier at the back left has its lid closed." "Papers lie scattered across the desk and the floor in front of it." "Her eyes are open, looking down at the tumbler in her hands."

Then, in order

  1. Push-in. Pro keeps the framing whatever the prompt says ("the camera has pushed in 10%" is ignored), and a pinned pair with no zoom loses the source's camera move. Crop the 2K render with python-match-push-in (about 6% on a slow push-in).
  2. Print. Fix any logo on the cropped last frame with nano-banana-rerender-small-print, matched to the first frame's at the same scale.
  3. Gate. Flip first and last on a review page before animating: hair, cuffs, props and eyes continuous, the end state right, grain the same. A small mismatch is a nano-banana-targeted-fix with a crop of the first frame as the reference.

Drawn shots

For a cartoon, replace "live-action commercial" and the grain and photorealism lines with the look's medium and finish lines (guide-design-a-set, Drawn sets). One step works well (sit down, pass the ball, land a jump). Several positions along a path: derive each one straight from the first frame, saying where every prop stands and "exactly ONE " (3 of 6 clean). Chaining them (frame 2 from frame 1, frame 3 from frame 2) stacked a new copy of the character at each step (two, then three) and swapped props. One edit recoloured the lettering on a shirt: check lettering on every derived frame.

Check it

Grain over the whole frame at 100% against the first frame: the prompt asks for it, and a smoothed last frame shows as a softening across the clip. Every listed change present, nothing unlisted changed.

The whole lock-first, derive-last, flip, animate sequence: guide-keep-small-details.

Go make something cool.

Install the app, open your agent, describe the video. That's the whole onboarding.

Sticker HypernaturalSticker BannerSticker TVBoy