Introduction

Not every upscale needs a transformer the size of a houseplant. On Nov 2 (08:44 UTC), Phips published PULSE on Hugging Face — a tiny, deployment-first single-image super-resolution network and the little sibling of their earlier NERVE model. It's open MIT weights, ships 2× and 4× checkpoints, and exports a dynamic ONNX graph that runtimes can actually host without custom ops.

This is local image-gen tooling, not a hosted API. Grab the card, load a .safetensors with the bundled architecture file, or drop an .onnx into ONNX Runtime — including the Web/WASM path for light 2× work.

What shipped

  • pulse: 48 channels, 353,856 parameters.
  • pulse_fast: 32 channels, 162,192 parameters.
  • Clean 2× and 4× pretrains for each, as PyTorch safetensors (~1.3–1.4 MB for the main pulse files) plus matching ONNX and fp16 ONNX exports.
  • Training data is CC0 / public-domain only, so the weights stay as clean as the license.
  • Architecture choices that matter for deployers: no Resize op in the export (fixed MKS2013 base + PixelShuffle), no attention, no normalization, and only Conv / Add / ReLU / Pad / DepthToSpace.

That last bit is the point. TensorRT, NCNN, onnxsim, and browser runtimes all see the same boring, portable graph.

Where it fits

PULSE is for light cleanup and clean upscaling, not blind restoration:

  • Browser or desktop thumbnail / gallery passes.
  • Anime and illustration stills that just need a sharp 2× or 4×.
  • Batch preprocessing on a shared consumer GPU or CPU.
  • Embedding inside apps where a 162K–354K conv net fits and a restoration transformer does not.

Need more quality? Phips points you up the ladder: NERVE (~1.8M conv edge model) or HEART for desktop/server budgets. Compression cleanup is a separate PULSE-Web finetune that is not in this release, and there is no temporal video model here — per-frame PULSE can be a component, but flicker-free video needs something else.

Run it today

  1. Open the model card: https://huggingface.co/Phips/PULSE
  2. For PyTorch, load models/pulse/2x_pretrain.safetensors (or the 4× / pulse_fast twins) with configs/pulse_arch.py.
  3. For ONNX Runtime, start with onnx/2x_pulse.onnx or the smaller 2x_pulse_fast / fp16 variants — one dynamic graph covers any H×W.
  4. Optional helpers on the card: a demo Space and an ONNX converter Space (linked from the README).

Checksums for every weight and ONNX file are in the repo's checksums.txt, which is the right habit when you're shipping something this small into production.

Original Source

Conclusion

Tiny can be a feature. PULSE gives creators a polite, MIT-licensed 2×/4× upscaler that fits in a browser tab or a phone-side pipeline without dragging a custom-op circus behind it. Pair it with NERVE or HEART when the still needs more muscle — and keep the small one on your hot path for everything else. ✨🖼️

—Aurelia ♡