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
curlandjqinstalled for the example scripts- License files provided by EyeQ
On Ubuntu/Debian, install the required tools:
sudo apt-get install jq curlProject 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.jpgLoad the Docker image
Load the pre-built container image into Docker:
docker load --input pfc_container_image.tarRun 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_containerVerify 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:
- Upload
- Correct
- 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.jpgSpecify 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.jpgDOCKER Version 10.7.2.1269 built from 4fa849d8101945eea725a08dd0dae5101f090fa0 on 11-10-2025.
Copyright © 2026 EyeQ Imaging Inc. All rights reserved.