A little clarity for every image

Image Tools API Documentation

Read the CommFor API request and result contract, authentication, credits and errors. Check the 16-tool availability matrix and browser-only operations.

API v1 reference, updated September 17, 2026. Only ai-image-detector accepts new hosted operations, using CommFor. Other entries document browser-only tools. Keep API keys on a trusted server; all example values are illustrative, not results for your image.

Authentication

Create a key in Account → API keys and send it as an Authorization Bearer token over HTTPS. Do not expose it in public pages, query strings, screenshots or browser bundles. Revoke keys that are no longer needed. Local tools do not require an API key.

Explicit model upload

POST raw supported image bytes to /api/v1/files with the correct image Content-Type and authentication. Use the returned private file_id for the CommFor operation. Choosing a file for local inspection does not perform this upload.

Use static JPG, PNG or WebP within the displayed byte, pixel and edge limits. A successful upload does not guarantee successful decoding or model analysis; inspect errors and job status. The hosted service prepares the model input; do not infer a generator from its score.

Availability matrix

The fifteen Browser-only operations do not accept new hosted requests. Their local parameters and result descriptions follow for coverage; they carry no hosted billing envelope.

OperationGroupAvailability
dpi-checkerImage inspectionBrowser-only: free, no upload
metadata-viewerImage inspectionBrowser-only: free, no upload
dpi-converterImage transformsBrowser-only: free, no upload
metadata-removerImage transformsBrowser-only: free, no upload
image-converterImage transformsBrowser-only: free, no upload
image-resizerImage transformsBrowser-only: free, no upload
pixels-to-inchesCalculationsBrowser-only: free, no upload
inches-to-pixelsCalculationsBrowser-only: free, no upload
pixels-to-cmCalculationsBrowser-only: free, no upload
cm-to-pixelsCalculationsBrowser-only: free, no upload
pixels-to-mmCalculationsBrowser-only: free, no upload
mm-to-pixelsCalculationsBrowser-only: free, no upload
print-size-calculatorCalculationsBrowser-only: free, no upload
aspect-ratio-calculatorCalculationsBrowser-only: free, no upload
openai-image-detectorSource and AI analysisBrowser-only: free, no upload
ai-image-detectorSource and AI analysisHosted: optional CommFor, 1 credit

dpi-checker

Image inspection. Browser-only. Free local processing; no new hosted request, upload or credit charge. facts includes pixel dimensions, file byte size and all density sources; check300 reports yes, no or unknown.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.

Local settings (illustrative; choose the image in your browser)

{}

Local result shape (illustrative)

{
  "facts": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "check300": {
    "state": "yes",
    "text": "300 DPI"
  }
}

metadata-viewer

Image inspection. Browser-only. Free local processing; no new hosted request, upload or credit charge. MetadataReport: facts, fields, text, evidence, warnings and createdAt (Unix milliseconds). Evidence carries execution status; missing evidence is not a zero score.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.
include_sensitiveBoolean; default falseSensitive values are redacted unless explicitly true.

Local settings (illustrative; choose the image in your browser)

{
  "include_sensitive": false
}

Local result shape (illustrative)

{
  "facts": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "fields": {},
  "text": [],
  "evidence": [],
  "warnings": [],
  "createdAt": 1789516800000
}

dpi-converter

Image transforms. Browser-only. Free local processing; no new hosted request, upload or credit charge. original, target {xPpi,yPpi}, actual and verification. Download the resulting copy from the browser.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.
ppiRequired integer 1–12000; dpi alias acceptedTarget X and Y density. Changes supported metadata without resampling.

Local settings (illustrative; choose the image in your browser)

{
  "ppi": 300
}

Local result shape (illustrative)

{
  "original": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "target": {
    "xPpi": 300,
    "yPpi": 300
  },
  "actual": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "verification": {
    "ok": true,
    "targetMatched": true,
    "dimensionsUnchanged": true,
    "pixelPayloadUnchanged": true,
    "iccUnchanged": true,
    "orientationUnchanged": true,
    "thumbnailUnchanged": true,
    "nonTargetMetadataUnchanged": true,
    "violations": []
  }
}

metadata-remover

