Skip to content

Repository files navigation

InstantLink

CI

Open-source CLI and native macOS app for printing to Fujifilm Instax Link printers via Bluetooth Low Energy. Supports the Instax Mini Link, Square Link, and Wide Link.

85f25fd250a079acc1ed95fa903955c9

The Instax Link BLE protocol was reverse-engineered by the open-source community (javl/InstaxBLE, linssenste/instax-link-web). InstantLink provides a clean Rust implementation.

What's Included

The InstantLink project ships two end-user products and the shared Rust core they're both built on.

Component Description
App (InstantLink.app) Native macOS app — image editor, camera capture, BLE printing, Bridge management
Bridge (bridge/) Raspberry Pi Zero 2 W appliance — accepts FTP uploads from anything (cameras, scripts) and relays them to a paired Instax printer over BLE and/or syncs them to the iOS app
iOS app (ios/) SwiftUI iPhone app — pairs with the Bridge via QR + hotspot join and pulls camera photos into the Photos library (plan 050; on-device testing pending)
CLI (instantlink binary, crate instantlink-cli) Command-line tool to scan, query, and print
instantlink-core / instantlink-ffi Rust core library (BLE protocol, image processing) and C FFI bindings used by the App and Bridge

Install

Pre-built artifacts are published on the Releases page for each tagged version.

Build from source:

git clone https://github.com/wu-hongjun/InstantLink.git
cd InstantLink
cargo build --workspace --release

# Install the CLI
cargo install --path crates/instantlink-cli

Quick Start

# Scan for nearby printers
instantlink scan

# Check printer status
instantlink status

# Print an image
instantlink print photo.jpg

# Print with specific fit mode and quality
instantlink print photo.jpg --fit contain --quality 90

# Print with natural color mode (classic film look)
instantlink print photo.jpg --color-mode natural

# Control the LED
instantlink led set "#FF6600" --pattern breathe
instantlink led off

Structured --json output is currently implemented for scan, info, and status.

Supported Printers

Model Resolution Film Type
Instax Mini Link 600x800 Instax Mini
Instax Mini Link 3 600x800 Instax Mini
Instax Square Link 800x800 Instax Square
Instax Wide Link 1260x840 Instax Wide

The printer model is auto-detected after connecting.

Features

  • Print any image (JPEG, PNG, etc.) to Instax Link printers via BLE
  • Auto-resize with crop, contain, or stretch fit modes
  • Rich and Natural color modes (vivid vs classic film look)
  • Automatic JPEG quality reduction to fit model-specific printer limits (Mini 105KB, Mini Link 3 55KB, Square 105KB, Wide 225KB)
  • Battery level, film count, charging state, and print history queries
  • LED color control with solid, blink, and breathe patterns
  • BLE scanner to discover nearby printers
  • JSON output mode for integration with other tools
  • Native macOS app with:
    • Menu bar interface with drag-and-drop printing
    • Built-in image editor with crop, rotate, overlays, and queue-aware defaults
    • Camera capture mode with self-timer (2s / 10s countdown)
    • Film orientation toggle (portrait/landscape) with print-time rotation
    • Film border preview showing the physical Instax film shape
    • Stage-aware pairing and reconnect UI
    • Multi-printer management with saved profiles
    • Experimental in-app LED diagnostics in Settings
    • Auto-update via GitHub releases
    • Localized in 12 languages
  • C FFI (24 exported functions: see docs/reference/ffi.md) for building native UIs, including connection-stage callbacks
  • Raspberry Pi bridge appliance for receiving camera FTP uploads over a local hotspot and printing through the InstantLink FFI backend
  • iPhone auto-sync from the Bridge: photos spool to a disk outbox and an iOS app pulls them over a token-authed local HTTP API with Bonjour discovery — print, sync, or both per photo destination setting
  • Virtual LCD on the Bridge: the same sync API serves the live 240x240 screen and accepts input actions, so the Bridge UI can be viewed and driven from the iOS app with no extra hardware (plan 054)

Project Structure

InstantLink/
├── Cargo.toml                    # Workspace root
├── mkdocs.yml                    # Documentation config
├── docs/                         # MkDocs source
├── crates/
│   ├── instantlink-core/          # Core library
│   ├── instantlink-cli/           # CLI binary
│   └── instantlink-ffi/           # C FFI
├── bridge/                        # Raspberry Pi camera FTP appliance
├── ios/                          # iPhone sync app (SwiftUI, plan 050)
└── macos/                        # Native macOS app (SwiftUI)
    └── InstantLink/

Bridge Appliance

bridge/ contains the Raspberry Pi runtime, LCD UI, FTP receive service, network-mode helpers, systemd units, and deployment scripts for a self-contained camera-to-printer appliance. It deliberately reuses instantlink-ffi for printer discovery, status, and print transport instead of maintaining a second BLE protocol implementation.

macOS App

The macOS app is a native SwiftUI application with menu bar integration. It loads the Rust core library via FFI (dlopen/dlsym) for direct BLE communication. The bundled CLI remains in the app for lightweight metadata such as version reporting.

Features include drag-and-drop image printing, a built-in image editor, overlays, camera capture with self-timer, film orientation control, film border preview, printer profile management, and auto-updates.

# Build the app bundle
bash scripts/build-app.sh 0.1.5

Documentation

Full docs are available at instantlink.hongjunwu.com.

License

MIT

About

Open Source Instax Link Printers Driver

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages