The Pakon is an automated, high-throughput film-scanner family made for photo lab and minilab workflows. It transports film through the scanner, detects and frames images, applies the Pakon imaging pipeline, and produces files for printing or delivery. The family handles 135 (35 mm) film and, on supported models, APS film; the F-135 manual specifically describes 35 mm colour-negative strip scanning. Contemporary product material describes the scanners as minilab, kiosk, or standalone equipment, while the F-135/F-135 Plus manual documents the compact F-135 model.
The recovered software identifies these model families and variants:
| Family | Variants represented by the software |
|---|---|
| F-135 | F-135, F-135 Plus |
| F-235 | F-235, F-235 Plus, F-235C |
| F-335 | F-335, F-335C |
This repository currently targets an F-135 Plus. The exact capability matrix for every model variant remains a hardware-specific question; model names alone must not be used to select low-level scanner commands.
PakonClient is a new .NET 10 scanner application for the Pakon F-135 Plus.
The production direction is direct driver communication without a COM
dependency. Until the device packet protocol is recovered and validated,
Pakon.Transport intentionally exposes only documented, read-only driver
metadata access.
The installed TLX COM server is retained only as a behavioural reference. All
temporary TLX use is isolated in Pakon.LegacyBridge, an x86 process reached
through named pipes. The new application does not expose TLX types in its
public API.
The application-facing scanner boundary is defined in Pakon.Scanner.
Pakon.Scanner.Legacy implements that contract through the existing bridge
and is the only scanner-workflow project that knows TLX operation values or
save-control flags. Pakon.Client selects one workflow backend for the whole
scanner session, allowing a managed F-135 backend to be introduced beside the
legacy implementation without changing the UI workflow.
This project began by preserving and studying the existing Pakon software interfaces: the 32-bit TLX COM facade, its managed wrapper, and the scanner driver. That work established a controlled reference path for observing a real scan while the new application recovers the direct driver protocol.
The project builds on the important Pakon driver reverse-engineering work by Kai Kaufman, including the FX35 driver source. His research made the modern direct-driver direction substantially more practical.
- TLX facade and observed scanner behaviour
- Low-level driver and ABI evidence
- Colour pipeline research
dotnet build .\Pakon.sln
dotnet run --project .\src\Pakon.Transport.CliThe default CLI probe uses only IOCTL_EZUSB_GET_DRIVER_VERSION
(0x222074). It does not send scanner packet commands or move hardware.
TLX is 32-bit, so the bridge must run elevated under the 32-bit .NET host. Build the solution, then start the bridge in one elevated PowerShell window:
& 'C:\Program Files (x86)\dotnet\dotnet.exe' C:\Code\PakonClient\src\Pakon.LegacyBridge\bin\x86\Debug\net10.0-windows\Pakon.LegacyBridge.dll --pipe PakonLegacyBridgeIn another elevated PowerShell window, run the controller. It initializes the scanner, waits until it is ready, prompts before film motion, scans the fixed baseline profile, promotes the roll, saves JPEGs, and closes the session.
dotnet run --project .\src\Pakon.Transport.Cli -- --run-tlx-trace C:\PakonTraces\roll-001Add --capture-fileio-etw to collect an optional passive Windows ETW light
FileIO timeline. It correlates PFS file activity with TLX callbacks but does
not expose DeviceIoControl payload bytes.
The recording retains a versioned manifest, timestamped callback stream, metadata snapshots, and runtime evidence. It drains the native TLX error queue after callback errors. PFS cleanup is limited to buffers created or changed by the bridge's own session; existing unchanged buffers are left alone. The recorder observes the known facade only: it neither hooks the driver nor records or replays scanner packets or bulk pixels.
Pakon.Client is the .NET 10 WPF scanning application. It provides automatic
scanner initialization, Base 16 scanning, paged 3x3 previews, multi-frame
editing, per-frame inclusion, and 16-bit PNG or quality-95 JPEG export.
Filename prefixes are optional; DX frame names are preferred over sequential
numbering.
Build and launch from an elevated Windows terminal:
dotnet build .\Pakon.sln
dotnet run --project .\src\Pakon.ClientThe application starts Pakon.LegacyBridge automatically with the 32-bit .NET
host. The 32-bit .NET runtime, registered Pakon COM server, and its native
runtime files are required until the remaining legacy DLL implementations are
replaced.