Changelog, June 24
Summary
- Mask drawing and brushes are now only when the “Edit” API tab is active (demoting the original purpose of the editing app)
- This frees the mouse for a new feature elsewhere: rectangular selection within a canvas image
- Copy the selection (preserving transparency, or flattening)
- Cut the selection (copy, plus clear the image area with transparency)
- Paste to the selection (whatever is pasted is resized to fit, and transparency merged)
- Crop the edits canvas to just that selected area
All via refactored right-click context menus.
- Removed log-to-file stubs
- Better image metadata console logging, showing transmitted dimensions and bytes
- Original file names never transmitted to OpenAI
Changelog, July 6
This is a large new feature set, bringing API call previews, prompt saving and loading, multiple file type saving, and appearance and usability improvements across the app and its code. A major version bump if I had version numbers - and took the time to write a whole new documentation top post forum topic. The only thing I’m holding back from the idea factory is storing user-input API keys and persistent settings.
Summary
- new: File-based prompt authoring and reuse has been expanded across the Generate and Edit tabs. Prompt fields can now load text from files, replace selected text from a file, append file text, and save prompts back out to text or markdown files. Existing destination files can be overwritten or appended to directly from the save flow, making it easier to build reusable prompt libraries without leaving the app.
- new: Prompt text from Calls and Outputs history also can be saved to text files from the context menu.
- new: “Load Files” can pick multiple images, with a dialog for choosing which for the canvas loader and the remainder to “additional images”.
- new: The Calls history can now reopen the exact sent API call preview, and Outputs history can inspect both the originating API call and the returned API response.
- new: API call transparency has been brought into the UI. Generate and Edit now provide in-app API request previews before sending (info button), and history views can reopen the call data later. The Calls history can show the exact request that was sent, while Outputs history can show both the originating request and the returned API response.
- new: Image resaving to many formats, supporting transparency, selected by OS file name picker during save, or right-click options on “outputs” (unrecognized or no extension saves received image)
- new: Paste clipboard images directly to “additional images”
- new: rectangular selection can mark or clear the edits mask via right-click context menu.
- improved: Completely dark-themed drop-downs and text, new image-based scrollbar appearance emitted only when needed (images encoded in code) throughout. Mouse wheel is universal, such as scroll and shift-scroll on the zoomed-in canvas.
- improved: Icon buttons use rendered glyph images for controls such as Undo/Redo and API request preview, making the symbols larger and clearer without increasing button size.
- improved: swap images between additional images and canvas, send a canvas copy or rectangle selection to additional images, making edit composition of multi-image context easy.
- improved: Better canvas context menu organization: globally useful actions like Save Image, Resize Canvas, Reset Mask are available across tabs, while selection-only and brush-only actions appear only where they make sense, and context menu is clipboard content-aware. Significant nomenclature and action refactor.
Developer / under-the-hood notes
- Unified API request preparation so preview dialogs, stored history previews, console logging, and the actual HTTP send all derive from the same truthful request shape for both generate and edit workflows. Added dedicated prepared request surfaces for JSON generate calls and multipart edit calls.
- Centralized prompt text file handling into reusable helpers for bounded streaming reads, Unicode/BOM-aware decoding, shared save dialog behavior, and append separator insertion.
- improved: Large prompt text handling is more practical and less disruptive. Oversized prompt loads are better bounded, streaming, token highlighting is skipped when text exceeds sendable limits, and related UI stalls from coloring very large prompt text have been reduced.
- Generalized one copyable text dialog so it can be reused for API request previews, API response previews, and copy-friendly error dialogs.
- For user-facing underlying API calls, reworked multipart edit preview serialization so uploaded file bodies are represented as explicit metadata strings where file data was transmitted/received. Disclaimer about “edits” http shape shown.
- Supported image formats offered by file dialogs are now more consistent across main image loading and additional edit-image loading, by centralized types.
- Improved aliasing of downsized transparent canvas, avoiding outline-like false artifacts
- use of normalize slider auto-selects its preview checkbox
- 0707-UI: centralize dark combobox, reorg brush slider, new hover for key color picker, loader dialog custom size hint…
Download
ai_image_editor_20260707.pyw 746kB
Environment reminder:
- Python 3.10+ ,
tkinterinstalled default from standard library. pillowandhttpxlibrary modules (no need foropenai).- OPENAI_API_KEY as environment variable, or entered at startup.
- Optional
tiktokenfor prompt token counts, estimates, and token highlighting. - Optional
pywin32on Windows for image clipboard copy via PNG/DIB formats. - OpenAI API, ID verified organization, ready to receive your API requests.

