Claude Code managed to get Adobe Lightroom working on Linux

Source: github.com
20 points by alemi 15 hours ago on lobsters | 3 comments

Status: ✅ Working as of 2026-05-16, Wine 11.8 staging, Lightroom CC 9.3.1.

This repo documents how to install and run Adobe Lightroom CC (the cloud-syncing photo app, sometimes called "Lightroom Desktop" — NOT Lightroom Classic) on Linux with Wine.

Lightroom Edit panel running on Wine

What you get

  • The full Creative Cloud desktop app working under Wine (sign in, apps panel, install other Adobe apps from the catalog)
  • Lightroom CC launching, showing the cloud-synced photo library, and the Edit module rendering with all the panels (Light, Color, Effects, Detail, Optics, Geometry, …)
  • The Remove / Heal tool working — brush, mask, apply (as of 2026-05-16; this needed an extra Media Foundation patch over the earlier drafts of this guide — see GUIDE.md section 6.5)

What still doesn't work

See KNOWN_ISSUES.md. Short version: a couple of specific dialogs (like "What's New") can crash, and some advanced GPU-accelerated features may not be 100% — but the core editing workflow works.

Prereqs

  • 64-bit Linux distro, kernel 6.x or newer
  • Wine 11.8 staging or newer (wine --version should say wine-11.8 (Staging) or similar)
  • winetricks 20240105 or newer
  • An NVIDIA, AMD or Intel GPU with Vulkan drivers (we tested NVIDIA, but DXVK works on all three)
  • A valid Adobe Creative Cloud subscription that includes Lightroom CC
  • About 10 GB of free disk for the prefix + Adobe install
  • mingw-w64 for building the stub DLLs (sudo apt install mingw-w64)
  • build-essential, git, and wine build deps if you want to rebuild the patched d2d1.dll from source instead of using our prebuilt one

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 https://creativecloud.adobe.com/apps/download/creative-cloud (signed in to your Adobe account), drop it in installers/, and run:

./scripts/install-cc.sh
./scripts/install-lightroom.sh
./scripts/run-lightroom.sh

How it works

See GUIDE.md for the full walkthrough — every fix explained, what wine gap it works around, and how to roll it back. The six non-obvious pieces are:

  1. DXVK dummy composition swapchain so WebView2 (Adobe's Electron UI shell) can render at all.
  2. Disable AdobeGrowthSDK.dll — Adobe's A/B testing library calls the unimplemented SetThreadpoolTimerEx and crashes the whole CC process tree.
  3. Patched d2d1.dll that registers the CLSID_D2D1ColorManagement builtin effect that Lightroom needs. Build instructions in stubs/sources/.
  4. Patched mfplat.dll with a MFCreateSampleCopierMFT forwarder so the Remove / Heal tool stops crashing. Note: the patched 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, and ext-ms-win-uiacore-l1-1-2.dll (wine 11.8 doesn't ship them but Lightroom static-imports them).
  6. Lowercase symlinks for the Adobe-bundled DLLs so wine's case-sensitive PE loader can find them.

How this repo was built

This entire repository — the scripts, the stub DLL sources, the patched DLLs, the docs, the guide, and this README — was researched, written, and verified by Claude Opus 4.7 working autonomously. Specifically the model claude-opus-4-7 via the Claude Code CLI agent. The human contributor (sander110419) set the goal ("get Lightroom CC working on Linux, then publish a reproducible recipe") and answered occasional clarification questions; Claude did the rest.

The agent's working loop:

  1. Read crash dumps, Wine logs, Adobe binaries (with winedump, objdump, raw PE parsing in Python).
  2. Diff export tables of every relevant mfplat.dll in the system — wine's builtin, Proton's, Adobe's bundled copy — against the imports winegstreamer delay-loads, to pinpoint the single missing function (MFCreateSampleCopierMFT).
  3. Patch the binary directly (see 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 in a running Lightroom by taking screenshots with import from ImageMagick, locating UI elements algorithmically from pixel detection (Pillow), driving the mouse with xdotool to click the Remove tool, and observing whether the popup appeared vs. a crash dump showed up in ~/AppData/LocalLow/Adobe/CRLogs/. When clicks missed by a few pixels (icon coordinate detection was off-by-one for several iterations), the agent re-took the screenshot, re-ran the detector, adjusted, and retried — all autonomously.
  5. Discover via failed verification that the patched system32/mfplat.dll wasn't being loaded at all because Adobe ships its own mfplat.dll in the Lightroom install directory and Windows DLL search order prefers the app directory. Copied the patched DLL into Adobe's install directory, re-launched, clicked through the Remove tool flow, confirmed by screenshot that "Remove the way you want" appeared, "Try it now" clicked into the brush UI, brush stroke registered, "Remove" button applied without crashing.
  6. Document what worked, saved memory notes for the next session so the Adobe-bundled-DLL gotcha is recorded as a generally transferable lesson (other Adobe apps may have the same issue).

There is no LLM hand-waving in the binaries themselves: every patched DLL in stubs/binaries/ is the actual bit-for-bit copy that the agent verified works in the Lightroom prefix on disk at publish time. The md5s in GUIDE.md match the bytes in this repo.

📖 The full chronological build history — every step every Claude session took, every dead end, every diff, every screenshot-driven UI verification — is in history_methodology.md. ~1750 lines, in two parts:

  • Part I reconstructs the earlier sessions (DXVK setup, the SetThreadpoolTimerEx cascade, the D2D effect CLSID scan, the d2d1 ColorManagement patch, three classes of missing-DLL fixes) from the live journal docs, screenshots, and wineprefix forensics. The earlier agents are gone, but they left enough records.
  • Part II is the real-time account of the Remove/Heal tool fix and publishing pipeline, written by the agent as it happened.

Read it if you want to see what autonomous multi-day debugging actually looks like from the inside.

Credits

  • PhialsBasement — wine fork with patches that fix the CC installer's mshtml/msxml3 issues. We didn't end up needing the binary, but their work proved the installer path was tractable.
  • The Wine project for the d2d1, mfplat and mf implementations the patched DLLs are derived from (LGPL-2.1+).
  • Proton GE for the mfplat baseline with the additional MF function bodies that the patched copy inherits.
  • sander110419 — set the goal, reviewed the agent's work, supplied the Adobe subscription, and hosts this repo.
  • Claude Opus 4.7 (claude-opus-4-7, via Claude Code) — did the multi-hour debugging, wrote the patches, ran the screenshot-driven UI verification, and authored every file in this repo.

License

MIT for our scripts and stubs. The patched d2d1.dll and mfplat.dll are derivatives of wine and remain LGPL-2.1+ — full wine sources are at https://gitlab.winehq.org/wine/wine. Adobe's binaries remain Adobe's property; this repo doesn't redistribute any of them.