{"openapi":"3.1.0","info":{"title":"2D Digital Effects API","version":"2.0.0","description":"Discover Paper Shaders plus 2D Digital Canvas and GPU effects, then validate portable recipes. Image processing remains in the user's browser."},"servers":[{"url":"https://effects.2d.digital"}],"paths":{"/api/v1":{"get":{"summary":"API capabilities","responses":{"200":{"description":"OK"}}}},"/api/v1/health":{"get":{"summary":"Service health","responses":{"200":{"description":"Healthy"}}}},"/api/v1/effects":{"get":{"summary":"List effects","parameters":[{"name":"asset","in":"query","schema":{"enum":["photo","logo","graphic"]}},{"name":"category","in":"query","schema":{"enum":["image-filter","logo-motion","composition","photo-treatment","transition","interactive"]}},{"name":"q","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Effect catalog","content":{"application/json":{"schema":{"type":"object","properties":{"count":{"type":"integer"},"effects":{"type":"array","items":{"$ref":"#/components/schemas/EffectSummary"}}}}}}}}}},"/api/v1/effects/{slug}":{"get":{"summary":"Get one effect and an example recipe","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Effect detail"},"404":{"description":"Unknown effect"}}}},"/api/v1/recipes/validate":{"post":{"summary":"Validate and normalize a version 1, 2, or 3 effect recipe","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EffectRecipe"}}}},"responses":{"200":{"description":"Valid recipe"},"422":{"description":"Invalid recipe"}}}},"/mcp":{"post":{"summary":"MCP Streamable HTTP JSON-RPC endpoint","responses":{"200":{"description":"MCP result"}}}}},"components":{"schemas":{"EffectSummary":{"type":"object","required":["slug","name","component","engine","gpuBackend","pixiFilter","transition","particleEffect"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"component":{"type":"string"},"engine":{"enum":["paper","canvas","gpu"]},"gpuBackend":{"oneOf":[{"enum":["pixi","webgl2-fluid","webgl2-transition","webgl2-particles"]},{"type":"null"}],"description":"GPU implementation backend. Null for Paper and Canvas effects."},"pixiFilter":{"oneOf":[{"enum":["advanced-bloom","ascii","bevel","bulge-pinch","color-replace","cross-hatch","crt","drop-shadow","emboss","motion-blur","pixelate","radial-blur","reflection","shockwave","tilt-shift","twist","zoom-blur"]},{"type":"null"}],"description":"PixiJS Filters implementation, or null when the effect uses another renderer."},"transition":{"oneOf":[{"enum":["cross-zoom","film-burn","glitch-displace","dreamy-warp","water-drop","block-dissolve","grid-flip","morph","luma-reveal","directional-warp","kaleidoscope","fluid-mask-reveal"]},{"type":"null"}]},"particleEffect":{"oneOf":[{"enum":["particle-dissolve","fluid-reassembly","chromatic-shatter"]},{"type":"null"}]},"install":{"oneOf":[{"type":"string"},{"type":"null"}],"description":"Exact dependency command, or null when the generated code is standalone."},"runtimeVersion":{"type":"string"}}},"EffectRecipe":{"type":"object","required":["schemaVersion","library","engine","effect","preset","parameters","layers","interactions","timeline","output"],"properties":{"schemaVersion":{"enum":[1,2,3]},"library":{"type":"object","properties":{"name":{"enum":["@paper-design/shaders-react","@2d-digital/canvas-effects","@2d-digital/gpu-effects"]},"version":{"type":"string"}},"required":["name","version"]},"engine":{"enum":["paper","canvas","gpu"]},"effect":{"type":"string"},"preset":{"type":"string"},"parameters":{"type":"object","additionalProperties":true},"layers":{"type":"array","items":{"type":"object","additionalProperties":true},"maxItems":8},"interactions":{"type":"array","items":{"type":"object","additionalProperties":true},"maxItems":12},"timeline":{"type":"object","required":["duration","loop","easing"],"properties":{"duration":{"type":"number","minimum":0.5,"maximum":30},"loop":{"type":"boolean"},"easing":{"enum":["linear","ease-in-out","spring"]}}},"compositionMode":{"enum":["background","mask","blend"]},"output":{"type":"object","required":["width","height","transparent"],"properties":{"width":{"type":"integer","minimum":64,"maximum":8192},"height":{"type":"integer","minimum":64,"maximum":8192},"transparent":{"type":"boolean"}}}}}}}}