# Upscale images with super resolution

Before running the pipeline command for a model, follow the required [Prerequisites](https://docs.qualcomm.com/doc/80-80022-15B/topic/use-ai-hub-models-with-gstreamer.html#prerequisites)

Note

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

## 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: May 14, 2026

[Previous Topic
Apply semantic segmentation to frames of a video](https://docs.qualcomm.com/bundle/publicresource/80-80022-15B/topics/semantic-segmentation.md) [Next Topic
Run GenAI on-device](https://docs.qualcomm.com/bundle/publicresource/80-80022-15B/topics/run-on-device-genai.md)