EyeQ Docs

Docker quickstart

Get started using PFC Docker application

This page explains how to run the Perfectly Clear Docker container and process your first image. The container provides a self-hosted HTTP API for image correction.

Prerequisites

Before you begin, ensure that you have:

  • Docker installed and running
  • curl and jq installed for the example scripts
  • License files provided by EyeQ

On Ubuntu/Debian, install the required tools:

sudo apt-get install jq curl

Project structure

Your project structure should look like this with the container package:

my-project/
├── pfc_container_image.tar
├── sdk_license/
│   └── (license files)
├── presets/
│   ├── universal.preset
│   ├── pro.preset
│   └── v3.looks
└── sample.jpg

Load the Docker image

Load the pre-built container image into Docker:

docker load --input pfc_container_image.tar

Run the container

Start the container with the required volume mappings for license files and presets:

docker run -d \
  -v "$(pwd)/sdk_license":/sdk_license \
  -v "$(pwd)/presets":/presets \
  -p 80:80 \
  pfc_container

Verify the container is running

Check the SDK version to confirm the container is responding:

curl "http://localhost:80/version"

Process an image

The container uses a three-step workflow:

  1. Upload
  2. Correct
  3. Download

Upload the image

Send a PUT request with your image to get an imageKey:

imageKey=$(curl -H "Content-Type: image/jpeg" \
  -X PUT "http://localhost:80/pfc" \
  --upload-file sample.jpg | jq -r '.imageKey')

echo "Image uploaded: ${imageKey}"

Apply corrections

Request correction using the imageKey. The API returns a URL to download the corrected image:

response=$(curl -X GET "http://localhost:80/pfc/${imageKey}")
corrected_url=$(echo ${response} | jq -r '.corrected_url')

echo "Corrected image URL: ${corrected_url}"

By default, the container uses AI Scene Detection to automatically select the best preset.

Download the result

Fetch the corrected image from the returned URL:

curl "${corrected_url}" -o corrected.jpg

Specify a preset

To use a specific preset instead of AI Scene Detection, add the preset parameter:

curl -X GET "http://localhost:80/pfc/${imageKey}?preset=universal"

The preset name corresponds to the filename (without .preset extension) in your mounted /presets directory.

Complete example script

Here's a complete script that processes an image:

#!/bin/bash

INPUT=${1:-sample.jpg}
OUTPUT=${2:-corrected.jpg}

if [ ! -f "$INPUT" ]; then
    echo "File $INPUT not found"
    exit 1
fi

# Upload the image
imageKey=$(curl -s -H "Content-Type: image/jpeg" \
  -X PUT "http://localhost:80/pfc" \
  --upload-file ${INPUT} | jq -r '.imageKey')
echo "Uploaded: ${imageKey}"

# apply correction to image
response=$(curl -s -X GET "http://localhost:80/pfc/${imageKey}")
corrected_url=$(echo ${response} | jq -r '.corrected_url')

if [ "${corrected_url}" == "null" ]; then
    echo "Correction failed"
    echo ${response}
    exit 1
fi

# Download the image
curl -s "${corrected_url}" -o ${OUTPUT}
echo "Saved to: ${OUTPUT}"

Run it:

chmod +x correct_image.sh
./correct_image.sh sample.jpg corrected.jpg

DOCKER Version 10.7.2.1269 built from 4fa849d8101945eea725a08dd0dae5101f090fa0 on 11-10-2025.

Copyright © 2026 EyeQ Imaging Inc. All rights reserved.

On this page