Store chat images separately; JPEG for large PNGs; gzip/brotli responses
Images of messages (pasted images, screenshots, generated images) were base64 inside the message JSON, so opening a chat downloaded all of them at once (66 MB for a chat with 120 screenshots). They now live in a `blobs` table, addressed by SHA-256; messages keep a reference (blob, size). The UI loads them from /api/blobs/<hash> lazily with an immutable cache header, the runner fills the bytes in before model requests, JSON exports stay self-contained. - Store::add_message moves inline images out; large opaque PNGs become JPEG (q85) when smaller. Older chats are converted once at start-up in the background, unused images are removed (also after deleting a chat) and the database is vacuumed when that frees 32 MB or more. - Responses are compressed with gzip/brotli (not images, SSE streams or binary downloads). Example (copy of production): chat load 66 MB -> 1.5 MB (370 KB brotli), database 90 MB -> 27 MB. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6d656a355d
commit
e8e455b779
27 files changed
+474
-31
No files matched your search
@@ -3,6 +3,18 @@
|
||||
All notable changes to CodeCraft. Versions follow [Semantic Versioning](https://semver.org/);
|
||||
until 1.0, minor versions may contain breaking changes.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Changed
|
||||
|
||||
- **Chats with many images load much faster:** images (screenshots, generated images, pasted
|
||||
images) are stored separately instead of inside the messages and load on demand when they
|
||||
scroll into view, cached by the browser. Large PNGs without transparency are stored as JPEG.
|
||||
Older chats are converted once on the first start; the database usually shrinks a lot.
|
||||
Example: a chat with 120 screenshots loads 1.5 MB instead of 66 MB.
|
||||
- **Compressed responses:** the API and the web UI are sent with gzip/brotli (not images,
|
||||
downloads or live streams).
|
||||
|
||||
## [v202611-00009] – 2026-11-09
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in new issue
Block a user