{
    "archive_path": "archive/1791324472.35201",
    "base_url": "andreklein.net/vibecoding-photoshop-time-and-pressure",
    "basename": "",
    "bookmarked_date": "2026-10-06 22:07",
    "canonical": {
        "archive_org_path": "https://web.archive.org/web/andreklein.net/vibecoding-photoshop-time-and-pressure",
        "dom_path": "output.html",
        "favicon_path": "favicon.ico",
        "git_path": "git/",
        "google_favicon_path": "https://www.google.com/s2/favicons?domain=andreklein.net",
        "headers_path": "headers.json",
        "htmltotext_path": "htmltotext.txt",
        "index_path": "index.html",
        "media_path": "media/",
        "mercury_path": "mercury/content.html",
        "pdf_path": "output.pdf",
        "readability_path": "readability/content.html",
        "screenshot_path": "screenshot.png",
        "singlefile_path": "singlefile.html",
        "warc_path": "warc/",
        "wget_path": "andreklein.net/vibecoding-photoshop-time-and-pressure/index.html"
    },
    "domain": "andreklein.net",
    "extension": "",
    "hash": "949BJ2GMHQKSG0FWSSXW",
    "history": {
        "archive_org": [],
        "dom": [],
        "favicon": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--output",
                    "favicon.ico",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://www.google.com/s2/favicons?domain=andreklein.net"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-06T22:09:58.420522+00:00",
                "index_texts": null,
                "output": "favicon.ico",
                "pwd": "/data/archive/1791324472.35201",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-06T22:09:57.862523+00:00",
                "status": "succeeded"
            }
        ],
        "git": [],
        "headers": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--head",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://andreklein.net/vibecoding-photoshop-time-and-pressure/"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-06T22:09:58.834822+00:00",
                "index_texts": null,
                "output": "headers.json",
                "pwd": "/data/archive/1791324472.35201",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-06T22:09:58.430173+00:00",
                "status": "succeeded"
            }
        ],
        "htmltotext": [],
        "media": [],
        "mercury": [
            {
                "cmd": [
                    "/app/node_modules/@postlight/parser/cli.js",
                    "https://andreklein.net/vibecoding-photoshop-time-and-pressure/"
                ],
                "cmd_version": "1.0.0",
                "end_ts": "2026-10-06T22:10:09.267223+00:00",
                "index_texts": null,
                "output": "mercury",
                "pwd": "/data/archive/1791324472.35201",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-06T22:10:05.436794+00:00",
                "status": "succeeded"
            }
        ],
        "pdf": [],
        "readability": [
            {
                "cmd": [
                    "/app/node_modules/readability-extractor/readability-extractor",
                    "/tmp/tmpkdi_wabb",
                    "https://andreklein.net/vibecoding-photoshop-time-and-pressure/"
                ],
                "cmd_version": "0.0.11",
                "end_ts": "2026-10-06T22:10:05.429196+00:00",
                "index_texts": [
                    "I\u2019m sure you\u2019ve seen the argument before: \u201cIf anyone can now vibecode their own software, why haven\u2019t we seen any viable replacements for industry standard tools like Photoshop?\u201d\nAnd for a while that argument seemed like a solid line of reasoning: you could just point to the continuous absence of viable candidates to prove your point.\nBut it missed two key factors: time and pressure. Sure, ChatGPT has been around for a while now, but agentic coding has only been useful for a relatively short time. And development still goes layer by layer, debug by debug, test by test. It still takes serious human commitment and persistence.\nThe moral argument around \u201cvibe coding\u201d was never that interesting to me. The much more interesting question was always the technical one.\nNot \u201cshould this be done\u201d but \u201ccan this be done\u201d at all?\nAnd by the looks of it, in October 2026 the answer is a resounding \u201chell yeah!\u201d. We don\u2019t just have one but multiple candidates.\nI\u2019m tracking as many of these as I can find, and it seems that every second day I stumble over another one. Whatever nitpicks you may have about their current state or functionality, the core argument outlined above is dead in the water, by the reverse logic:\nThe mere existence of these tools is proof that it can be done.\nAnd honestly, I think Photoshop is the perfect type of software for proving this type of \u201cagentic engineering\u201d actually works, because we all know what a Photoshop clone should look and feel like. It\u2019s by no means a simple application, but perhaps more importantly, a viable, workable clone can be easily verified not just via UI and core functionality, but even more importantly, via the PSD standard.\nThe list of things it has to be able to do reliably is long, complex and diverse: layers, blend modes, smart objects, adjustment layers, layer effects, font rendering, etc. In short, all the nitty gritty stuff where a one-shot app would show its sloppy hand immediately.\nAnd sure, if you push any of these candidates hard enough within certain esoteric functions or edge-cases, you will find issues. But that doesn\u2019t disprove the proof of concept.\nIn fact, many of these tools I\u2019ve tried already seem way beyond the point of being mere rickety POCs. And whatever bugs there are today, they will probably get fixed tomorrow.\nSo instead of trying to do a nitpicky review of all the details, which are bound to shift faster than I can update this blog post, let\u2019s take a look at some of these projects from a pragmatic perspective.\nPhoton Studio\nThis is probably one of the most polished and feature-packed I\u2019ve tried so far. Granted, it\u2019s not open source, but it\u2019s free, comes with binaries for macOS, Windows and Linux.\nApart from core Photoshop features, what is interesting about Photon Studio is that it offers a bunch of forward-looking settings like being able to use Local AI models and integrations with all modern agentic harnesses, so you can let your agent drive it.\nAs for my use case it has been able to load and save all my PSDs without any issues, with smart objects, blend modes and layer effects fully intact.\n\nOmaPhoto\nNext up we have OmaPhoto, which is a Linux port of Compositor\u00a0by Wonder Assembly.\nWhile not as feature rich as Photon Studio yet, it manages to import my PSDs just fine, and at least it informs me honestly about what type of feature or adjustment parameters it doesn\u2019t support yet.\nHere is a screenshot of the same PSD as above. It flattened my Smart Object and lost various adjustments, which isn\u2019t ideal, but that may just get fixed in the next update.\n\nAlso, and this is not a nitpick with OmaPhoto itself but more with Compositor, it relies heavily on its own .comp file format, which is okay if you do most of your work with it, but for true interop with Photoshop it\u2019s a bit tricky, since at least for now you can\u2019t easily export back to PSD.\nAlso, I spotted a bug with mouse cursor rendering but that may just be an Nvidia/Wayland quirk.\nPhotoCraft\nNext up we have PhotoCraft, \u201can open-source, clean-room reimplementation of Adobe Photoshop, rebuilt in pure Rust\u201d. And it imports our test PSD just fine, albeit with some weird interpretation of my color adjustments:\n\nPhotopea, the famous web-based Photoshop alternative from the pre-AI era, and somewhat of a gold standard of 1:1 Photoshop parity doesn\u2019t have that issue. So I think\u00a0PhotoCraft\u00a0needs some work on that particular front.\nAs for my Smart Object, PhotoCraft didn\u2019t flatten it which was nice to see, but I wasn\u2019t able to edit it or create new Smart Objects, although I think according to the docs that should work. Perhaps just user error.\nAt any rate, it exports the PSD just fine.\nPhotoSuite\nLast but not least, we have PhotoSuite, another open-source one that promises \u201c1:1 native PSD/PSB compatibility\u201d.\nIn terms of UI parity, this is probably the closest to Photoshop, which is excellent.\nColors after import seem mostly fine. I can create Smart Objects but am not able to edit them. Note: double-clicking is the expected behavior in Photoshop, which should open another tab for that particular object. Both Photon Studio and Photopea handle it just fine.\n\nAnyway, nothing that can\u2019t be fixed.\nSo anyway, there you have it. Not just one but four (!) viable candidates for Photoshop, three of them completely open-source. And there will probably be five more by the time I hit publish on this post. I\u2019m also looking forward to testing the upcoming OmaImage by @X_Nosignal_X for example.\nDISCLAIMER: I obviously can\u2019t know whether any of these projects were definitely \u201cvibe-coded\u201d, but it also doesn\u2019t matter. The whole purity tests around \u201cdidst thou or didst thou not use AI\u201d are a bit silly. At the end of the day, it is safe to assume that developers will use any given tools available to them at any given time. And in 2026 that\u2019s agents.\nWhether you think that \u201cshouldn\u2019t be done\u201d is a totally different question.\nIt certainly can be done. And I\u2019ll be watching all of these projects with great interest.\nMind-boggling how far we\u2019ve come.\nUPDATE:\nHere are some more:\n\nPatchy by Seth Robinson (OSS, even runs in browser) \u2013 handled my color adjustment layers and Smart Objects like a boss\nXuan by silverling (OSS, Rust port of Compositor) \u2013 haven\u2019t tested it"
                ],
                "output": "readability",
                "pwd": "/data/archive/1791324472.35201",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-06T22:10:03.737025+00:00",
                "status": "succeeded"
            }
        ],
        "screenshot": [],
        "singlefile": [],
        "title": [
            {
                "cmd": [
                    "curl",
                    "--silent",
                    "--location",
                    "--compressed",
                    "--max-time",
                    "120",
                    "--user-agent",
                    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) curl/curl 8.14.1 (x86_64-pc-linux-gnu)",
                    "https://andreklein.net/vibecoding-photoshop-time-and-pressure/"
                ],
                "cmd_version": "curl 8.14.1 (x86_64-pc-linux-gnu)",
                "end_ts": "2026-10-06T22:10:03.730145+00:00",
                "index_texts": null,
                "output": "Vibecoding Photoshop: Time and Pressure - Andr\u00e9 Klein Dot Net",
                "pwd": "/data/archive/1791324472.35201",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-06T22:10:03.719595+00:00",
                "status": "succeeded"
            }
        ],
        "wget": [
            {
                "cmd": [
                    "wget",
                    "--no-verbose",
                    "--adjust-extension",
                    "--convert-links",
                    "--force-directories",
                    "--span-hosts",
                    "--no-parent",
                    "-e",
                    "robots=off",
                    "--reject=js,mjs,woff,woff2,ttf,otf,eot,mp4,m4v,mov,webm,ogv,mkv,avi,flv",
                    "--timeout=120",
                    "--restrict-file-names=windows",
                    "--page-requisites",
                    "--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 ArchiveBox/0.7.4 (+https://github.com/ArchiveBox/ArchiveBox/) wget/GNU Wget 1.21.3",
                    "--compression=auto",
                    "--timestamping",
                    "https://andreklein.net/vibecoding-photoshop-time-and-pressure/"
                ],
                "cmd_version": "GNU Wget 1.21.3",
                "end_ts": "2026-10-06T22:10:03.712519+00:00",
                "index_texts": null,
                "output": "andreklein.net/vibecoding-photoshop-time-and-pressure/index.html",
                "pwd": "/data/archive/1791324472.35201",
                "schema": "ArchiveResult",
                "start_ts": "2026-10-06T22:09:58.841290+00:00",
                "status": "succeeded"
            }
        ]
    },
    "icons": null,
    "is_archived": true,
    "is_static": false,
    "latest": {
        "archive_org": null,
        "dom": null,
        "favicon": "favicon.ico",
        "git": null,
        "media": null,
        "pdf": null,
        "screenshot": null,
        "singlefile": null,
        "title": "Vibecoding Photoshop: Time and Pressure - Andr\u00e9 Klein Dot Net",
        "warc": null,
        "wget": "andreklein.net/vibecoding-photoshop-time-and-pressure/index.html"
    },
    "link_dir": "/data/archive/1791324472.35201",
    "newest_archive_date": "2026-10-06T22:10:05.436794+00:00",
    "num_failures": 0,
    "num_outputs": 6,
    "oldest_archive_date": "2026-10-06T22:09:57.862523+00:00",
    "path": "/vibecoding-photoshop-time-and-pressure/",
    "schema": "Link",
    "scheme": "https",
    "snapshot_id": "824db771-b456-4a33-8358-49a448b4b264",
    "sources": [
        "/data/sources/1791324472-import.txt"
    ],
    "tags": null,
    "tags_str": "",
    "timestamp": "1791324472.35201",
    "title": "Vibecoding Photoshop: Time and Pressure - Andr\u00e9 Klein Dot Net",
    "updated": "2026-10-06T22:09:57.862071+00:00",
    "updated_date": "2026-10-06 22:09",
    "url": "https://andreklein.net/vibecoding-photoshop-time-and-pressure/"
}