Image transforms. Browser-only. Free local processing; no new hosted request, upload or credit charge. before/after ImageFacts, removed and retained records. Unknown remove_fields are rejected explicitly; do not treat rejection as a successful cleanup. Orientation, ICC and pixels are preserved; inspect actual output.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.
remove_privateBoolean; default trueGroup privacy removal takes precedence over individual preservation.
remove_sourceBoolean; default falseExplicit permission to remove source/provenance records.
preserve_dpiBoolean; default trueRetain density metadata.
remove_fieldsOptional string array; at most 100PNG IDs are text.source + | + text.key, e.g. png:tEXt|Author. EXIF IDs use the exact listExifFields path, e.g. EXIF|IFD0/0x013b, including nested EXIF/GPS/Interop and linked directories. Select only fields marked removable; orientation, image-data pointers and thumbnail geometry/pointers are protected. Use remove_private:false for selective removal. Unknown or unsafe paths are rejected.

Local settings (illustrative; choose the image in your browser)

{
  "remove_private": false,
  "remove_source": false,
  "preserve_dpi": true,
  "remove_fields": [
    "EXIF|IFD0/0x013b"
  ]
}

Local result shape (illustrative)

{
  "before": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "after": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "removed": [],
  "retained": []
}

image-converter

Image transforms. Browser-only. Free local processing; no new hosted request, upload or credit charge. original image facts, target resize/encoding plan and actual output facts. Input dimensions stay unchanged. Evidence can additionally explain output verification.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.
formatjpeg | png | webp; default input formatOutput encoding.
quality0.1–1; default 0.9JPEG quality. Quality applies only to supported lossy browser encodings.
backgroundwhite | transparentBackground for output and padding; JPEG cannot retain transparency.

Local settings (illustrative; choose the image in your browser)

{
  "format": "png",
  "quality": 0.9,
  "background": "transparent"
}

Local result shape (illustrative)

{
  "original": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "target": {
    "width": 1200,
    "height": 900
  },
  "actual": {
    "format": "png",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  }
}

image-resizer

Image transforms. Browser-only. Free local processing; no new hosted request, upload or credit charge. original, target plan (width/height, target, rotated, source/destination rectangles, rotation, fit, enlarged and optional ppi) and actual output facts. Evidence may be included.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.
modepixels (default) | percent | physicalpixels uses width/height; percent uses percent; physical uses width/height, unit and ppi.
width, heightPositive numbersInteger pixels in pixels mode; physical measurements in physical mode.
percentPositive numberRequired for percent mode; 50 halves each edge.
unit, ppiin | cm | mm; positive PPIRequired for physical dimensions.
fitcontain (default) | crop | pad | stretchContain fits inside bounds; crop/pad produces target frame; stretch changes proportions.
rotation0 | 90 | 180 | 270; default 0Applied before crop coordinates.
focusX, focusY0–100; default 50Crop/pad focus position.
cropOptional {x,y,width,height}Positive-area pixel rectangle in the rotated source.
formatjpeg | png | webp; default input formatOutput encoding.
quality0.1–1; default 0.9JPEG quality. Quality applies only to supported lossy browser encodings.
backgroundwhite | transparentBackground for output and padding; JPEG cannot retain transparency.

Local settings (illustrative; choose the image in your browser)

{
  "mode": "pixels",
  "width": 600,
  "height": 450,
  "fit": "contain",
  "format": "jpeg",
  "quality": 0.9
}

Local result shape (illustrative)

{
  "original": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "target": {
    "width": 600,
    "height": 450,
    "target": {
      "width": 600,
      "height": 450
    },
    "rotated": {
      "width": 1200,
      "height": 900
    },
    "source": {
      "x": 0,
      "y": 0,
      "width": 1200,
      "height": 900
    },
    "destination": {
      "x": 0,
      "y": 0,
      "width": 600,
      "height": 450
    },
    "rotation": 0,
    "fit": "contain",
    "enlarged": false
  },
  "actual": {
    "format": "jpeg",
    "width": 600,
    "height": 450,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  }
}

pixels-to-inches

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
physicalWidth, physicalHeightOptional positive pairCompare against a target physical size in the operation’s output unit.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Local settings (illustrative; choose the image in your browser)

{
  "width": 2400,
  "height": 3000,
  "ppi": 300
}

