{
  "slug": "frequency-distribution",
  "name": "gizza-ai/frequency-distribution",
  "version": "0.1.0",
  "title": "Frequency Distribution — Character, byte & n-gram frequency table — gizza.ai",
  "description": "Build a character, byte, or n-gram frequency table from text or hex, with counts and percentages, ranked most to least frequent — in your browser. Nothing is uploaded.",
  "tags": [
    "frequency distribution",
    "character frequency",
    "letter frequency",
    "byte frequency",
    "n-gram frequency",
    "frequency analysis",
    "frequency table",
    "bigram counter"
  ],
  "category": "math",
  "urls": {
    "page": "https://gizza.ai/tools/frequency-distribution/",
    "markdown": "https://gizza.ai/tools/frequency-distribution/index.md",
    "descriptor": "https://gizza.ai/tools/frequency-distribution/tool.json",
    "deep_link_example": "https://gizza.ai/tools/frequency-distribution/?input=Paste%20text%20to%20analyze%E2%80%A6&input_kind=text&mode=char&n=2&case_sensitive=true"
  },
  "cli": "gizza tool frequency-distribution \"Paste text to analyze…\"",
  "tool": {
    "description": "Build a frequency table over the symbols of an input, ranked most to least frequent with counts and percentages. mode='char' tallies Unicode characters (default), 'byte' tallies raw bytes (shown as 0xNN), 'ngram' tallies overlapping n-character windows (set n, default 2). input_kind='text' reads input literally (default); 'hex' decodes a hex string into bytes first. case_sensitive (default true) controls whether 'A'/'a' are grouped (char/ngram only). Returns each distinct symbol with its count and percent of the total, plus the number of distinct symbols and the grand total. Runs locally.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "case_sensitive": {
          "default": true,
          "description": "When true (default), 'A' and 'a' count separately; false groups them (char/ngram modes only — byte mode is always raw).",
          "type": "boolean"
        },
        "input": {
          "description": "The text (or hex string, if input_kind=hex) to analyze.",
          "type": "string"
        },
        "input_kind": {
          "default": "text",
          "description": "How to read 'input': 'text' (default) literally, or 'hex' to decode a hex string into bytes first.",
          "enum": [
            "text",
            "hex"
          ],
          "type": "string"
        },
        "mode": {
          "default": "char",
          "description": "What to tally: 'char' (Unicode characters, default), 'byte' (raw bytes), or 'ngram' (overlapping n-character windows).",
          "enum": [
            "char",
            "byte",
            "ngram"
          ],
          "type": "string"
        },
        "n": {
          "default": 2,
          "description": "Window size for mode=ngram (e.g. 2 = bigrams). Ignored for char/byte modes.",
          "minimum": 1,
          "type": "integer"
        }
      },
      "required": [
        "input"
      ],
      "type": "object"
    }
  }
}