🖼 Open source · Desktop app

Three instax minis on
one cheap 4R print

Pick three photos, frame each inside a real instax-mini card — white border and all — and lay them on a print-ready 15×10 cm sheet with cut marks. Print, cut, done.

⬇ Get it on GitHub Read the docs
🎞 Real instax-mini look ✂️ Cut marks included 🖨 300 DPI, print-ready 🐍 Python · PyQt6
4R · 15 × 10 cm · 1800 × 1200 px @ 300 DPI

Print-shop instax, three at a time

Everything you need to turn phone photos into instax-mini prints on a standard lab sheet.

🎞

Real instax-mini cards

Each photo is composited inside a full 54×86 mm card with the classic white border — thin at the top and sides, thick at the bottom — so cut-out prints look like actual instax minis.

🖐

Interactive crop frame

Drag to move, mouse-wheel or a slider to zoom, and rotate with 90° buttons or the angle slider. A rule-of-thirds grid helps you compose each shot.

🛡️

Never blank edges

The instax frame is locked to the 46×62 mm ratio and always kept inside the photo — at any rotation — so a crop can never include a white sliver.

📏

Live DPI check

Each crop shows its effective print resolution as you zoom. Drop below 180 DPI and it turns red with a low-res warning, so you catch a soft print before you pay for it.

✂️

Just the cuts you need

Cards pack edge-to-edge and flush to the top, so you only cut two vertical lines and one bottom trim — the sheet's own edges are the outer borders.

🖨

Save or print at 300 DPI

Export a JPEG, PNG, or TIFF with the physical size embedded, or print straight from the app. A lab reproduces it at exactly 15×10 cm with no fiddling.

🌍

Unicode-safe files

Photos with accents, ñ, or non-Latin characters in the path load and save correctly on Linux, macOS, and Windows.

📂

Batch a shoot

The file picker remembers your last folder across all three slots and lists both upper- and lower-case extensions, so a folder of photos never shows up empty.

From three photos to a print in a minute

No projects to manage, no export presets to configure — just load, frame, generate.

1

Load three photos

One per crop slot. JPEG, PNG, TIFF, BMP, WEBP — the picker remembers your folder so a shoot goes fast.

2

Frame each one

Drag, zoom, and rotate the instax frame until it covers exactly what you want. Watch the DPI readout stay green.

3

Generate the sheet

One click lays the three instax cards on a 4R with cut marks and opens a preview at 15×10 cm.

4

Print & cut

Save or print at 300 DPI, then make three straight cuts. Each piece is an instax-mini-style print.

Anchored to real millimetres

Every dimension is defined in mm and rendered at 300 DPI, so the exported file prints at the correct physical size.

ElementMillimetresPixels @ 300 DPI
4R sheet (landscape)152.4 × 101.61800 × 1200
instax-mini card54 × 86638 × 1016
instax image area46 × 62543 × 732
top / side border4~47

The image area sits inside the card with 4 mm side/top borders and a ~20 mm bottom border — the classic instax look. Three 54 mm cards (162 mm) are a touch wider than the 4R (152 mm), so they print slightly under full size. All layout numbers live in instax_config.py and are easy to tweak.

Up and running in minutes

Python 3.11+, Linux / macOS / Windows. No build step — clone and run.

1

Clone the repository

You'll need Python 3.11+ and Git. On Linux, install the PyQt6 system libs first (see the install doc).

2

Run the launcher

./run.sh creates a local venv, installs PyQt6, OpenCV, Pillow, and NumPy on first run, then launches the app.

3

Load, frame, print

The window opens with three empty crop slots. Load a photo into each, frame it, and generate your 4R sheet.

# Clone the repository
git clone https://github.com/mnavas/instax-printing.git
cd instax-printing

# First run creates the venv + installs deps, then launches
./run.sh

# …or do it by hand
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python main.py

For Linux system packages (libxcb, etc.), desktop launcher setup, and platform notes see docs/installation.md.

Help make it better

instax-printing is open source and welcomes contributions of any size.

🐛

Report a bug

Something crash or print wrong? Open an issue with steps to reproduce and your OS / Python version.

Open an issue →
💡

Suggest a feature

Want other print sizes, more cards per sheet, or a different border? Open a feature request and describe it.

Request a feature →
🔧

Submit a pull request

Fork, branch, and send a PR. Read docs/architecture.md first — it explains the module map and the crop maths.

Fork on GitHub →
📖

Improve the docs

Docs are plain Markdown in the docs/ folder — easy to edit and submit.

Browse the docs →

Keep instax-printing free and actively maintained

instax-printing is built and maintained as a side project. It's free and open source — but development tools, time, and motivation all have a real cost.

If the app saves you money and hassle printing your instax photos, consider chipping in. Every contribution helps keep it maintained and improving.

All contributions go directly to the developer. No company, no VC behind this.

📄 Open source

Free and open source

instax-printing is free to use, fork, and modify. No telemetry, no accounts, no cloud — everything runs on your machine.

View on GitHub →