Skip to content

Releases: oxmah/espresso

1.2.0 - Integrated title bar

Choose a tag to compare

@oxmah oxmah released this 22 Jul 21:12

The window owns its top band now. The stock Windows title bar - a generic black slab here, a white one on light-theme machines - is gone. Espresso draws its own: the animated brand on the left, Library and Settings on the right, and window controls rendered with the system icon font, pixel-identical to the native ones.

What makes this more than a repaint: the window stays a perfectly normal Win32 window, and Espresso answers the two non-client messages instead (WM_NCCALCSIZE, WM_NCHITTEST) - the same route Windows Terminal and Chrome take. So everything that makes a window feel native still is native: the DWM shadow, minimize/restore animations, Aero Snap and Win+arrow snapping, rounded corners, the Snap Layouts flyout when you hover the maximize button (Windows 11), Alt+Space, double-click to maximize, resizing from every edge.

Dialogs keep their native caption, now tinted dark through DWM - no more white title bars over a dark app when Windows runs in light theme.

If anything misbehaves with your setup, set ESPRESSO_NATIVE_TITLEBAR=1 to bring the stock decoration back.

Download

Espresso-Setup-1.2.0-win-x64.exe (48 MB) - recommended. Per-user install, no admin rights, clean uninstaller. Uninstalling never touches %APPDATA%\Espresso, so downloaded models and settings survive.

SHA-256  bfdfdc22e8acdfcdecd23560d8e0e2b169cb4884334d61bcb2912f7e1ac5722a

Espresso-1.2.0-win-x64.zip (69 MB) - portable alternative. Extract it fully, then run Espresso\Espresso.exe.

SHA-256  9a38a33b211998c9b318f1df1ce540d8f8847ef42c3631a6ec77540d49ffb16a

With the zip, do not launch the exe from inside the zip viewer, and do not copy Espresso.exe out on its own. Windows then extracts it without its _internal folder and it dies with "Failed to load Python DLL … python311.dll". The exe and _internal must stay side by side - for a Desktop launcher make a shortcut, not a copy. The installer has none of these traps.

Verify a download before running it, in PowerShell:

Get-FileHash .\Espresso-Setup-1.2.0-win-x64.exe -Algorithm SHA256

Both builds are unsigned, so Windows may show a SmartScreen prompt on first run ("More info" → "Run anyway").

What changed in 1.2.0

  • Integrated title bar, as above. The behaviour was verified against the real window message loop (SendMessage(WM_NCHITTEST) probes, client/window rect deltas), including at 250 % display scaling; 21 new tests pin the geometry, the hit-testing contract and the platform gating.
  • Dark native captions on every dialog, applied through DWM as each window opens.
  • Autohide taskbar respected when maximized: one pixel is reserved on the taskbar's edge so it can still slide back in - the classic "my taskbar never reappears over a maximized app" bug.
  • Build hardening (affects source builds only): the packaging step now calls Windows' bsdtar by absolute path. A GNU tar earlier in the caller's PATH silently produced an uncompressed tar misnamed .zip, 2.5x the size.

What's inside

  • Cloud (OpenAI): full gpt-image control (size, quality, moderation), INSIST mode, THINKING mode, live cost estimate.
  • Local (stable-diffusion.cpp): one-click runtime installer with NVIDIA auto-detection, SDXL / Flux 1 / Flux 2 / SD3 multi-file support, VRAM-aware CPU offload, sampler presets, live step counter.
  • Model library: curated catalog of 25 pre-vetted models + free-text search on CivitAI and HuggingFace.
  • Task queue with parameter snapshots, drag-reorder, visible running item, pause-on-error.
  • API keys stored in Windows Credential Manager (DPAPI), redacted logs, sanitized downloads.

UI in English and French, switchable in Settings. To run or build from source, see the README.

License: MIT.

Espresso! 1.1.1 - local runtime install fixed

Choose a tag to compare

@oxmah oxmah released this 18 Jul 23:18

Bug fix release. If you have an NVIDIA card and a working local install, nothing here affects you.

