Journal

An image editor that respects the pixels you keep

A real masked object removal finished in 24.39 seconds and preserved every unselected decoded pixel exactly.

Vlad / experimentos.
The boundary

The recorded check concerns one masked edit; generative interior quality and wider editing coverage need separate evaluation.

The question

A masked edit should leave the protected part of an image alone. The studio project checked a real object removal, compared decoded pixels outside the mask, and traced the edit through a working tool flow.

From the original notebook

Application checkout: WORKSTATION/qwen-studio. Private Tailscale URL: private workstation service Persistent user service: qwen-studio.service, bound to the Tailscale interface only. Source publication: groxaxo/qwen-studio (private). The source repository contains the editor, validation code and sanitized operational docs; it excludes user media, local jobs, model weights, provider outputs and credentials.

Both edit and text-to-image generation use the existing Qwen Image2.1 INT8 ConvRot checkpoint, native TextEncodeQwenImage21, Euler/simple25, CFG1, GPU2. Editing supplies the source image as vision input and reference VAE latents. No Edit2511 checkpoint needed.

The image editor offers brush, eraser, lasso, rectangle, undo/redo, zoom, upload/drop, prompt review, image history, original comparison, PNG export, seed and LoRA selection. Masked edits preserve all pixels outside the selection exactly through inward-feathered compositing. Original output dimensions are retained. Changed interior pixels are generative.

Edit prompts use the user’s Edit Prompt Enhancer v2 policy with deepseek-chat and image input; the provider currently resolves that alias to deepseek-flash. Spanish instructions are rewritten into English descriptive prose while literal image text follows separate language rules. Text-to-image prompts use the requested8bit MLX enhancer on op@op-1, with the Mac’s existing OCR MLX environment. The enhancer is a text rewriter; image pixels are rendered by Qwen2.1 on Linux. Model process exits after each rewrite to release memory.

Live validation: a masked shirt recoloring completed in24.36s at1024 square-equivalent; all unselected pixels compared exactly equal, and output dimensions remained1024x1024. The Mac rewrite completed in32.93s and the following T2I render in16.04s. These are observed single-request timings, not guarantees for higher resolutions or cold starts.

A second real editing check removed the generated blue mug and its shadow, reconstructed the wooden tabletop, and preserved all unselected pixels exactly in24.39s. Its output was visually reviewed. Local evidence is in the app’s docs/removal-validation.json.

Four backend tests passed. Playwright verified upload, selection, undo/redo, prompt review, Mac enhancement and generation. Desktop1586x992 and mobile390x844 had no horizontal overflow or browser exceptions. Image-generated concept, screenshots and live outputs are kept locally in the app’s docs directory; exact prompts and images are not committed here.

Frontend and backend persist jobs and data locally, reject cross-origin mutations, keep credentials server-side, and use the existing shared render admission lock. No disabled MCP registration was started or enabled. This is an app service, not a new MCP server.

The published source documents deployment and release validation in docs/operations.md. A publication-time backend check completed with four passing tests and the browser edit/mask/undo/redo/enhancement/mobile/MLX generation QA passed; the running service was active on the private Tailnet endpoint.

Keep exploring

Original experiment record. Workstation paths have been generalized. Detailed measurements below retain their original workload and validation boundaries.

Follow the evidence

From notebook to finding.

This story is based on the archived experiment at revision 6550ead3945b. Original timestamps, workloads and qualification limits belong to that record.

Original GitHub record
Supporting notebooks (1)

GitHub source links require access to the private archive. The readable notes and aggregate chart exports are included here.

Back to the journal Follow via RSS