name: dpi-upscaler-checker description: Check if images meet 300 DPI printing standards, and intelligently restore blurry low-resolution images using AI super-resolution technology. license: MIT author: aipoch
DPI Upscaler & Checker
Check if images meet 300 DPI printing standards, and intelligently restore blurry low-resolution images using AI super-resolution technology.
Input Validation
This skill accepts: image files (JPG, PNG, TIFF, BMP, WebP) or folder paths for DPI checking and/or AI super-resolution upscaling.
If the user's request does not involve image DPI checking or upscaling — for example, asking to analyze text documents, process audio files, or perform general data analysis — do not proceed with the workflow. Instead respond:
"dpi-upscaler-checker is designed to check image DPI standards and restore low-resolution images. Your request appears to be outside this scope. Please provide an image file path or folder, or use a more appropriate tool for your task."
Do not continue the workflow when the request is out of scope, missing a critical input (--input path), or would require unsupported assumptions. For missing inputs, state exactly which fields are missing.
When to Use
- Check whether images meet 300 DPI printing standards
- Upscale or restore low-resolution images using AI super-resolution
- Batch-process folders of mixed-DPI images for print readiness
Quick Check
python -m py_compile scripts/main.py
python scripts/main.py --help
python scripts/main.py --demo
python -c "import PIL; print('Pillow OK')"
python scripts/main.py check --input image.jpg --json
Workflow
- Validate input first — confirm the request is within scope and
--inputpath is provided before any processing. - Confirm the user objective, required inputs, and non-negotiable constraints.
- Use the packaged script path or the documented reasoning path with only the inputs that are actually available.
- Return a structured result that separates assumptions, deliverables, risks, and unresolved items.
- If execution fails or inputs are incomplete, switch to the fallback path and state exactly what blocked full completion.
Usage
Check Single Image DPI
python scripts/main.py check --input image.jpg
python scripts/main.py check --input image.jpg --json # JSON to stdout for agent consumption
Batch Check Folder
python scripts/main.py check --input ./images/ --output report.json
Super-Resolution Restoration
python scripts/main.py upscale --input image.jpg --output upscaled.jpg --scale 4
Batch Fix Low DPI Images
python scripts/main.py upscale --input ./images/ --output ./output/ --min-dpi 300 --scale 2
Demo Mode (no real images required)
python scripts/main.py --demo
Parameters
Check Command
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--input | string | - | Yes | Input image path or folder |
--output | string | stdout | No | Output report path |
--target-dpi | int | 300 | No | Target DPI threshold |
--json | flag | false | No | Output results as JSON to stdout |
Upscale Command
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--input | string | - | Yes | Input image path or folder |
--output | string | - | Yes | Output path |
--scale | int | 2 | No | Scale factor (2/3/4) |
--min-dpi | int | - | No | Only process images below this DPI |
--denoise | int | 0 | No | Denoise level (0-3) |
--face-enhance | flag | false | No | Enable face enhancement |
Output
DPI Check Report (JSON)
{
"file": "image.jpg",
"dpi": [72, 72],
"width_px": 1920,
"height_px": 1080,
"print_width_cm": 67.7,
"print_height_cm": 38.1,
"meets_300dpi": false,
"recommended_scale": 4.17
}
Restored Image
- Saved as
<original_filename>_upscaled.<extension> - Preserves original EXIF information
- Sets DPI metadata to target value
Algorithm
- DPI:
print_size_cm = (pixel_count / dpi) * 2.54;recommended_scale = target_dpi / avg_dpi - Super-resolution fallback chain: Real-ESRGAN → OpenCV DNN → PIL Lanczos
- RGBA alpha channel upscaled separately and reattached
Known Limitations
- Super-resolution cannot create non-existent information; extremely blurry images have limited improvement
- GPU acceleration requires CUDA environment (optional)
- Batch upscale mode does not currently save a JSON summary report (only check mode saves JSON to
--output) - EXIF parsing uses
except (AttributeError, KeyError, TypeError, ZeroDivisionError)— bare except replaced with specific exception types - Output format parameters are conditioned on file extension (JPEG:
quality=95; PNG:compress_level=6) - Batch processing uses
Path.rglob; resolve paths withpath.resolve()before processing to avoid unexpected directory traversal via symlinks
Fallback Behavior
If scripts/main.py fails or required inputs are incomplete:
- Report the exact failure point and error message (sanitized — no internal paths).
- State what can still be completed safely (e.g., DPI check without upscale).
- Manual fallback:
from PIL import Image; img = Image.open('file.jpg'); print(img.info.get('dpi')). - Do not fabricate execution outcomes or file contents.
Error Handling
- If required inputs are missing, state exactly which fields are missing and request only the minimum additional information.
- If the task goes outside the documented scope, stop instead of guessing or silently widening the assignment.
- If
scripts/main.pyfails, report the failure point, summarize what still can be completed safely, and provide a manual fallback. - Do not fabricate files, citations, data, search results, or execution outcomes.
- Script exits with non-zero code on error in both check and upscale modes.
Response Template
- Objective
- Inputs Received
- Assumptions
- Workflow
- Deliverable
- Risks and Limits
- Next Checks
Dependencies
- Python >= 3.8
- Pillow >= 9.0.0
- opencv-python >= 4.5.0
- numpy >= 1.21.0
- realesrgan (optional, for best results)
pip install -r requirements.txt