Conversation
…ge generation This commit introduces the `tauri-plugin-atomic-diffusion`, enabling local image generation through a stable-diffusion.cpp server. Key changes include: - Updated `DEVELOP.md` to document new data directories for diffusion models and generated images. - Modified `Makefile` to include tests for the new diffusion plugin. - Enhanced the server to handle image generation requests at the `/images/generations` endpoint. - Added new routes and components in the web app for managing image generation settings and outputs. - Updated various scripts to support the new diffusion functionality, including manifest handling and baseline synchronization. This feature enhances the application's capabilities for local image generation, providing users with more robust tools for media creation.
…n testing - Introduced `DownloadStage` to provide feedback during download retries, improving user experience by indicating connection attempts and retries. - Updated download management to handle stage updates without affecting progress reporting. - Added `test_proxy_connection` command to validate proxy configurations, ensuring users receive clear feedback on connection issues. - Enhanced error handling in the download process to differentiate between network failures and proxy-related issues, improving overall reliability and user guidance. - Updated relevant tests to cover new functionality and ensure robustness in download handling.
- Added `ModelLoadStage` type to track loading stages, enhancing user feedback during model loading. - Implemented `cancelLoad` method in `AIEngine` to allow users to cancel ongoing model loads, returning a promise that resolves to indicate success or failure. - Updated `load` method to accept `ModelLoadOptions` for progress reporting. - Enhanced tests to cover new cancellation functionality and ensure correct behavior during model loading and cancellation scenarios. - Updated documentation to reflect changes in model loading and cancellation processes.
Conflicts: - docs/decisions/INDEX.md: keep both 2026-09-14 llama.cpp records (section now 53) and bump the total to 258 records. - web-app/src/lib/chat-skill-injection.ts: keep main's fetch-only skill cache (usability re-decided per call, cleared via agentSkillRevision) and the branch's removal of the required-tools check, so loadChatSkillDetails still takes (names, cache). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
- Replaced SparklesIcon with ImageIcon in NavMain and ImageSetupDialog for better visual representation. - Updated ImageEmptyState to use IconPhoto, improving the empty state display. - Refined ImageArtifactDownloadButton and ImageJobProgress for better user experience and layout consistency. - Enhanced ImageModelSelector and ImagePromptForm with improved styling and functionality. - Introduced ImageField and ImageFieldHint components for better form handling and user guidance. - General UI improvements across image-related components for a more cohesive design.
- Introduced `ResolvedInputs` struct to encapsulate image inputs for various workflows. - Updated `build_img_gen_request` to utilize `ResolvedInputs`, improving clarity and maintainability. - Implemented `resolve_inputs` function to convert request images into base64 format, ensuring compatibility with the server. - Enhanced `ImageGenerateRequest` to include structured image sources, replacing raw paths with `ImageSource` enum. - Updated session and state management to support new image workflows, including reference-guided generation. - Improved UI components to reflect new workflow capabilities and ensure a cohesive user experience. - Added tests to validate new functionality and ensure robustness in image processing workflows.
- Added functionality to check for engine updates based on the manifest, improving user experience by notifying users of available updates. - Enhanced the MediaSettingsPanel to display update options, including a button to force check for updates and a notification for up-to-date status. - Updated the image generation store to manage engine update state, including checking and updating the engine based on the latest manifest. - Improved localization files to support new update-related messages across multiple languages. - Added tests to validate the new update functionality and ensure correct behavior in various scenarios.
|
are remote sdcpp endpoints supported via adding a url:port?? my image gen pc is not my local one so remote access would be nice. |
|
This is a lot of engine, and the engine itself is in good shape. Before the findings, the parts I went looking for problems in and didn't find any:
VerifiedYour branch merges cleanly onto current
Five things. The first two are what I'd want before this merges. 1. The description is the unedited templateFor a 360-file, +44,948 / −860 diff carrying 13 decision records, the PR body is: …with all three self-checklist boxes unchecked. The ADRs are excellent and do carry the reasoning, but they're thirteen separate files — nothing here tells a reader (or Lead with the retroactive-sounding bits that aren't obvious from the title: that a whole new Tauri plugin is in the tree, that model loads can now be cancelled, that engine updates now ask first. 2. Prettier: 87 files, and 6 of them were clean before
That leaves 87 that are this PR's. Most are new files, and it's mostly one shape — union types written on one line past the print width: // src/services/diffusion/types.ts:117
export type DiffusionModelState = 'unloaded' | 'loading' | 'loaded' | 'unloading' | 'failed'These six are worth calling out separately, because they were clean on
3.
|
cloudflared becomes an externalBin sidecar on macOS, Windows and Linux. Unlike bun/uv it is pinned to a release (2026.9.1) and verified before it can reach a bundle: the release asset against the digest GitHub reports, and on macOS the executable inside the .tgz against the checksum in Cloudflare's release notes. macOS gets a real lipo of both slices. A stamp lets later runs skip the network; a missing, truncated or placeholder file, or a new pin, reinstalls from the re-hashed cache or downloads again. make download-cloudflared (yarn download:cloudflared) runs only this step; yarn download:bin, the first step of every dev target and of the release jobs, includes it. CI checks the universal binary's architectures on macOS, the file on Linux, and on Windows that the sidecar still carries Cloudflare's valid Authenticode signature, which is kept on purpose. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…he Local API Server Remote access: a manager with one supervisor task per run starts the bundled cloudflared, shows the URL only after it is registered and a public probe of /openapi.json (edge by SNI first, then the hostname) proves it reaches this server, retries once over HTTP/2, and reports every transition as remote-access:status. stop_server, RunEvent::Exit and restart_app take the tunnel down; a pid journal (plus PDEATHSIG on Linux) recovers an orphan after a crash. The user's own ~/.cloudflared/config.yml and TUNNEL_* variables are switched off for our process. Host validation is unchanged. The proxy appends one dynamic group per request: the live tunnel's hostname and the local address of the accepted socket. That lets a tunnel and a LAN client through without Trusted Hosts input and cannot be forged by a DNS-rebinding page. get_lan_addresses lists dialable IPv4 addresses for display. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A desktop-only settings page with two cards. Remote access starts the Cloudflare quick tunnel (starting the server first when needed), shows the API base URL with copy and a QR code, and can start automatically whenever the server comes up. LAN access rebinds the server on 0.0.0.0 and lists the addresses to dial. The API key stays optional: starting Remote access without one asks once, offering a generated key; both cards warn while no key protects the API. Tunnel status lives in an in-memory store fed by the remote-access:status event. Adds react-qr-code (approved), the four desktop-only commands to the IPC contract allowlist, en and ru copy, and tests for the helpers, hooks, store migration and the page. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…nel and on the LAN Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Brings Settings → Remote & LAN (Cloudflare quick tunnel + LAN access for the Local API Server) into the image generation branch. Conflicts: core/server/mod.rs keeps both new modules (dynamic_hosts, images_route); the IPC contract allowlist keeps the four new desktop-only commands and drops stream_local_http, which this branch already registers on mobile too. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Introduced `VAE_TILING_AREA` constant to manage VAE tiling based on output size, enabling efficient memory usage during image generation. - Updated `build_img_gen_request` to include VAE tiling parameters when output dimensions exceed the defined area. - Enhanced `ProgressTracker` to accurately track and log job progress, including handling of VAE tile announcements and sampled steps. - Added tests to validate the new VAE tiling behavior and ensure correct progress tracking during image generation jobs. - Improved error handling and logging for better diagnostics during server interactions.
|
Second pass, and the branch has moved a long way since the first one — a whole second feature landed on it. The Remote & LAN work is genuinely good; my main ask this round is about where it lives, not what it does. VerifiedBranch merges cleanly onto current
I verified the cloudflared pins against the real assets, since that block is the whole supply-chain argument. All seven values match, byte for byte:
The two-pin design for macOS is right and the comment explaining why the release-notes checksum can't go in What I can't check from here: the macOS and Windows builds (Linux container), a live tunnel (no egress to 1. The scope problem is no longer a nit — please split thisSince my last comment the branch gained That is a security-relevant feature, and it is now sitting inside a PR called Feat/image generation sdcpp. Nobody triaging that title will know they are signing off on public ingress. The diff is 412 files and +54,395 / −876; the ingress change is a few hundred lines somewhere inside it. The work itself I have few notes on — see section 6. It's the packaging. 2. Findings 1–5 from last round are all still openNone of them moved, and two got bigger:
3.
|
mirror-sdcpp.yml ran for master-849-d04e895 and moved atomic-chat-conf/backends/sdcpp-manifest.json to the conf release (download_base), with the sha256/size of the re-signed macOS and Windows archives. Regenerated with `make sync-upstream-baseline` so the offline fallback installs the same signed builds instead of leejet's originals. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Third pass. One commit since last round — VerifiedBranch still merges cleanly onto current
The regenerated baseline really is a snapshot. I fetched the live All nine pinned assets resolve on the mirror, and the sizes match byte for byte.
The five marked verified I streamed in full through The signing story is internally consistent, which is the part I'd have expected to be muddled. Exactly five hashes moved, and they are exactly the archives that carry a code signature — 1. The commit message claims slightly more than the diff does
True for five of the nine. For the other four it's the opposite, and provably so: Nothing is wrong with the change; re-hosting a Linux zip unchanged is the right amount of work. It's the record I'd like precise, because this is the commit someone will read in two years when they want to know what the mirror guarantees. 2. Nothing anywhere tests the sdcpp mirrorThis is the finding I'd act on. The llamacpp mirror has two independent guards:
The sdcpp side has neither. it('validates the bundled baseline', () => {
const baseline = getBaselineSdcppManifest()
expect(baseline.tag_name).toMatch(/^master-\d+-[0-9a-f]{7}/)
expect(baseline.assets.map((a) => a.backend)).toContain('macos-arm64')
})Tag shape and one backend name. It never looks at That gap didn't matter before this commit, because without 3. Round 2's findings are all still open
4. A wrinkle on the Prettier finding
The two are also emitted in two different styles from the one script — sdcpp as raw JSON (double-quoted keys, no trailing commas), llamacpp as single-quoted objects on one line each. Neither matches 5. This branch and #303 have diverged on exactly this file
Write the description, split the tunnel work, and add the mirror contract test, and the pinning itself I have no notes on — nine-for-nine on size and five-for-five on digest is a better result than I expected to get 🎨 Generated by Claude Code |
Describe Your Changes
Fixes Issues
Self Checklist