If you do not, 1.1.0 could not set up local generation at all. Upstream renamed the CPU build of stable-diffusion.cpp from -bin-win-avx2- to -bin-win-cpu-, and Espresso was still looking for the old name — so the download found no matching asset and the install failed outright.

That is not the narrow case it sounds like. CPU is the last rung of the detection ladder: NVIDIA via nvidia-smi, else AMD/Intel via DXGI, else CPU. Machines without a discrete GPU land there, and so do virtual machines, remote sessions, and any box where the DXGI probe fails. None of those users chose CPU — they were sent to it.

Download

Espresso-Setup-1.1.1-win-x64.exe (48 MB) — recommended. Per-user install, no admin rights, clean uninstaller. Uninstalling never touches %APPDATA%\Espresso, so downloaded models and settings survive.

SHA-256  c8607b844c28d3d765781c7f8aa7d7d1bafd9eac8f1e9953dfc9910769eb85c4

VirusTotal: 0 / 67 - no detections. Being a single file, the installer is scannable end to end; the zip is not, because VirusTotal does not inspect multi-file archives over 3 MB. The denominator is 67 rather than the usual 68 because one engine timed out instead of returning a verdict.

Espresso-1.1.1-win-x64.zip (69 MB) — portable alternative. Extract it fully, then run Espresso\Espresso.exe.

SHA-256  bb63a6d46693d9c8bddf043791d8ea8d6d57473c161b2cbf002ab69b2612697d

With the zip, do not launch the exe from inside the zip viewer, and do not copy Espresso.exe out on its own. Windows then extracts it without its _internal folder and it dies with "Failed to load Python DLL … python311.dll". The exe and _internal must stay side by side — for a Desktop launcher make a shortcut, not a copy. The installer has none of these traps.

Verify a download before running it, in PowerShell:

Get-FileHash .\Espresso-Setup-1.1.1-win-x64.exe -Algorithm SHA256

Both builds are unsigned, so Windows may show a SmartScreen prompt on first run ("More info" → "Run anyway").

What changed in 1.1.1

The CPU runtime install is fixed, as described above. Nothing else about CPU generation changed — if your runtime was already installed, it was always working.

Picking the right binary out of the archive no longer depends on luck. Upstream also renamed sd.exe to sd-cli.exe and now ships sd-server.exe beside it. Espresso identified the binary with "starts with sd, ends with .exe" — which both files satisfy, at equal priority, so which one got installed came down to the order of entries inside the zip. It picks the right one today by accident. sd-server is an HTTP server: handed command-line arguments it would have failed in a way nobody could have diagnosed from the message. Known names are now ranked explicitly, an unrecognised sd-* binary is still accepted at the lowest rank so a future rename degrades instead of breaking, and the server is refused at any rank.

Groundwork for Linux, inert on Windows: the installer now understands extension-less binaries and versioned shared objects, restores the execute bit that zip extraction drops, and follows the XDG base directory for settings. There is no Linux build yet, and one caveat is already known — upstream ships no CUDA build for Linux, so NVIDIA cards there would run through Vulkan.

Sixteen tests were added, holding the real upstream asset names. If stable-diffusion.cpp renames its releases again, those tests fail before any user does.

What's inside

  • Cloud (OpenAI): full gpt-image control (size, quality, moderation), INSIST mode, THINKING mode, live cost estimate.
  • Local (stable-diffusion.cpp): one-click runtime installer with NVIDIA auto-detection, SDXL / Flux 1 / Flux 2 / SD3 multi-file support, VRAM-aware CPU offload, sampler presets, live step counter.
  • Model library: curated catalog of 25 pre-vetted models + free-text search on CivitAI and HuggingFace.
  • Task queue with parameter snapshots, drag-reorder, visible running item, pause-on-error.
  • API keys stored in Windows Credential Manager (DPAPI), redacted logs, sanitized downloads.

UI in English and French, switchable in Settings. To run or build from source, see the README.

License: MIT.

Espresso! 1.1.0 - MIT

Choose a tag to compare

@oxmah oxmah released this 18 Jul 16:39

