iLab CONJURE: A Local-First Image Workbench for GPT Image and Gemini
GPT-image-2 AI WebUI Codex Responses OpenAI API Chip An AI image generation WebUI workbench for GPT-image-2 with Codex Responses and OpenAI-compatible API support, shared gallery references, multi-type quick chips, prompt templates, concurrent tasks, and local queue management.
At a glance
- What is it?
- iLab CONJURE is a Python and FastAPI image generation workbench that runs on 127.0.0.1:8787, keeps its state in local SQLite and folders, and can talk to GPT Image or Gemini through either an OpenAI-compatible API or a local Codex OAuth session. The API path is the one the README tells you to use.
- Who is it for?
- Adopt iLab CONJURE if you want a self-hosted image workbench with a queue, a searchable history library and a CLI, and you are willing to run Python 3.11 with hash-pinned dependencies behind 127.0.0.1:8787. Do not adopt it if you need an official, stable OpenAI integration, a hosted multi-tenant service, or a signed and notarized macOS build today.
- Can I use it commercially?
- Yes, with strict conditions. AGPL-3.0 is a network copyleft licence: if people use a modified version over a network, for example as a hosted service, you must offer them its source code under the same licence.
- Is it still maintained?
- Yes. The repository last received commits 7 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 25, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What iLab CONJURE actually solves
Most image generation happens in a chat box. You type a prompt, you get a picture, and the prompt is gone. Generating a consistent set, reusing a reference image, or finding last week's result means keeping your own notes. iLab CONJURE is built around that gap. It is a local-first workbench that stores tasks, images and metadata on your own machine and gives you a gallery, prompt templates, chips and a paginated history library on top of the generation call.
The audience is narrow and specific. It is for someone who runs image generation on their own hardware, wants the OpenAI-compatible API path rather than a vendor's own UI, and needs the same prompt or reference image across many runs. The README is explicit that teams, shared workstations and anything that might be exposed publicly should use the OpenAI-compatible API mode, not the local OAuth path. The CLI exists for the same person who wants the same pipeline from a script.
There is a naming wrinkle worth knowing before you search for it. The project was originally called iLab GPT CONJURE and the repository was ilab-gpt-conjure. From v0.7.0 it was renamed to iLab CONJURE and ilab-conjure, but the README states that installer packages, program filenames and the user data directory still use the old name so that upgrades do not create a new data directory. That is why the release assets are still named iLab-GPT-CONJURE-macos-arm64-0.8.3.dmg and the app bundle is still iLab GPT CONJURE.app.
The mechanism: a FastAPI server, SQLite history and a queue
The architecture visible in the repository is a Python package named codex_image with a FastAPI application inside codex_image/webui. pyproject.toml pins fastapi==0.136.1, uvicorn==0.46.0, python-multipart==0.0.32, httpx==0.28.1 and Pillow==12.3.0, and exposes a console script called codex-image that maps to codex_image.cli:main_entry. So the same process serves the browser UI and the command line, and there is no separate daemon to supervise.
The front end is not a framework application. package.json builds two bundles with esbuild: codex_image/webui/frontend/src/main.ts becomes codex_image/webui/static/app.js, and history.ts becomes history.js. Konva is a runtime dependency, which lines up with the README's description of a layered image editor with erase, layer thumbnails and locked-aspect transforms. The README also states that the generation page loads recent tasks and media on demand, that hidden galleries and templates only render when opened, and that the responsive workspace is driven by CSS Grid and container queries. That is a deliberate choice: the page stays light by rendering late rather than by shipping a heavy component tree.
State lives in files, not in a service. The README says settings, the shared gallery, input images, output images, the task database and logs are all written into the data directory. The history page is described as using SQLite with pagination, search and filtering. Tasks can be favourited, tagged, and filtered by favourite, tag or absence of a tag, with a stated cap of 300 selected tasks per bulk operation. Queue management and concurrency are local, and the README mentions single-task multi-image output, partial failure handling and retry. Network settings are global across providers: a request timeout between 1 and 30 minutes with a default of 10, and 0 to 5 retries with a default of 2, applied from the next task onward without a restart, with each retry getting a fresh full timeout window.
Installing from source and generating your first image
The README gives a source install for Python 3.11 or higher. The WebUI dependencies are installed with --require-hashes against requirements-webui.txt, which means pip will refuse a package whose hash does not match the lock file. That is stricter than a normal install and it is the reason a stale virtual environment can fail after an upgrade.
git clone https://github.com/kadevin/ilab-conjure.git
cd ilab-conjure
python3 -m venv .venv
.venv/bin/python -m pip install --require-hashes -r requirements-webui.txtStart the server with the module path the README documents. The host and port are part of the command, not defaults you should assume.
.venv/bin/python -m codex_image.webui.server codex_image.webui.app:app --host 127.0.0.1 --port 8787 --no-access-logThen open http://127.0.0.1:8787/ in a browser. On macOS the README offers open "Start WebUI.command" and on Windows Start WebUI.bat as shortcuts around the same command. If you would rather not build the environment at all, the release page lists a standard macOS DMG for arm64 and x64, a Windows x64 ZIP, and portable zips for macOS arm64 and x64; those bundles ship a packaged CPython, preinstalled WebUI dependencies and prebuilt static assets, and they do not run npm install or rebuild the front end.
Before your first generation, open the settings panel. The README describes four tabs there: API settings, network, language, and storage and notifications. Add a provider card with a Base URL, an API key, an image model, the call style and a concurrency limit, then pick it from the supplier menu on the generation page. The README states that API mode is the recommended path for anything shared, and that Codex Image and Codex Responses are two separate built-in bindings listed in the same menu. If you plan to script instead of click, the console script is codex-image; the README lists generation, reference images, image editing, mask and dry-run as the CLI's supported operations.
The OAuth path is the part to be careful about
iLab CONJURE can reuse a local Codex or ChatGPT OAuth login and call ChatGPT's internal backend endpoints. The README labels this an advanced local mode for personal use, and then says plainly that it is not the API integration OpenAI recommends, that the interfaces may change or stop working at any time, and that account, product or usage rules may affect it. For production, team deployments, public services or anything that needs stability, the README says to use the OpenAI-compatible API mode instead.
That is an unusually direct warning, and it should be read as a design boundary rather than a disclaimer. If your workflow depends on the OAuth channel continuing to work, you have no contract behind it. The API mode is the supported surface; the OAuth mode is a convenience for one person on one machine. The README also tells you not to commit OAuth files, API keys, local input images, generated results, task metadata, the SQLite database or debug logs. Those are exactly the artefacts that make a self-hosted workbench useful, so any backup or sync you build around the data directory has to treat them as secrets.
A second practical limit is the installer. The README states that the standard macOS DMG and the portable zips are not signed and not notarized. On macOS you may need to right-click the app and choose Open, or strip the quarantine attribute on a portable directory:
xattr -dr com.apple.quarantine /path/to/ilab-gpt-conjure_macos_portable_arm64Upgrades are also uneven. macOS standard builds with the update helper can download a signed manifest, verify the DMG SHA256, quit the app, replace it with rollback protection and relaunch, but the README notes this is not a silent background install and that v0.6.1 and earlier standard apps need one manual overwrite first. Windows standard ZIPs are still replaced by hand. Portable packages use a signed latest.json manifest with Ed25519 and SHA256 verification, keep data/ and back up replaced files to .backup/, but you trigger that yourself from the tray or by running the update script.
Where it fits against ComfyUI and a plain API client
The README positions the portable package for people who want a ComfyUI-like extract-and-run experience, and that comparison is the useful one. ComfyUI is a node graph: you compose a pipeline out of samplers, loaders and conditioning nodes, and the graph is the artefact you keep. iLab CONJURE has no node graph. Its unit of work is a task with a prompt, reference images, locked output parameters and a place in a queue, and its reusable artefacts are prompt templates, chips and a shared gallery. If your problem is "which sampler and scheduler combination produces this look", the graph tool is the right shape. If your problem is "run these forty prompts against this reference image and let me find the results later", the task-and-history model is the right shape.
The other realistic alternative is a thin script over the provider's own API. That gives you full control and no UI to maintain, and for a one-off batch it is less work than installing a workbench. What you give up is the history library, the tag and favourite filters, the ZIP export with per-image prompts, and the image editor with layers and erase. The README states that the export writes a ZIP containing either images only or images plus prompts, and that each image carries its own optimized prompt when one exists, falling back to the task's original prompt otherwise. If that fallback matters to you, check it on your own data before you rely on the archive as a record.
The honest boundary: iLab CONJURE is a local tool with a local database and local files. It is not a multi-tenant service, and the README's own guidance pushes shared or public use toward the API mode rather than toward running this as a hosted product.
Licence, maintenance and what an upgrade costs
The licence is AGPL-3.0-only, declared in pyproject.toml as "AGPL-3.0-only" and in the repository as AGPL-3.0. That matters more here than for a library, because this is a network application: if you modify it and let other people reach it over a network, the AGPL's source-availability obligations are the question your own counsel needs to answer, not something this article can settle. Running it privately on your own machine is the case the README is written for.
The repository is not archived, and the last push was on 2026-08-20, which is the same day as the v0.8.3 release. Before that, v0.8.2 landed on 2026-08-10 and v0.8.1 on 2026-08-03. Three releases in under three weeks is a fast cadence, and the README documents a rename at v0.7.0 plus a one-time manual upgrade step for macOS standard apps at v0.6.1 and earlier. Expect to read release notes before upgrading rather than treating it as a background update.
The upgrade cost is mostly in the dependency lock and the data directory. Because requirements-webui.txt carries package hashes, a source install that reuses an old virtual environment may print a dependency install step once, and the README says a failed install should be retried without deleting data/, output/, source-data/, the gallery or the configuration. Standard packages and portable packages already contain matching dependencies, so the friction is concentrated in source installs and in old portable trees. The packaging pipeline is also worth noting: the README states the Portable Release workflow only runs after the CI workflow succeeds on a main push, and that a v* tag additionally produces a signed latest.json using a repository secret. If you fork and want signed updates, you have to reproduce that key handling yourself.
Editorial conclusion
Adopt iLab CONJURE if you want a self-hosted image workbench with a queue, a searchable history library and a CLI, and you are willing to run Python 3.11 with hash-pinned dependencies behind 127.0.0.1:8787. Do not adopt it if you need an official, stable OpenAI integration, a hosted multi-tenant service, or a signed and notarized macOS build today. Before committing, verify the Codex Responses and API Responses web-search flag against your provider, confirm that your provider accepts the Images API or Responses API shape you configure, and test the ZIP export path because the README states a per-image prompt falls back to the task prompt when no optimized prompt exists.
Frequently asked questions
What does iLab CONJURE need to run?
The README requires Python 3.11 or higher, with WebUI dependencies installed from requirements-webui.txt using --require-hashes. Node.js is only needed if you modify TypeScript or CSS and rebuild the front end from source.
Does iLab CONJURE require an OpenAI account?
No. The README recommends the OpenAI-compatible API mode, where you configure a Base URL, API key, image model and call style for a provider of your choice. A local Codex or ChatGPT OAuth mode also exists, but the README describes it as an advanced personal-use path that is not the integration OpenAI recommends.
Where does iLab CONJURE store its data?
The README states that settings, the shared gallery, input and output images, the task database and logs are written to the data directory. Standard packages use ~/Library/Application Support/iLab GPT CONJURE on macOS or %APPDATA%\iLab GPT CONJURE on Windows, while portable packages keep data in a data/ folder next to the launcher.
Can I install iLab CONJURE on macOS without a signing warning?
The README states that the standard macOS DMG and the portable zips are not signed and not notarized. It suggests right-clicking the app and choosing Open, or running xattr -dr com.apple.quarantine on the extracted portable directory.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/kadevin-ilab-conjure)