{
  "slug": "grayscale-detector",
  "name": "gizza-ai/grayscale-detector",
  "version": "0.1.0",
  "title": "Grayscale Detector — Check RGB Images for Hidden Color Pixels — gizza.ai",
  "description": "Paste image bytes and check whether every RGB pixel is effectively grayscale, with tolerance, color-pixel counts, and sample coordinates.",
  "tags": [
    "grayscale detector",
    "check grayscale image",
    "hidden color pixels",
    "rgb channel check",
    "image color audit",
    "single channel image",
    "print preflight"
  ],
  "category": "image",
  "urls": {
    "page": "https://gizza.ai/tools/grayscale-detector/",
    "markdown": "https://gizza.ai/tools/grayscale-detector/index.md",
    "descriptor": "https://gizza.ai/tools/grayscale-detector/tool.json",
    "deep_link_example": "https://gizza.ai/tools/grayscale-detector/?input=Paste%20base64-encoded%20PNG%2FJPEG%2FWebP%2FGIF%2FBMP%2FTIFF%20bytes%E2%80%A6&input_format=base64&tolerance=2&metric=channel_delta&ignore_alpha=true&max_samples=20&output=report"
  },
  "cli": "gizza tool grayscale-detector \"Paste base64-encoded PNG/JPEG/WebP/GIF/BMP/TIFF bytes…\"",
  "tool": {
    "description": "Detect whether an image stored as RGB is effectively grayscale by scoring every pixel's red/green/blue spread. Paste image bytes as base64 or hex; PNG, JPEG, WebP, GIF, BMP and TIFF are supported, up to 32 MiB decoded. Options: tolerance 0-255 (default 2) for the highest score still counted as gray, metric channel_delta or saturation, ignore_alpha true/false (default true), max_samples 0-200 (default 20), and output report or json. The result gives a verdict plus dimensions, scanned/gray/color pixel counts and percentages, max and mean score, and sample color-pixel coordinates with hex values.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "ignore_alpha": {
          "default": true,
          "description": "true (default) scores every pixel on its RGB channels regardless of transparency. false excludes fully transparent pixels (alpha 0) from the verdict and reports them separately.",
          "type": "boolean"
        },
        "input": {
          "description": "Image file bytes encoded as base64 or hex. Supports PNG, JPEG, WebP, GIF, BMP, and TIFF. Max 32 MiB decoded.",
          "type": "string"
        },
        "input_format": {
          "default": "base64",
          "description": "Encoding of `input`: base64 (default, standard or URL-safe alphabet) or hex (whitespace and ':' '-' '_' separators are ignored).",
          "enum": [
            "base64",
            "hex"
          ],
          "type": "string"
        },
        "max_samples": {
          "default": 20,
          "description": "How many example color pixels to list with their coordinates and hex value (0-200, default 20). Use 0 to report counts only.",
          "maximum": 200,
          "minimum": 0,
          "type": "integer"
        },
        "metric": {
          "default": "channel_delta",
          "description": "How each pixel is scored: channel_delta (default) = max minus min of R, G, B; saturation = HSV saturation on a 0-255 scale, which also catches faint tints in dark pixels.",
          "enum": [
            "channel_delta",
            "saturation"
          ],
          "type": "string"
        },
        "output": {
          "default": "report",
          "description": "Output format: report (default, human-readable verdict with counts and sample pixels) or json (structured metrics and sample coordinates).",
          "enum": [
            "report",
            "json"
          ],
          "type": "string"
        },
        "tolerance": {
          "default": 2,
          "description": "Highest per-pixel colorfulness score (0-255) still counted as gray. Use 0 for strict R=G=B; the default 2 absorbs JPEG/WebP compression noise; 255 accepts every pixel.",
          "maximum": 255,
          "minimum": 0,
          "type": "integer"
        }
      },
      "required": [
        "input"
      ],
      "type": "object"
    }
  }
}