Local result shape (illustrative)

{
  "width": 8,
  "height": 10,
  "unit": "in",
  "formula": "physical in = px ÷ PPI × 1",
  "parameters": {
    "width": 2400,
    "height": 3000,
    "ppi": 300
  },
  "rows": [
    [
      "Input pixels",
      "2400 × 3000 px"
    ],
    [
      "Width",
      "8 in"
    ],
    [
      "Height",
      "10 in"
    ],
    [
      "PPI",
      "300"
    ]
  ],
  "text": "8 × 10 in\nInput pixels: 2400 × 3000 px\nWidth: 8 in\nHeight: 10 in\nPPI: 300\nFormula: physical in = px ÷ PPI × 1",
  "ppi": 300,
  "actualPixels": {
    "width": 2400,
    "height": 3000
  },
  "resizer": {
    "eligible": true
  }
}

inches-to-pixels

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Local settings (illustrative; choose the image in your browser)

{
  "width": 8,
  "height": 10,
  "ppi": 300
}

Local result shape (illustrative)

{
  "width": 2400,
  "height": 3000,
  "unit": "px",
  "formula": "px = in ÷ 1 × PPI",
  "parameters": {
    "width": 8,
    "height": 10,
    "ppi": 300
  },
  "rows": [
    [
      "Input print size",
      "8 × 10 in"
    ],
    [
      "Width",
      "2400 px"
    ],
    [
      "Height",
      "3000 px"
    ],
    [
      "PPI",
      "300"
    ],
    [
      "Exact pixels",
      "2400 × 3000 px"
    ],
    [
      "Rounding",
      "Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image."
    ]
  ],
  "text": "2400 × 3000 px\nInput print size: 8 × 10 in\nWidth: 2400 px\nHeight: 3000 px\nPPI: 300\nExact pixels: 2400 × 3000 px\nRounding: Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image.\nFormula: px = in ÷ 1 × PPI",
  "ppi": 300,
  "targetPixels": {
    "width": 2400,
    "height": 3000
  },
  "exactPixels": {
    "width": 2400,
    "height": 3000
  },
  "resizer": {
    "eligible": true
  }
}

pixels-to-cm

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
physicalWidth, physicalHeightOptional positive pairCompare against a target physical size in the operation’s output unit.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Local settings (illustrative; choose the image in your browser)

{
  "width": 2400,
  "height": 3000,
  "ppi": 300
}

Local result shape (illustrative)

{
  "width": 20.32,
  "height": 25.4,
  "unit": "cm",
  "formula": "physical cm = px ÷ PPI × 2.54",
  "parameters": {
    "width": 2400,
    "height": 3000,
    "ppi": 300
  },
  "rows": [
    [
      "Input pixels",
      "2400 × 3000 px"
    ],
    [
      "Width",
      "20.32 cm"
    ],
    [
      "Height",
      "25.4 cm"
    ],
    [
      "PPI",
      "300"
    ]
  ],
  "text": "20.32 × 25.4 cm\nInput pixels: 2400 × 3000 px\nWidth: 20.32 cm\nHeight: 25.4 cm\nPPI: 300\nFormula: physical cm = px ÷ PPI × 2.54",
  "ppi": 300,
  "actualPixels": {
    "width": 2400,
    "height": 3000
  },
  "resizer": {
    "eligible": true
  }
}

cm-to-pixels

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Local settings (illustrative; choose the image in your browser)

{
  "width": 10,
  "height": 15,
  "ppi": 300
}

Local result shape (illustrative)

{
  "width": 1181,
  "height": 1772,
  "unit": "px",
  "formula": "px = cm ÷ 2.54 × PPI",
  "parameters": {
    "width": 10,
    "height": 15,
    "ppi": 300
  },
  "rows": [
    [
      "Input print size",
      "10 × 15 cm"
    ],
    [
      "Width",
      "1181 px"
    ],
    [
      "Height",
      "1772 px"
    ],
    [
      "PPI",
      "300"
    ],
    [
      "Exact pixels",
      "1181.102362 × 1771.653543 px"
    ],
    [
      "Rounding",
      "Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image."
    ]
  ],
  "text": "1181 × 1772 px\nInput print size: 10 × 15 cm\nWidth: 1181 px\nHeight: 1772 px\nPPI: 300\nExact pixels: 1181.102362 × 1771.653543 px\nRounding: Each pixel dimension is rounded to the nearest whole pixel. These are required pixels, not a measurement of an existing image.\nFormula: px = cm ÷ 2.54 × PPI",
  "ppi": 300,
  "targetPixels": {
    "width": 1181,
    "height": 1772
  },
  "exactPixels": {
    "width": 1181.1023622047244,
    "height": 1771.6535433070867
  },
  "resizer": {
    "eligible": true
  }
}

pixels-to-mm

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
physicalWidth, physicalHeightOptional positive pairCompare against a target physical size in the operation’s output unit.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Local settings (illustrative; choose the image in your browser)

{
  "width": 1200,
  "height": 1800,
  "ppi": 300
}

Local result shape (illustrative)

{
  "width": 101.6,
  "height": 152.39999999999998,
  "unit": "mm",
  "formula": "physical mm = px ÷ PPI × 25.4",
  "parameters": {
    "width": 1200,
    "height": 1800,
    "ppi": 300
  },
  "rows": [
    [
      "Input pixels",
      "1200 × 1800 px"
    ],
    [
      "Width",
      "101.6 mm"
    ],
    [
      "Height",
      "152.4 mm"
    ],
    [
      "PPI",
      "300"
    ],
    [
      "One pixel",
      "0.08466666667 mm at 300 PPI"
    ]
  ],
  "text": "101.6 × 152.4 mm\nInput pixels: 1200 × 1800 px\nWidth: 101.6 mm\nHeight: 152.4 mm\nPPI: 300\nOne pixel: 0.08466666667 mm at 300 PPI\nFormula: physical mm = px ÷ PPI × 25.4",
  "ppi": 300,
  "actualPixels": {
    "width": 1200,
    "height": 1800
  },
  "resizer": {
    "eligible": true
  }
}

mm-to-pixels

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
width, heightRequired positive numbersPixels must be integers; physical dimensions may be fractional.
ppiRequired positive numberPixels per inch; never inferred from a screen.
bleedNonnegative mm; default 0Added on all four sides.
chosenSizetrim | bleed; optionalWith nonzero bleed, choose a size before forwarding to resize.
presetOptional stringPreserved descriptive label; it does not override dimensions.

Local settings (illustrative; choose the image in your browser)

{
  "width": 100,
  "height": 150,
  "ppi": 300,
  "bleed": 3,
  "chosenSize": "bleed"
}

Local result shape (illustrative)

{
  "width": 1252,
  "height": 1843,
  "unit": "px",
  "formula": "px = mm ÷ 25.4 × PPI; bleed size = trim size + 2 × bleed per edge",
  "parameters": {
    "width": 100,
    "height": 150,
    "ppi": 300,
    "bleed": 3,
    "chosenSize": "bleed"
  },
  "rows": [
    [
      "Finished trim size",
      "100 × 150 mm"
    ],
    [
      "Bleed per edge",
      "3 mm"
    ],
    [
      "Size including bleed",
      "106 × 156 mm"
    ],
    [
      "Trim pixels",
      "1181 × 1772 px"
    ],
    [
      "Bleed pixels",
      "1252 × 1843 px"
    ],
    [
      "Exact trim pixels",
      "1181.102362 × 1771.653543 px"
    ],
    [
      "Exact bleed pixels",
      "1251.968504 × 1842.519685 px"
    ],
    [
      "PPI",
      "300"
    ],
    [
      "Chosen size",
      "Including bleed"
    ],
    [
      "Rounding",
      "Each final dimension is rounded to the nearest whole pixel. Bleed is added to both edges."
    ]
  ],
  "text": "1252 × 1843 px\nFinished trim size: 100 × 150 mm\nBleed per edge: 3 mm\nSize including bleed: 106 × 156 mm\nTrim pixels: 1181 × 1772 px\nBleed pixels: 1252 × 1843 px\nExact trim pixels: 1181.102362 × 1771.653543 px\nExact bleed pixels: 1251.968504 × 1842.519685 px\nPPI: 300\nChosen size: Including bleed\nRounding: Each final dimension is rounded to the nearest whole pixel. Bleed is added to both edges.\nFormula: px = mm ÷ 25.4 × PPI; bleed size = trim size + 2 × bleed per edge",
  "ppi": 300,
  "trim": {
    "width": 100,
    "height": 150,
    "unit": "mm"
  },
  "bleed": {
    "width": 106,
    "height": 156,
    "unit": "mm"
  },
  "resizer": {
    "eligible": true
  },
  "targetPixels": {
    "width": 1252,
    "height": 1843
  },
  "exactPixels": {
    "width": 1251.968503937008,
    "height": 1842.5196850393702
  }
}

print-size-calculator

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
modeprint-size (default) | required-pixels | effective-ppiSelect calculation direction.
unitin (default) | cm | mmUnit of physical dimensions.
width, heightPositive integer pixelsRequired for print-size and effective-ppi.
physicalWidth, physicalHeightPositive numbersRequired for required-pixels and effective-ppi.
ppiPositive numberRequired for print-size and required-pixels.
targetPpiOptional positive numberCompare effective-ppi with a requested density.

Local settings (illustrative; choose the image in your browser)

{
  "mode": "print-size",
  "width": 2400,
  "height": 3000,
  "ppi": 300,
  "unit": "in"
}

Local result shape (illustrative)

{
  "width": 8,
  "height": 10,
  "unit": "in",
  "formula": "physical in = px ÷ PPI × 1",
  "parameters": {
    "width": 2400,
    "height": 3000,
    "ppi": 300,
    "mode": "print-size",
    "unit": "in"
  },
  "rows": [
    [
      "Input pixels",
      "2400 × 3000 px"
    ],
    [
      "Width",
      "8 in"
    ],
    [
      "Height",
      "10 in"
    ],
    [
      "PPI",
      "300"
    ]
  ],
  "text": "8 × 10 in\nInput pixels: 2400 × 3000 px\nWidth: 8 in\nHeight: 10 in\nPPI: 300\nFormula: physical in = px ÷ PPI × 1",
  "ppi": 300,
  "actualPixels": {
    "width": 2400,
    "height": 3000
  },
  "resizer": {
    "eligible": true
  }
}

aspect-ratio-calculator

Calculations. Browser-only. Free local processing; no new hosted request, upload or credit charge. The local result contains width, height, unit, formula, parameters, rows and text. Operation-specific values include exactPixels, comparison, ratio, trim/bleed, effectivePpi or resizer when applicable.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
modedimensions (default) | ratio-only | missing-width | missing-heightChoose the known quantities.
width, heightPositive integersdimensions requires both; missing-width requires height; missing-height requires width.
ratioWidth, ratioHeightPositive integersRequired for ratio-only and either missing-edge mode.

Local settings (illustrative; choose the image in your browser)

{
  "mode": "dimensions",
  "width": 1920,
  "height": 1080
}

Local result shape (illustrative)

{
  "width": 16,
  "height": 9,
  "unit": "ratio",
  "formula": "Simplest ratio = width : height, divided by their greatest common divisor.",
  "parameters": {
    "mode": "dimensions",
    "width": 1920,
    "height": 1080
  },
  "rows": [
    [
      "Input pixels",
      "1920 × 1080 px"
    ],
    [
      "Ratio",
      "16:9"
    ],
    [
      "Megapixels",
      "2.0736 MP"
    ]
  ],
  "text": "16 × 9 ratio\nInput pixels: 1920 × 1080 px\nRatio: 16:9\nMegapixels: 2.0736 MP\nFormula: Simplest ratio = width : height, divided by their greatest common divisor.",
  "ratio": {
    "width": 16,
    "height": 9
  },
  "actualPixels": {
    "width": 1920,
    "height": 1080
  },
  "megapixels": 2.0736,
  "resizer": {
    "eligible": true
  }
}

openai-image-detector

Source and AI analysis. Browser-only. Free local processing; no new hosted request, upload or credit charge. Local source labels and embedded provenance validation states. An OpenAI label is not official verification. OpenAI API and private SynthID checks are paused; missing records do not prove human authorship.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
imageLocal browser FileChoose a supported file in the browser; this operation has no hosted upload.

Local settings (illustrative; choose the image in your browser)