Espresso! is now MIT licensed. Use it, fork it, ship it commercially - just keep the copyright notice.

Download

Espresso-Setup-1.1.0-win-x64.exe (48 MB) - recommended. Per-user install, no admin rights, Start Menu shortcut, clean uninstaller. Uninstalling never touches %APPDATA%\Espresso, so downloaded models and settings survive.

SHA-256  62d4a1ba9d9c2a9caebd7f7e705d4a127a30da21956d668ec022f3b4c7c73e46

VirusTotal: 0 / 68 - being a single file, the installer is scannable end to end. The zip is not: VirusTotal does not inspect multi-file archives over 3 MB, so a report on it would tell you nothing about the code that runs.

Espresso-1.1.0-win-x64.zip (69 MB) - portable alternative. Extract it fully, then run Espresso\Espresso.exe.

SHA-256  f87da8e596ee9941ec90871904fc1505e783494eee597a02735801c19bd4e461

With the zip, do not launch the exe from inside the zip viewer, and do not copy Espresso.exe out on its own. Windows then extracts the exe without its _internal folder and it dies with "Failed to load Python DLL … python311.dll". The exe and _internal must stay side by side - for a Desktop launcher make a shortcut, not a copy. The installer has none of these traps.

Verify a download before running it, in PowerShell:

Get-FileHash .\Espresso-Setup-1.1.0-win-x64.exe -Algorithm SHA256

Both builds are unsigned, so Windows may show a SmartScreen prompt on first run ("More info" → "Run anyway"). Code signing is on the roadmap.

What changed in 1.1.0

The license moved from PolyForm Noncommercial 1.0.0 to MIT. That was the point of the release; everything else here follows from it.

The brand font had to go. Espresso bundled Coffee Amore, a script face that is freeware for noncommercial use only. Shipping it inside an MIT package would have granted a commercial right that was not mine to grant - anyone taking the license at face value would have infringed the font's terms without ever being told. It is gone from the repository and from the executable, along with its loader. Nothing changed on screen: the animated GIF has been the nominal header for a while, and bold Segoe UI was already the fallback behind the fallback.

Dependencies were checked, not assumed. Everything Espresso links against is permissively licensed (BSD-3, MIT, Apache-2.0), with one exception worth naming: Qt, via PySide6, is LGPL-3.0. It is dynamically linked and its DLLs sit as separate, replaceable files in _internal/, which is what the LGPL asks for. If you redistribute a modified build, preserving that arrangement is your obligation. stable-diffusion.cpp (MIT) is downloaded at runtime rather than bundled, and the models the catalog points to keep their own licenses - several are noncommercial, so check before selling what you generate.

The version number was lying. 1.0.0 announced itself as 0.1.0 in its startup log and in the User-Agent it sent to the GitHub API: three copies of the number lived in utils.py, pyproject.toml and build.bat, and nothing compared them. There is now one source of truth and a test that keeps the others in step.

No functional change to generation, the model library, or the queue. If 1.0.0 works for you, 1.1.0 works identically - the reason to upgrade is the license.

What's inside

  • Cloud (OpenAI): full gpt-image control (size, quality, moderation), INSISTER mode (retry through moderation until N images), THINKING mode (Responses API orchestrator), live cost estimate.
  • Local (stable-diffusion.cpp): one-click runtime installer with NVIDIA auto-detection, SDXL / Flux 1 / Flux 2 / SD3 multi-file support, VRAM-aware CPU offload, sampler presets, live step counter.
  • Model library: curated "Selection Espresso" catalog (25 pre-vetted models) + free-text search on CivitAI and HuggingFace.
  • Task queue with parameter snapshots, drag-reorder, visible running item, pause-on-error.
  • API keys stored in Windows Credential Manager (DPAPI), redacted logs, sanitized downloads.

UI in French and English, switchable in Settings. To run or build from source, see the README.

License: MIT.

Espresso! 1.0.0

Choose a tag to compare

@oxmah oxmah released this 17 Jul 22:26

First public release. Refreshed 2026-07-18: the package lost three quarters of its weight, gained an installer, and the English UI is now actually English.

