0

Make a Contact Sheet Before Adding Motion

Imagine a bakery preparing a short cake video.

The team has twelve possible starting images. Most look almost identical in a folder, so someone picks one quickly. Only after adding motion do they notice a missing candle, a different plate, and broken text on the sign behind the cake.

The motion is not the main problem. The wrong image entered a workflow that might continue in PWZ AI or another creative workspace. A numbered contact sheet would have made the differences easier to spot before animation began.

Why a Folder Is Not Enough

Opening files one at a time makes visual comparison difficult. Names such as download-7.png and final-new-2.png are not much help.

A contact sheet places every option on one page. It makes four things easier to compare:

  • Subject and product details
  • Background consistency
  • Space for movement and captions
  • Broken text or unwanted objects

The most attractive still image is not always the best starting frame. A close crop may look good on its own but leave no room for a hand to enter or for the camera to move.

Create a Contact Sheet With Pillow

Place the images in a folder named candidates, then run this script:

from pathlib import Path
from PIL import Image, ImageDraw, ImageOps

folder = Path("candidates")
extensions = {".png", ".jpg", ".jpeg", ".webp"}

files = sorted(
    path for path in folder.iterdir()
    if path.suffix.lower() in extensions
)

if not files:
    raise SystemExit("No images found in the candidates folder.")

columns = 4
cell_width = 320
cell_height = 240
label_height = 32

rows = (len(files) + columns - 1) // columns

sheet = Image.new(
    "RGB",
    (columns * cell_width, rows * (cell_height + label_height)),
    "white"
)

draw = ImageDraw.Draw(sheet)

for index, path in enumerate(files):
    with Image.open(path) as source:
        image = ImageOps.exif_transpose(source).convert("RGB")

    thumbnail = ImageOps.contain(
        image,
        (cell_width, cell_height)
    )

    column = index % columns
    row = index // columns

    x = column * cell_width
    y = row * (cell_height + label_height)

    image_x = x + (cell_width - thumbnail.width) // 2
    image_y = y + (cell_height - thumbnail.height) // 2

    sheet.paste(thumbnail, (image_x, image_y))
    draw.text(
        (x + 8, y + cell_height + 8),
        f"{index + 1:02d}  {path.name}",
        fill="black"
    )

sheet.save("contact-sheet.jpg", quality=90)

Install Pillow if needed:

pip install pillow

ImageOps.exif_transpose() applies the orientation stored by phones and cameras. Without it, some images may appear rotated in the finished sheet.

Choose for Movement, Not Just Appearance

Suppose image 04 has the warmest lighting, but the cake is already cropped at the edge. Image 07 looks simpler, yet it shows the full plate and leaves room above the candles.

Image 07 may be the better starting frame because it gives the next action somewhere to happen.

Record the decision in a small table:

Candidate Decision Reason
04 Reject Cake is cropped too closely
07 Select Clear shape and room for movement
09 Reject Background sign contains broken text
11 Backup Good layout, but one candle is missing

Rename the selected file clearly:

cake-shot-01-selected.png

Do not replace it later with another image under the same filename. That makes previous review notes unreliable.

Animate Only the Shortlist

There is little value in animating all twelve candidates. Select two or three, then give each the same simple movement:

Slow push toward the cake. Let the candle flames move gently. Keep the cake, plate, background, and camera direction stable.

Using one movement makes the comparison fair. If every image receives different instructions, it becomes harder to tell whether the starting frame or the motion caused the problem.

Check the result for changing product shapes, distorted text, missing objects, and camera movement that exposes unfinished parts of the background. Timing can often be fixed in an editor. Major changes to the subject may require another draft.

Share the Sheet Carefully

A contact sheet is easy to share, which also makes it easy to expose material that should remain private.

Do not include confidential client work, private locations, unreleased products, or identifiable people unless their use has been approved. Confirm that reference images, characters, and logos can be processed and published for the intended purpose.

Generated prices, labels, and product details should be checked independently. A convincing image does not make the information inside it accurate.

The bakery does not need twelve animated cakes. It needs one starting frame chosen carefully.

Make the contact sheet first.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí