PTENES
Photo → miniature → practical effect

Your city becomes miniature — and the effect destroys it in front of the camera

A photo goes in; an ultra-realistic behind-the-scenes video comes out: the subject in the photo rebuilt as a miniature inside a studio rig, with a blue screen and crew in frame, and a wave (or fire, earthquake, explosion, snow) destroying everything in a single shot. Two recipes measured across ~15 real clips.

A city miniature inside a studio wave tank
What it is

The effect’s making of, not the effect

The viewer doesn’t see a disaster movie: they see the crew filming the destruction of a miniature set. That’s what makes the video look real.

🏗️ Model faithful to your photo

The reference controls the architecture, facades, colors, and proportions — building by building. No invented landmarks.

🌊 Effect with real physics

The water is real mass at real scale; only the buildings are miniatures. Debris has weight, friction, and collision — it doesn’t float without gravity.

🎬 Single behind-the-scenes shot

A continuous iPhone shot from 10-15 m away, with the tank, barrier, cranes, pumps, and dry crew in frame the whole time.

Result

15 seconds, the same photo, two recipes

Reference: an aerial photo of the Porto Alegre waterfront. Output: the same waterfront as a miniature being swept by a practical wave effect. Kling v3.0, native audio in both.

Recipe B — a single continuous shot, with no cuts, faithful to the AVCC guide. The wave comes from the open-water side and moves laterally across.
v2 variant — multi-shot with the studio reveal and fast-moving water. Better water weight, but it uses cuts, which the guide prohibits.
Hybrid — starts in the real city and only later reveals that it's a studio model. This happened by accident: Kling anchors the first frame to the provided image, so starting from the raw photo creates this arc on its own.
How it works

Two stages — and the order is the secret

The video generator needs to receive the miniature already assembled as the first frame. With the raw photo, it understands “transform this photo”: the real city dissolves into cubes and the wave never appears.

reference photo→ keyframe A (miniature in the rig)→ 15s video→ MP4

🎥 Kling v3.0

Image-to-video from one frame + text. Better water physics, continuous shot, and audio in the same pass. Runs on a Pro/SVIP subscription (plan credits).

🖼️ Agnes US$ 0

It only has mode: keyframes (2 to 3 images) — this is not image-to-video. It’s for generating keyframe A faithfully and iterating on the composition for free before spending credits.

Prerequisites

What needs to be in place

Two credentials and ffmpeg. This project installs nothing.

Agnes key

Generates keyframe A and free videos.

# AGNES_API_KEY in:
~/projetos/agnes-nei/.env

Kling CLI

Logged in with a Pro/SVIP subscription.

kling who_am_i  # confirm the account

ffmpeg

To measure and check the output — the size the API lies.

ffprobe -v error -show_entries \
  format=duration filme.mp4
User guide · step by step

From photo to MP4 in two commands

The real work is in step 2: writing the --lock looking at the photo.

1

Choose the reference photo

Any photo of the subject: city, waterfront, building, product. It defines the miniature’s layout — and the video’s aspect ratio comes from the keyframe’s, so choose 16:9 or 9:16 here.

cd ~/projetos/video-making-of-skill  # sample photos in doc/
2

Generate keyframe A — the miniature assembled on the rig

O --lock you write looking at the photo, in English, element by element. Without it, the generator invents generic city blocks. Choose the rig in --efeito: onda, fogo, terremoto, explosao, neve.

scripts/kf_a.py doc/poa2.jpg out/kf_a.png \
  --ratio 16x9 --efeito onda \
  --lock "the same orange-brick power-plant hall, the same tall slender chimney,
          the same white apartment blocks behind the treeline, the same curved promenade"
3

Check the image before spending credits

Two questions: Is the miniature recognizable as the photo? And is it up against an edge, with open water on one side only? If it becomes an island surrounded by water, the wave comes from two sides — text can’t fix the geometry. Regenerate.

# open out/kf_a.png and take a look. This step saves credits.
4

Render with Kling

Single shot, no required final frame, native audio. The script submits with --poll 0 and retrieves the result using query_tasks — the CLI's long poll crashes on its own.

scripts/render_kling.sh out/kf_a.png out/filme.mp4 \
  prompts/avcc-ondas-16x9-en.txt
5

Or render for free with Agnes

It interpolates between keyframes, so it needs three: A intact, B at the moment of impact and C destroyed. With only two, it morphs — the wave disappears and the buildings are replaced by generic little houses.

scripts/render_agnes.py --kf A.png B.png C.png \
  --prompt-file prompts/avcc-ondas-16x9-en.txt \
  --out out/filme.mp4 --ratio 16x9
Examples

The keyframe and the result

Same source photo: the Porto Alegre waterfront with the Usina do Gasômetro smokestack.

Miniature waterfront inside the wave tank
Keyframe A — the miniature assembled in the tank, with blue screen, cranes, and crew. Generated with Agnes, at no cost.
The wave destroying the miniature set
Video frame — the wave crosses from the side, the buildings break into pieces and are dragged along. Crew stays dry on the deck.
Roadmap

What’s measured and what isn’t

Honesty about what was actually run.

Ready
Wave effect, Kling, and Agnes ~15 clips generated across both providers, in 16:9 and 9:16, with a controlled test proving that the opening frame determines the result.
Not tested
Fire, earthquake, explosion, and snow rigs Implemented from the same structure, but never run. The first time, generate only keyframe A and check it before generating the video.
Open
Higher wave and second wave clearly visible The wave comes in lower than requested, and the impact happens too quickly. Hypothesis: add a wider stretch of open water in keyframe A so the wave has room to build up speed.