All tutorials
Tab 2 of 6 · Import

Bring an existing filmstrip back to life

Use the Import tab when you already have a rendered strip — a KnobMan export, a purchased asset, or something StripKit made earlier — and need to inspect, re-slice, re-orient, or re-time it instead of starting from source art.

Loading the source strip

Get an existing filmstrip PNG onto the canvas via the file picker or by dropping it straight onto the preview pane.

  • Load filmstrip… — opens a file picker defaulting to a PNG image filter (*.png), with a secondary All images filter covering *.webp, *.bmp, *.jpg, *.jpeg; switch the picker's filetype dropdown to see non-PNG strips. Loading runs auto-detection immediately and refreshes the preview.
  • Drop zone (the preview pane) — accepts dropped files with extension .png, .webp, .bmp, .jpg, or .jpeg (case-insensitive); shows "Load a filmstrip — or drop one here" until something is loaded, and briefly highlights its border in accent orange while a valid file is dragged over it.
  • Source strip readout — read-only; reads "No strip loaded." by default, then "{filename} — {width}×{height}px" once a strip is in.

Detected layout

Read-only feedback on what the auto-detector inferred from the strip's pixel dimensions — frame count, frame size, stack orientation, and a rough guess at control type.

  • Detected layout readout — formatted as "{count} frames · {frameW}×{frameH}px · {kind} · vertical|horizontal", where kind is Rotary knob / button, Vertical fader, Horizontal slider, or Unknown based on the detected frame's aspect ratio. Orientation and frame dimensions here are not directly editable — only Frame Count below can be adjusted, and orientation only changes via Re-stack.
  • Ambiguous-detection warning banner — an amber/red-bordered banner that appears when the detector's guess is ambiguous (for example a square frame whose total also divides evenly by an adjacent count, which can happen if the strip secretly contains an extra centre/rest frame). When shown, the status bar also reads "Loaded — detection is ambiguous; verify the frame count."

Frame count & frame size

The editable slice count that drives preview, extract, and re-stack — kept intentionally separate from the resample target count below.

  • Frame Count — numeric field, range 1–1024, step 1. Defaults to whatever the detector guessed as soon as a strip loads. Editing it recomputes frame width/height by dividing the strip's total pixel span by the new count, then re-slices the live preview.
  • Frame Size readout — read-only, shown both under Frame Count and under the transport tile; reads "Frame: {w}×{h}px", or appends "⚠ {total}px doesn't divide evenly by {count}" when the strip's total span doesn't divide evenly by the current Frame Count.

Export — single frame / re-stack

Two direct export actions that operate on the loaded strip using the current Frame Count and detected orientation.

  • Extract current frame… — saves the currently-previewed frame as its own standalone PNG, suggested filename "{baseName}_frame{index+1}.png". Disabled until a strip is loaded. The same action is also available as an accent-styled button directly on the transport tile next to the status message, for quick access while scrubbing.
  • Re-stack (flip orientation)… — re-stacks the strip into the opposite orientation from what was detected (vertical→horizontal or horizontal→vertical); there is no explicit direction chooser. Runs off the UI thread, suggested filename "{baseName}_{count}frames_{v|h}.png".

Resample frame count

A separate re-timing export that changes how many frames the exported strip has, independent of the Frame Count field used for slicing and preview.

  • Target frames — numeric field, range 1–1024, step 1, default 64. Resets to the detected frame count every time a new strip loads. Changing it does not refresh the live preview — it only affects Export resampled… below.
  • Export resampled… — re-times the strip to Target frames by picking the nearest source frame per output frame (no blending), run off the UI thread. Suggested filename "{baseName}_{targetCount}frames_{v|h}.png". Disabled until a strip is loaded.

Preview & transport

The right-hand preview shows the currently selected frame and doubles as the drop zone; the transport tile beneath it lets you scrub, step, or auto-play through the detected frames.

  • Scrub slider — range 0–1, default 0.5, mapped continuously to a frame index; dragging re-renders the preview frame in real time.
  • Previous frame / Next frame — step one frame at a time, clamped to the first/last frame; stops any auto-play first.
  • Play / Stop — auto-plays a ping-pong loop (0→1→0) at roughly 30fps, one frame step per tick; the icon and label swap between Play and Stop while running.
  • Reset to the first frame — stops any auto-play and jumps back to frame 0.
  • Frame readout — read-only, monospace; reads "Frame {index+1}/{count}" (1-based numerator).
  • Status message — read-only; defaults to "Load or drop a filmstrip to begin." and reflects the outcome of every load/extract/re-stack/resample action, including error text on failure.
  • Show in folder — opens the OS file explorer with the most recently exported file selected; only enables once an export has happened in this session and that file still exists on disk.
Tip: Frame count is a guess, not a stored fact — a PNG doesn't record how many frames it contains, so detection infers it purely from divisibility of the strip's pixel dimensions. Always eyeball the scrub from min to max before trusting it, and pay close attention when the low-confidence banner appears (a square frame whose total also divides evenly by an adjacent count is the classic trap — it often means a hidden centre/rest frame). Editing Frame Count is destructive to what you're about to export: it re-slices the current preview basis, and Extract / Re-stack both use whatever value it currently holds, not the originally detected one. The ⚠ doesn't divide evenly warning on the Frame Size readout is a strong signal the count is wrong.
Tip: Target frames (resample) and Frame Count (slice) are deliberately decoupled — changing Target frames never re-slices or refreshes the live preview, it only feeds Export resampled…. Resample itself is nearest-frame only, never blended, so downsampling drops frames and is lossy; for the best quality, re-render from the original source art rather than resampling an already-rendered strip.
Tip: Re-stack always flips to the opposite orientation of what was detected — there's no vertical/horizontal dropdown, so a strip detected vertical exports horizontal and vice versa. And when dropping files, only the first accepted file in a multi-file drop is loaded; the rest are silently ignored.