{
  "title": "Stereogram generator",
  "human_url": "https://happytails.ai/en/image-tools/stereogram-generator/",
  "agent_url": "https://happytails.ai/agents/en/image-tools/stereogram-generator/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/image-tools/stereogram-generator.md",
  "content": "Stereogram generator\nTurn a grayscale depth map into a random-dot or textured autostereogram that shows a hidden 3D shape when you look through the page. Download it as a PNG sized for the DPI you choose.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nHow to use Stereogram generator\nChoose a grayscale depth map, and optionally a small repeating texture image as a second file.\nSet the DPI of the screen or printer and your eye separation in inches.\nChoose whether white or black is near, then run the tool.\nDownload the PNG and view or print it at exactly the chosen DPI.\nUseful next steps\nGrayscale image\nInvert image\nResize image\nHow it works\nThe tool follows Thimbleby, Inglis and Witten, \"Displaying 3D images: algorithms for single-image random-dot stereograms\", IEEE Computer 27(10), 1994, including their hidden-surface removal. For each row, pixels that the two eyes would see on the same 3D point are linked so they get the same color; the separation shrinks for near parts of the depth map. Unlinked pixels get random black and white or color dots from a seeded generator, or colors from your texture tile.\nSize, DPI and eye separation\nSeparation is worked out in pixels as eye separation x DPI, so the picture only shows the intended depth when it is displayed or printed at the DPI you enter. Print with scaling turned off. The depth map must be wider than eye separation x DPI pixels, so at least 241 pixels at 2.5 inches and 96 DPI. The two focus dots near the top are one far-plane separation apart; relax your eyes until they look like three dots.\nDepth map tips\nDepth comes from the brightness of the depth map, 0 far and 1 near, after the polarity setting. Smooth, simple shapes with large areas work best; fine detail and sharp edges are hard to see. The same depth map, settings and seed always give the same picture.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Grayscale image",
      "url": "https://happytails.ai/en/image-tools/grayscale-image/"
    },
    {
      "name": "Invert image",
      "url": "https://happytails.ai/en/image-tools/invert-image/"
    },
    {
      "name": "Resize image",
      "url": "https://happytails.ai/en/image-tools/resize-image/"
    }
  ],
  "tool": {
    "id": "stereogram-generator",
    "category": "image-tools",
    "built": true,
    "requirements": "Images stay in this browser and are never uploaded. Use a still PNG, JPEG or WebP depth map up to 20 MiB and 8 million pixels, plus an optional texture image up to 20 MiB and 4 million pixels. DPI 72 to 600, eye separation 1.5 to 3.5 inches, depth range 0.1 to 0.5, seed 0 to 4,294,967,295. The depth map must be wider than eye separation x DPI pixels. Processing stops after 30 seconds. You get a PNG at the depth map size and a JSON report.",
    "implementation": {
      "fields": [
        {
          "key": "fileOrder",
          "label": "When two files are selected",
          "value": "depth-first",
          "type": "select",
          "values": [
            "depth-first",
            "texture-first"
          ],
          "labels": {
            "depth-first": "First file is the depth map",
            "texture-first": "First file is the texture"
          }
        },
        {
          "key": "dpi",
          "label": "Print or screen resolution (DPI)",
          "value": "96",
          "type": "number",
          "min": 72,
          "max": 600,
          "step": 1
        },
        {
          "key": "eyeSeparation",
          "label": "Eye separation in inches",
          "value": "2.5",
          "type": "number",
          "min": 1.5,
          "max": 3.5,
          "step": 0.1
        },
        {
          "key": "depthOfField",
          "label": "Depth range (0.1 to 0.5)",
          "value": "0.33",
          "type": "number",
          "min": 0.1,
          "max": 0.5,
          "step": 0.01
        },
        {
          "key": "polarity",
          "label": "Near parts of the depth map are",
          "value": "white-near",
          "type": "select",
          "values": [
            "white-near",
            "black-near"
          ],
          "labels": {
            "white-near": "White",
            "black-near": "Black"
          }
        },
        {
          "key": "dots",
          "label": "Random dots",
          "value": "black-white",
          "type": "select",
          "values": [
            "black-white",
            "color"
          ],
          "labels": {
            "black-white": "Black and white",
            "color": "Color"
          }
        },
        {
          "key": "seed",
          "label": "Random seed",
          "value": "1",
          "type": "number",
          "min": 0,
          "max": 4294967295,
          "step": 1
        },
        {
          "key": "guides",
          "label": "Draw two focus dots",
          "value": true,
          "type": "checkbox"
        }
      ],
      "registrationFamily": "raster-masks-and-textures",
      "files": true,
      "input": false,
      "multiple": true,
      "accept": ".png,.jpg,.jpeg,.webp",
      "maxFileBytes": 20971520,
      "deferImagePreview": true,
      "note": "Images are processed in this browser and never uploaded. Use still PNG, JPEG or WebP files up to 20 MiB each.",
      "experience": {
        "automatic": false,
        "single": true,
        "inputMaxLength": 1000000,
        "inputMode": "text",
        "label": "Depth map",
        "placeholder": "Choose a grayscale depth map, plus an optional texture",
        "help": "A still image up to 20 MiB and 8 million pixels; a second file is used as the repeating texture. Up to 1,000,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# Stereogram generator\n\n- Human page: https://happytails.ai/en/image-tools/stereogram-generator/\n- Markdown: https://happytails.ai/en/image-tools/stereogram-generator.md\n- Structured JSON: https://happytails.ai/agents/en/image-tools/stereogram-generator/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `stereogram-generator` |\n| Category | image-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nImages are processed in this browser and never uploaded. Use still PNG, JPEG or WebP files up to 20 MiB each.\n\n### Inputs and settings\n\nNo free-text input is required. Use the file inputs and/or settings below.\n\nAccepted browser files: `.png,.jpg,.jpeg,.webp`. Multiple files are supported.\n\nBrowser file-input limit: 20971520 bytes in total. HTTP limits can differ.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `fileOrder` | When two files are selected | select | \"depth-first\" | Allowed: depth-first, texture-first |\n| `dpi` | Print or screen resolution (DPI) | number | \"96\" | min=72 max=600 step=1 |\n| `eyeSeparation` | Eye separation in inches | number | \"2.5\" | min=1.5 max=3.5 step=0.1 |\n| `depthOfField` | Depth range (0.1 to 0.5) | number | \"0.33\" | min=0.1 max=0.5 step=0.01 |\n| `polarity` | Near parts of the depth map are | select | \"white-near\" | Allowed: white-near, black-near |\n| `dots` | Random dots | select | \"black-white\" | Allowed: black-white, color |\n| `seed` | Random seed | number | \"1\" | min=0 max=4294967295 step=1 |\n| `guides` | Draw two focus dots | checkbox | true |  |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nImages stay in this browser and are never uploaded. Use a still PNG, JPEG or WebP depth map up to 20 MiB and 8 million pixels, plus an optional texture image up to 20 MiB and 4 million pixels. DPI 72 to 600, eye separation 1.5 to 3.5 inches, depth range 0.1 to 0.5, seed 0 to 4,294,967,295. The depth map must be wider than eye separation x DPI pixels. Processing stops after 30 seconds. You get a PNG at the depth map size and a JSON report.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"stereogram-generator\",\n  \"category\": \"image-tools\",\n  \"built\": true,\n  \"requirements\": \"Images stay in this browser and are never uploaded. Use a still PNG, JPEG or WebP depth map up to 20 MiB and 8 million pixels, plus an optional texture image up to 20 MiB and 4 million pixels. DPI 72 to 600, eye separation 1.5 to 3.5 inches, depth range 0.1 to 0.5, seed 0 to 4,294,967,295. The depth map must be wider than eye separation x DPI pixels. Processing stops after 30 seconds. You get a PNG at the depth map size and a JSON report.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"fileOrder\",\n        \"label\": \"When two files are selected\",\n        \"value\": \"depth-first\",\n        \"type\": \"select\",\n        \"values\": [\n          \"depth-first\",\n          \"texture-first\"\n        ],\n        \"labels\": {\n          \"depth-first\": \"First file is the depth map\",\n          \"texture-first\": \"First file is the texture\"\n        }\n      },\n      {\n        \"key\": \"dpi\",\n        \"label\": \"Print or screen resolution (DPI)\",\n        \"value\": \"96\",\n        \"type\": \"number\",\n        \"min\": 72,\n        \"max\": 600,\n        \"step\": 1\n      },\n      {\n        \"key\": \"eyeSeparation\",\n        \"label\": \"Eye separation in inches\",\n        \"value\": \"2.5\",\n        \"type\": \"number\",\n        \"min\": 1.5,\n        \"max\": 3.5,\n        \"step\": 0.1\n      },\n      {\n        \"key\": \"depthOfField\",\n        \"label\": \"Depth range (0.1 to 0.5)\",\n        \"value\": \"0.33\",\n        \"type\": \"number\",\n        \"min\": 0.1,\n        \"max\": 0.5,\n        \"step\": 0.01\n      },\n      {\n        \"key\": \"polarity\",\n        \"label\": \"Near parts of the depth map are\",\n        \"value\": \"white-near\",\n        \"type\": \"select\",\n        \"values\": [\n          \"white-near\",\n          \"black-near\"\n        ],\n        \"labels\": {\n          \"white-near\": \"White\",\n          \"black-near\": \"Black\"\n        }\n      },\n      {\n        \"key\": \"dots\",\n        \"label\": \"Random dots\",\n        \"value\": \"black-white\",\n        \"type\": \"select\",\n        \"values\": [\n          \"black-white\",\n          \"color\"\n        ],\n        \"labels\": {\n          \"black-white\": \"Black and white\",\n          \"color\": \"Color\"\n        }\n      },\n      {\n        \"key\": \"seed\",\n        \"label\": \"Random seed\",\n        \"value\": \"1\",\n        \"type\": \"number\",\n        \"min\": 0,\n        \"max\": 4294967295,\n        \"step\": 1\n      },\n      {\n        \"key\": \"guides\",\n        \"label\": \"Draw two focus dots\",\n        \"value\": true,\n        \"type\": \"checkbox\"\n      }\n    ],\n    \"registrationFamily\": \"raster-masks-and-textures\",\n    \"files\": true,\n    \"input\": false,\n    \"multiple\": true,\n    \"accept\": \".png,.jpg,.jpeg,.webp\",\n    \"maxFileBytes\": 20971520,\n    \"deferImagePreview\": true,\n    \"note\": \"Images are processed in this browser and never uploaded. Use still PNG, JPEG or WebP files up to 20 MiB each.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": true,\n      \"inputMaxLength\": 1000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Depth map\",\n      \"placeholder\": \"Choose a grayscale depth map, plus an optional texture\",\n      \"help\": \"A still image up to 20 MiB and 8 million pixels; a second file is used as the repeating texture. Up to 1,000,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nTurn a grayscale depth map into a random-dot or textured autostereogram that shows a hidden 3D shape when you look through the page. Download it as a PNG sized for the DPI you choose.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n### How to use Stereogram generator\n\n1. Choose a grayscale depth map, and optionally a small repeating texture image as a second file.\n2. Set the DPI of the screen or printer and your eye separation in inches.\n3. Choose whether white or black is near, then run the tool.\n4. Download the PNG and view or print it at exactly the chosen DPI.\n\n## Useful next steps\n\n- [Grayscale image](https://happytails.ai/en/image-tools/grayscale-image/) ([Markdown](https://happytails.ai/en/image-tools/grayscale-image.md))\n\n- [Invert image](https://happytails.ai/en/image-tools/invert-image/) ([Markdown](https://happytails.ai/en/image-tools/invert-image.md))\n\n- [Resize image](https://happytails.ai/en/image-tools/resize-image/) ([Markdown](https://happytails.ai/en/image-tools/resize-image.md))\n\n## How it works\n\nThe tool follows Thimbleby, Inglis and Witten, \"Displaying 3D images: algorithms for single-image random-dot stereograms\", IEEE Computer 27(10), 1994, including their hidden-surface removal. For each row, pixels that the two eyes would see on the same 3D point are linked so they get the same color; the separation shrinks for near parts of the depth map. Unlinked pixels get random black and white or color dots from a seeded generator, or colors from your texture tile.\n\n### Size, DPI and eye separation\n\nSeparation is worked out in pixels as eye separation x DPI, so the picture only shows the intended depth when it is displayed or printed at the DPI you enter. Print with scaling turned off. The depth map must be wider than eye separation x DPI pixels, so at least 241 pixels at 2.5 inches and 96 DPI. The two focus dots near the top are one far-plane separation apart; relax your eyes until they look like three dots.\n\n### Depth map tips\n\nDepth comes from the brightness of the depth map, 0 far and 1 near, after the polarity setting. Smooth, simple shapes with large areas work best; fine detail and sharp edges are hard to see. The same depth map, settings and seed always give the same picture.\n"
}