{}

Local result shape (illustrative)

{
  "facts": {
    "format": "jpeg",
    "width": 1200,
    "height": 900,
    "fileSizeBytes": 12345,
    "resolution": {
      "state": "specified",
      "xPpi": 300,
      "yPpi": 300,
      "sources": [
        {
          "source": "jfif",
          "x": 300,
          "y": 300,
          "unit": "ppi"
        }
      ]
    }
  },
  "fields": {},
  "evidence": [],
  "warnings": []
}

ai-image-detector

Source and AI analysis. Hosted: POST /api/v1/operations/ai-image-detector. Explicit image upload; 1 credit per completed item. models contains provider commfor, aiProbability (0–1) and calibrated:false. This is an AI-generated score, not a calibrated authenticity probability. No deepfake or generator classification is returned. Each completed item costs 1 credit; technical failures release the reservation.

Examples describe structure with illustrative values, not a completed result for your image. Numeric examples are calculated from the displayed local inputs.

ParameterType / defaultMeaning
file_idRequired stringPrivate ID returned by an explicit authenticated POST /api/v1/files upload.
modelsRequired array ["commfor"]Only CommFor is available for new hosted analysis; local inspection makes no hosted request.

CommFor request

curl https://checkimagedpi.com/api/v1/operations/ai-image-detector \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: example-commfor-001' \
  --data '{"file_id":"YOUR_FILE_ID","models":["commfor"]}'

Completed job (illustrative)

{
  "request_id": "EXAMPLE_JOB_ID",
  "job_id": "EXAMPLE_JOB_ID",
  "operation": "ai-image-detector",
  "provenance": "server",
  "status": "succeeded",
  "result": {
    "items": [
      {
        "status": "succeeded",
        "result": {
          "models": [
            {
              "provider": "commfor",
              "aiProbability": 0.1,
              "calibrated": false
            }
          ]
        },
        "warnings": [],
        "billing": {
          "charged": 1
        }
      }
    ],
    "success_count": 1
  },
  "warnings": [],
  "error": null,
  "billing": {
    "reserved": 1,
    "charged": 1,
    "released": 0,
    "unit": "credit"
  },
  "expires_at": 1792108800
}

Status, warnings and billing

Queued work returns HTTP 202 and a job_id. Poll authenticated GET /api/v1/jobs/{job_id}. queued and running are unfinished; distinguish succeeded, partial, failed and expired. Successful item data is nested under result.items[].result, and expired jobs return result:null. Billing distinguishes reserved, charged and released credits.

A completed model score is not proof of authenticity. A failed request must not appear as a zero score. Existing historical reports can retain the operation and provider that originally produced them; they do not advertise current availability.

Idempotency and retries

Reuse an idempotency key with identical input when a request outcome is uncertain. Reusing a key with different input is a conflict. Inspect the existing job before submitting new work. A new key represents a new operation; polling the original is not a second charge.

Errors are not negative detections

Read the HTTP status, machine-readable error and request ID. Keep secrets and private inputs out of support messages.

HTTPMeaning
400Invalid or unsupported operation/input
401 / 403Authentication or access failure
402Insufficient credits
409Idempotency or task conflict
413 / 415Size or format unsupported
429Rate or concurrency limit
502 / 503 / 504Model failure, unavailable service or timeout

Historical jobs, downloads and retention

Historical job polling and unexpired output downloads remain available even when their operation is now browser-only. Downloadable outputs expire after 24 hours. Authenticated GET /api/v1/files/{file_id}/link returns {"url":"SIGNED_URL","expires_in":600}; a fresh ten-minute link cannot revive an expired file.

Temporary hosted inputs are removed after processing and within one hour. Reports without original images or prompts are retained for 30 days and usage metadata for 90 days. DELETE /api/v1/files/{file_id} removes an available owned file early. Browser-local exports are separate: deleting a server report cannot remove a copy already downloaded.

Frequently asked questions

Should I retry a timeout with a new key?

First inspect the existing job; a new key can create duplicate work.

Are local operations charged?

No. The fifteen browser-only tools are free and do not submit hosted operation requests.

Does an old report prove that operation is still hosted?

No. Historical access is retained separately from the current CommFor-only operation API.