이 페이지는 아직 번역되지 않았습니다 — 영어 버전을 표시합니다.

AI tools

The AI panel in Frame groups three capabilities: AI Enhance, Tone Matching, and Upscale. They are not equivalent in where they run. AI Enhance sends your preview to the OpenAI API — the only tool in OpenEnlarge that transmits image data outside your computer. Tone Matching and Upscale both run entirely on your device; no image data leaves your machine.

AI Enhance

AI Enhance re-imagines the current Frame preview to reduce noise, dust, and scratches. The result is a creative interpretation of your scan, not a faithful pixel-level restoration: the model may invent detail that was not in the original. Use it for look and feel, not as a ground-truth output.

Before you can use AI Enhance you must add your own OpenAI API key in Settings. Without a key the Enhance button shows the message "Add your OpenAI API key in Settings." and does nothing. OpenEnlarge does not supply or proxy any API key — charges are billed to your own OpenAI account.

Privacy: clicking Enhance sends the current preview image (as a base64-encoded PNG) to the OpenAI API. This is the only point in OpenEnlarge where image data is transmitted to an external server. The data is governed by OpenAI's usage and privacy policies.

When the result arrives it is shown as a thumbnail in the panel. Hold the Hold to compare original button to toggle between the original and the enhanced version for a before/after comparison; release to return to the result. Click the thumbnail to open it full-screen.

Click Download enhanced image… to save the result to disk. The save dialog accepts PNG, TIFF, and JPEG. The file is written at the result's native resolution via api.saveEnhanced(); no upscaling is applied at this stage.

Once you have an enhanced result, an Upscale this result section appears directly below it, letting you run the on-device upscaler on the AI-enhanced image rather than on the raw Frame output. See the Upscale section below for how that works.

Under the hood

API call (api.ts): the front end calls api.aiEnhanceImage(imageBase64, apiKey), which invokes the Tauri command ai_enhance_image. The backend sends the base64 image and the user-supplied API key to the OpenAI API and returns the enhanced result as a base64 string. The source preview captured at call time is stored in the source variable for the before/after toggle (showBefore). Saving uses api.saveEnhanced(outPath, imageBase64, format) → Tauri command save_enhanced. The format type is ExportFormat: { kind: "png" | "tiff" | "jpeg", bitDepth?: 16, quality?: number }.

Tone Matching

Tone Matching imports a reference image and adjusts the current scan's develop parameters to match its white balance, contrast, and saturation. Everything runs locally — no image data leaves your computer.

Click Import reference image to pick any JPEG, PNG, TIFF, or WebP file. A thumbnail of the reference is shown; click it to change the reference at any time.

Once a reference is loaded, click Match to compute the match. The match runs via api.colorMatchParams() on your machine and writes a blended set of develop parameters into the current image's settings as a single undoable step (⌘Z / Ctrl Z to revert).

The Strength slider (0–100 %, default 60 %) blends between the pre-match values and the full-strength match. Dragging it updates the preview live without a backend round-trip — the full-strength match is computed once and stored, then the slider interpolates locally. Committing the slider value adds one undo step.

Click Reset match to restore the parameters to what they were before the match was applied and clear the stored match data. The reset is also a single undo step.

After matching you can continue to adjust any slider in the Frame panel normally. The match only affects a scoped subset of parameters (see hood below) and leaves all other controls untouched.

Under the hood

API call (api.ts): api.colorMatchParams(id, params, refPath, 100) invokes the Tauri command color_match_params with the current image id, its full InvertParams, the reference file path, and strength 100 (full). The backend returns a MatchedParams object — a Pick of InvertParams covering exactly: temp, tint, exposure, contrast, saturation, cg_sh_hue, cg_sh_sat, cg_sh_lum, cg_hi_hue, cg_hi_sat, cg_hi_lum. The front end captures the pre-match values for those same keys into origScoped and stores the full match in matchedFull. The Strength slider blends per-key: blended[k] = origScoped[k] + (matchedFull[k] − origScoped[k]) × (strength / 100). A reference thumbnail is fetched with api.referenceThumb(path) → Tauri command reference_thumb.

Upscale

Upscale runs an on-device super-resolution model to enlarge your developed image to 4K or 8K on the longest side. The model downloads once and runs entirely on your machine; no image data is uploaded at any point.

The first time you open the AI panel, OpenEnlarge checks whether the upscaler model is installed. If it is not, a prompt shows the approximate download size in MB. Click Download upscaler to fetch it; a progress bar shows download progress (bytes received streamed via the upscale://download-progress Tauri event).

Once the model is installed, choose your target resolution with the 4K / 8K segment control (4K = 3840 px; 8K = 7680 px on the longest side; 8K is the default). Click Upscale to start. A progress bar tracks tile completion. The result is shown as a preview in the panel with its output pixel dimensions.

If the source image is already 8K or larger on its longest side, upscaling will not add detail (the app notes this). Best results come from smaller sources where the model can genuinely reconstruct fine detail.

Click Save upscaled image… to save the result. The save dialog accepts PNG, TIFF (16-bit), and JPEG.

If you have an AI Enhance result, an Upscale this result section appears above the main Upscale section, letting you upscale the AI-enhanced PNG instead of the developed scan. Both paths use the same on-device model.

Under the hood

API calls (api.ts): api.upscalerStatus() → Tauri upscaler_status returns { installed: boolean, downloadBytes: number }. api.downloadUpscaler()download_upscaler triggers the model download. For a developed image, api.upscaleImage(id, params, imageCrop, geom, targetLong)upscale_image renders the full-resolution image then super-resolves it. For an AI-enhanced result, api.upscaleEnhanced(imageBase64, targetLong)upscale_enhanced takes the base64 PNG directly. Both return { previewDataUrl: string, outW: number, outH: number }. Progress tiles are streamed as upscale://progress events ({ done, total }). Saving calls api.saveUpscaled(outPath, format)save_upscaled.

Next: Library →

OpenEnlarge — 오픈소스 필름 스캔 편집기 · MIT 라이선스