UpgoLAB tools

Working notes on AI upscaling for photos and short video.

The order that works

Most guides say enlarge first. That makes the model learn the compression blocks and enlarge them too. The sequence that holds up:

  1. Denoise, targeting block artifacts rather than sensor grain
  2. Enlarge at most 2x per axis
  3. Inspect at 100% on the hair edge, not at fit-to-window
  4. Grade last

Why 2x is the ceiling

Past roughly 2x the model switches from reconstructing to inventing. Faces go waxy and small text becomes strokes that look like letters but are not. A 540p source at 2x lands at 1080p, which is enough for anything watched on a screen.

Marketing numbers describe output resolution, not recovered information.

What is not recoverable

Out-of-focus footage is gone. The sensor never recorded that detail. Motion blur from a whip pan is nearly as lost. Test before starting: hold the original at 100%. If there is edge structure, it can probably be sharpened. If there is none, save the time.

Compression noise is not grain

Compression imposes a regular block grid. Sensor grain is random. A generic denoiser treats the grid as noise and leaves it in place, then the upscaler amplifies it. This distinction changed results more than any model choice.

Splitting long clips

Cut at keyframes so the source is not re-encoded:

ffmpeg -ss 00:01:12 -to 00:01:38 -i input.mp4 -c copy damage.mp4

For batch work:

ffmpeg -i input.mp4 -c copy -f segment -segment_time 30 -reset_timestamps 1 seg-%03d.mp4

Join without a second encode:

printf "file '%s'\n" seg-*.mp4 > list.txt
ffmpeg -f concat -safe 0 -i list.txt -c output.mp4

Results

Examples from each content mode:

The tool

I packaged this pipeline as UpgoLAB — browser-based, eight presets by content type, free during launch, no card and no watermark. Photos up to 4 MP, clips up to 30 seconds.

Direct link: https://upgolab.com