Download

Espresso-Setup-1.0.0-win-x64.exe (48 MB) — recommended. Per-user install, no admin rights, Start Menu shortcut, clean uninstaller. Uninstalling never touches %APPDATA%\Espresso, so downloaded models and settings survive.

SHA-256  01a6955f56549448e389954dfd5b1d1b6bd5985f1fd72f2a0d73809d4669e85a

VirusTotal: 0 / 68 — being a single file, the installer is scannable end to end. The zip is not: VirusTotal does not inspect multi-file archives over 3 MB, so a report on it would tell you nothing about the code that runs.

Espresso-1.0.0-win-x64.zip (69 MB) — portable alternative. Extract it fully, then run Espresso\Espresso.exe.

SHA-256  b4d60ca4d29af1aeee9e459b8cf59ed5d875bf2ba03a188807e251e1f1b2f458

With the zip, do not launch the exe from inside the zip viewer, and do not copy Espresso.exe out on its own. Windows then extracts the exe without its _internal folder and it dies with "Failed to load Python DLL … python311.dll". The exe and _internal must stay side by side — for a Desktop launcher make a shortcut, not a copy. The installer has none of these traps.

Verify a download before running it, in PowerShell:

Get-FileHash .\Espresso-Setup-1.0.0-win-x64.exe -Algorithm SHA256

Both builds are unsigned, so Windows may show a SmartScreen prompt on first run ("More info" → "Run anyway"). Code signing is on the roadmap.

What changed on 2026-07-18

The package was four times too big. --collect-all PySide6 was shipping the entire Qt distribution regardless of what the app imports: 627 MB of the 700 MB installed, including a full Chromium (Qt6WebEngineCore.dll, 195 MB), its resource paks (101 MB), Qt's translation catalogues (59 MB, while the app ships its own i18n) and the QML runtime (22 MB, for a pure-QtWidgets UI). The app imports exactly three PySide6 submodules. Letting PyInstaller's per-module hooks do their job:

before after
installed 700 MB / 3804 files 164 MB / 288 files
download 266 MB 69 MB
startup 5-15 s of unpacking 719 ms

Mixed-language UI. tr() falls back silently — a key missing from the English catalogue shows the French source and nothing breaks, so the gaps accumulated invisibly. An AST audit found 115 of 319 keys untranslated, 39 strings never routed through tr(), and 42 stale entries. All fixed, and the runtime language switch — which used to reach only about fifteen widgets of the main window — is now a generic pass over the whole widget tree. Number formatting follows the chosen language too: an English UI on a French Windows no longer renders CFG as 7,0.

Silent settings loss. An unreadable config.json sent the app back to defaults with nothing in the log, and the next save overwrote the file — output folder, language, format and presets gone for good. A UTF-8 BOM was enough to trigger it (Notepad and PowerShell both write one). BOMs are now tolerated, and a genuinely unreadable config is moved to config.json.corrupt with the reason logged.

Five test suites lock these bug classes: catalogue coverage, live-switch completeness, number formatting, unreadable-config handling, and the existing visibility regressions.

What's inside

  • Cloud (OpenAI): full gpt-image control (size, quality, moderation), INSISTER mode (retry through moderation until N images), THINKING mode (Responses API orchestrator), live cost estimate.
  • Local (stable-diffusion.cpp): one-click runtime installer with NVIDIA auto-detection, SDXL / Flux 1 / Flux 2 / SD3 multi-file support, VRAM-aware CPU offload, sampler presets, live step counter.
  • Model library: curated "Selection Espresso" catalog (25 pre-vetted models) + free-text search on CivitAI and HuggingFace.
  • Task queue with parameter snapshots, drag-reorder, visible running item, pause-on-error.
  • API keys stored in Windows Credential Manager (DPAPI), redacted logs, sanitized downloads.

UI in French and English, switchable in Settings. To run or build from source, see the README.

License: source-available under PolyForm Noncommercial 1.0.0 — free for any noncommercial use. Not an OSI-approved license, and I don't claim otherwise.