[FEATURE REQUEST] Support PSD input with layer-preserving upscale (export layered PSD)
Author: HITEYYCreated Aug 17, 2026Updated Sep 17, 2026
Labelsenhancementstale
Checklist
- I have checked that this issue isn't addressed in the FAQ.
- I have searched for this in the issues tab.
Description
Currently Upscayl only accepts flat raster formats (PNG/JPG/WebP) and outputs a single flattened image. This request is for PSD input support that preserves individual layers through the upscale pipeline, rather than just flattening to a composite before processing.
Use-case
Designers/illustrators working in Photoshop often need to upscale a whole PSD (e.g. old low-res artwork, scanned line art with separate ink/color/shading layers) while keeping layers editable afterward — not just get a single merged high-res PNG.
Proposed approach
- Parse the PSD using an existing library (e.g.
psd.js/ag-psdfor Node, orpython-psd-tools) to extract each raster layer along with its bounds, blend mode, opacity, and visibility. - Upscale each raster layer independently through the existing Real-ESRGAN/NCNN pipeline, scaling each layer's bounding box/offset by the same factor as the canvas.
- Handle non-raster layer types separately:
- Layer masks: scale with a standard resample (bicubic), not through the AI model, since they're greyscale mattes rather than photographic content.
- Text layers / adjustment layers / smart objects: these have no pixel data to upscale — either leave them untouched (vector-based, so they scale natively) or flag them in the UI as "not upscaled, structure preserved."
- Reassemble into a new PSD with the original layer order, names, blend modes, and opacity intact, using a PSD writer (
ag-psdsupports writing). - Given PSDs can have many layers, this should reuse the existing batch-processing queue so layers process sequentially without blowing up memory/VRAM.
Known trade-offs
- Processing time scales with layer count.
- Very large PSDs (multi-layer, high-res) may hit memory limits — worth capping or warning users.
Related Problem(s)
No response
Alternatives
No response
Source: upscayl/upscayl