# Upscale images with super resolution

Before running the pipeline command for a model, follow the required Prerequisites

Note

The input video needs dimensions of 128x128 for optimal results.

Run the following command to ensure your result is displayed on the connected display.

export XDG_RUNTIME_DIR=/dev/socket/weston && export WAYLAND_DISPLAY=wayland-1
    Copy to clipboard

## QuickSRNetLarge

QuickSRNetLarge is designed for upscaling images on mobile platforms to sharpen them in real-time.

The AI Hub model is based on [this implementation of QuickSRNetLarge](https://github.com/quic/aimet-model-zoo/tree/develop/aimet_zoo_torch/quicksrnet).

- Model: [QuickSRNetLarge](https://aihub.qualcomm.com/iot/models/quicksrnetlarge)

gst-launch-1.0 -e --gst-debug=2 \
    filesrc location=/etc/media/video.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! tee name=split \
    split. ! queue ! qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<960, 1080>" sink_1::position="<960, 0>" sink_1::dimensions="<960, 1080>" ! \
    queue ! waylandsink sync=true fullscreen=true \
    split. ! qtimlvconverter ! queue ! qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
    external-delegate-options="QNNExternalDelegate,backend_type=htp;" model=/etc/models/quicksrnetlarge_quantized.tflite ! queue ! \
    qtimlpostprocess module=srnet ! video/x-raw,format=RGB ! queue ! mixer.
    Copy to clipboard

## QuickSRNetMedium

QuickSRNetMedium is designed for upscaling images on mobile platforms to sharpen them in real-time.

The AI Hub model is based on [this implementation of QuickSRNetMedium](https://github.com/quic/aimet-model-zoo/tree/develop/aimet_zoo_torch/quicksrnet).

- Model: [QuickSRNetMedium](https://aihub.qualcomm.com/iot/models/quicksrnetmedium)

gst-launch-1.0 -e --gst-debug=2 \
    filesrc location=/etc/media/video.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! tee name=split \
    split. ! queue ! qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<960, 1080>" sink_1::position="<960, 0>" sink_1::dimensions="<960, 1080>" ! \
    queue ! waylandsink sync=true fullscreen=true \
    split. ! qtimlvconverter ! queue ! qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
    external-delegate-options="QNNExternalDelegate,backend_type=htp;" model=/etc/models/quicksrnetmedium_quantized.tflite ! queue ! \
    qtimlpostprocess module=srnet ! video/x-raw,format=RGB ! queue ! mixer.
    Copy to clipboard

## QuickSRNetSmall

QuickSRNetSmall is designed for upscaling images on mobile platforms to sharpen them in real-time.

The AI Hub model is based on [this implementation of QuickSRNetSmall](https://github.com/quic/aimet-model-zoo/tree/develop/aimet_zoo_torch/quicksrnet).

- Model: [QuickSRNetSmall](https://aihub.qualcomm.com/iot/models/quicksrnetsmall)

gst-launch-1.0 -e --gst-debug=2 \
    filesrc location=/etc/media/video.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! tee name=split \
    split. ! queue ! qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<960, 1080>" sink_1::position="<960, 0>" sink_1::dimensions="<960, 1080>" ! \
    queue ! waylandsink sync=true fullscreen=true \
    split. ! qtimlvconverter ! queue ! qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
    external-delegate-options="QNNExternalDelegate,backend_type=htp;" model=/etc/models/quicksrnetsmall_quantized.tflite ! queue ! \
    qtimlpostprocess module=srnet ! video/x-raw,format=RGB ! queue ! mixer.
    Copy to clipboard

## XLSR

XLSR is designed for lightweight real-time upscaling of images.

The AI Hub model is based on [this implementation of XLSR](https://github.com/quic/aimet-model-zoo/tree/develop/aimet_zoo_torch/xlsr).

- Model: [XLSR](https://aihub.qualcomm.com/iot/models/xlsr)

gst-launch-1.0 -e --gst-debug=2 \
    filesrc location=/etc/media/video.mp4 ! qtdemux ! queue ! h264parse ! v4l2h264dec capture-io-mode=4 output-io-mode=4 ! video/x-raw,format=NV12 ! queue ! tee name=split \
    split. ! queue ! qtivcomposer name=mixer sink_0::position="<0, 0>" sink_0::dimensions="<960, 1080>" sink_1::position="<960, 0>" sink_1::dimensions="<960, 1080>" ! \
    queue ! waylandsink sync=true fullscreen=true \
    split. ! qtimlvconverter ! queue ! qtimltflite delegate=external external-delegate-path=libQnnTFLiteDelegate.so \
    external-delegate-options="QNNExternalDelegate,backend_type=htp;" model=/etc/models/xlsr_quantized.tflite ! queue ! \
    qtimlpostprocess module=srnet ! video/x-raw,format=RGB ! queue ! mixer.
    Copy to clipboard

Last Published: Dec 29, 2025

Previous Topic
 
Apply semantic segmentation to frames of a video Next Topic

Run GenAI on-device