# lightroom-cc-on-linux

A reproducible recipe for running Adobe Lightroom CC (the cloud-syncing photo app, not Classic) on Linux via Wine 11.8 staging. As of 2026-05-16, the full Creative Cloud desktop app signs in, the Lightroom Edit module renders all panels (Light, Color, Effects, Detail, Optics, Geometry), and the Remove/Heal tool works including brush, mask, and apply.

What makes the project interesting beyond the recipe itself is that it was researched, debugged, patched, screenshot-verified, and documented entirely by Claude Opus 4.7 working autonomously via Claude Code. The human contributor (sander110419) set the goal — get Lightroom working, then publish a reproducible recipe — and answered occasional clarification questions. The agent did the rest.

## The six non-obvious fixes

1. **DXVK dummy composition swapchain** so WebView2 (Adobe's Electron UI shell) can render.
2. **Disable AdobeGrowthSDK.dll** — Adobe's A/B testing library calls the unimplemented `SetThreadpoolTimerEx` and crashes the entire CC process tree.
3. **Patched `d2d1.dll`** registering the `CLSID_D2D1ColorManagement` builtin effect Lightroom needs. Build instructions in `stubs/sources/`.
4. **Patched `mfplat.dll`** with a `MFCreateSampleCopierMFT` forwarder so the Remove/Heal tool stops crashing. The DLL must be dropped into *two* locations — `system32/` and the Adobe-bundled copy at `Program Files/Adobe/Adobe Lightroom CC/mfplat.dll`, because Adobe ships its own that preempts wine's.
5. **Tiny stub DLLs** for `NDFAPI.DLL`, `wkscli.dll`, `ext-ms-win-uiacore-l1-1-2.dll`.
6. **Lowercase symlinks** for Adobe-bundled DLLs so wine's case-sensitive PE loader can find them.

## The agent's working loop

The README documents how Claude actually worked:

1. **Read** crash dumps, wine logs, Adobe binaries (with `winedump`, `objdump`, raw PE parsing in Python).
2. **Diff** export tables across every relevant `mfplat.dll` (wine builtin, Proton's, Adobe's bundled) against winegstreamer's delay-loaded imports, narrowing down to the single missing function `MFCreateSampleCopierMFT`.
3. **Patch** the binary directly (`scripts/patch_mfplat.py`): appended a new PE section with a fresh export directory containing all original exports plus a forwarder to `mf.MFCreateSampleCopierMFT`.
4. **Verify** by screenshotting with ImageMagick's `import`, locating UI elements algorithmically with Pillow, driving the mouse via `xdotool`, watching for either the Remove tool's popup or a crash dump in `~/AppData/LocalLow/Adobe/CRLogs/`. When clicks missed by a few pixels, the agent re-took the screenshot, re-ran detection, adjusted, retried.
5. **Discover** that the patched `system32/mfplat.dll` wasn't loading because Windows DLL search order prefers the app directory and Adobe ships its own. Copied the patched DLL into Adobe's install directory, re-launched, screenshot-confirmed Remove tool now works.
6. **Document** what worked, save memory notes for the next session so the Adobe-bundled-DLL gotcha is a transferable lesson for other Adobe apps.

## Method documentation

`history_methodology.md` (~1750 lines) is the chronological build history — every step, dead end, diff, and screenshot-driven UI verification across multi-day debugging. Part I reconstructs earlier sessions (DXVK, SetThreadpoolTimerEx, D2D effect CLSID scan, three classes of missing-DLL fixes) from live journal docs, screenshots, and wineprefix forensics — the earlier agents are gone but left enough records. Part II is the real-time account of the Remove/Heal fix and the publishing pipeline, written by the agent as it happened.

## Quick start

```
git clone https://github.com/sander110419/lightroom-cc-on-linux.git
cd lightroom-cc-on-linux
./scripts/setup.sh    # ~30 min, mostly downloads
# Then download ACCCx*.zip from Adobe, drop in installers/
./scripts/install-cc.sh
./scripts/install-lightroom.sh
./scripts/run-lightroom.sh
```

Prereqs: 64-bit Linux on kernel 6.x+, Wine 11.8 staging, winetricks 20240105+, Vulkan-capable GPU, ~10 GB free, `mingw-w64`, a valid Adobe Lightroom CC subscription.

## Why this is interesting

Two things at once: the actual Lightroom-on-Linux recipe, and the artifact of an agent doing multi-day autonomous binary debugging end to end. The patched DLLs in `stubs/binaries/` are the bit-for-bit copies the agent verified work — md5s in `GUIDE.md` match the bytes in the repo. No LLM hand-waving made it into the actual binaries.

The piece sits next to [[1password-agentic-refactoring]] (1Password's case for agent-built deterministic tools) and [[building-syntaqlite-ai]] (vibe coding vs. disciplined design with AI). All three point at the same shift — the useful AI agent product is the agent + a verification harness, not the agent producing prose.

## Credits

- [PhialsBasement](https://github.com/PhialsBasement/wine-adobe-installers) — wine fork that fixes CC installer mshtml/msxml3 issues.
- [Wine project](https://www.winehq.org/) for d2d1, mfplat, mf sources.
- [Proton GE](https://github.com/GloriousEggroll/proton-ge-custom) for the mfplat baseline.
- sander110419 — set the goal, supplied the Adobe subscription, hosts the repo.
- Claude Opus 4.7 — did the debugging, wrote the patches, ran screenshot-driven verification, authored every file.

Repo: [github.com/sander110419/lightroom-cc-on-linux](https://github.com/sander110419/lightroom-cc-on-linux) — 138 stars, MIT
