{"ok":true,"site":{"host":"gyng.github.io","url":"https://gyng.github.io/ditherer/#!z:eJyVUdtOwzAM_Zc8u5BLszR9G0LwCAIhIU0TSltvq-hlSsMQTPt3nHXdeIS2ae3j42PX3rMdyyWwcuPqjuWLPaM3u2v6ryp5Dlh3Bfo1A1YTWqE1yqkyMaXWSVoUIikUVomoVlLz1KbcIVF7lu_Z1jUYAkazcy192cuA_npeuW2od0caGX03REbZN70na7HgEG-p9RLIFimImbq4woL85eoZQdnJF0KAASUmV3FQMf0SN6RH2bMJmEkKj2dEjILxORG4BRtjE2BTkIKD0WdCtKhdIo6I5ClksdGpiJTUA1WWmnJHhBSkMmDOOfqoN53lkpYR53FbD8F1Jc6bde_rsGlphk_3N2_zx8enh1d2oIuoa5avXDMgsIblwX-Q8TkZjla7Z0PpEbvB7dBHl2Ro4MdNv5NigS6MO_vTenPX1e3zFrGiJCokrqSSqeEmM5nIaFQHGHU3zrd9V5f_0Q7YbnvvmpvmrJ_wq0xppbi1VikjDU_jX39T_1Pr50rLOJIfxi_COA","type":"live","desc":"Online retro filter app for photos and videos. Dither, glitch, pixelsort, CRT/VHS, and more!","tools":[{"name":"ditherer.listFilters","kind":"answer","impl":"imperative","description":"Find image and video filters available in Ditherer by name, description, or exact category. Use this before choosing a filter for a chain.","title":"List Ditherer filters","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"category":{"type":"string"},"query":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.listPresets","kind":"answer","impl":"imperative","description":"Find curated Ditherer filter-chain presets by name, description, or exact category. Use this before applying a preset.","title":"List Ditherer presets","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"category":{"type":"string"},"query":{"type":"string"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.getCurrentChain","kind":"answer","impl":"imperative","description":"Inspect Ditherer's current filter chain, selected stage, current values, and editable option definitions. Use this before changing a stage option.","title":"Inspect current filter chain","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.applyPreset","kind":"act","impl":"imperative","description":"Replace the current Ditherer chain with one named preset from listPresets and update the visible editor.","title":"Apply a Ditherer preset","inputSchema":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Preset name from listPresets."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.setFilterOption","kind":"act","impl":"imperative","description":"Set one editable option on a Ditherer chain stage and update the visible output. Use getCurrentChain first for valid names, types, ranges, and enum values.","title":"Set a filter option","inputSchema":{"type":"object","required":["index","optionName","value"],"properties":{"index":{"type":"number","description":"0-based chain index."},"optionName":{"type":"string"},"value":{"description":"New value matching the option definition returned by getCurrentChain.","oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array"},{"type":"object"}]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.loadMedia","kind":"act","impl":"imperative","description":"Load one image or video from a URL or base64 data URL into Ditherer and update the visible source preview.","title":"Load media into Ditherer","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Remote or relative URL to media."},"dataUrl":{"type":"string","description":"data:* base64 string for media."},"filename":{"type":"string"},"mimeType":{"type":"string"},"volume":{"type":"number"},"playbackRate":{"type":"number"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.exportImage","kind":"act","impl":"imperative","description":"Encode Ditherer's current visible filtered frame as PNG, JPEG, or WebP, optionally downloading it or returning a data URL.","title":"Export current image","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["png","jpeg","webp"]},"quality":{"type":"number"},"filename":{"type":"string"},"download":{"type":"boolean"},"returnDataUrl":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"},{"name":"ditherer.exportVideo","kind":"act","impl":"imperative","description":"Record Ditherer's current visible filtered canvas as a short WebM clip, optionally downloading it or returning a data URL.","title":"Export a short video","inputSchema":{"type":"object","properties":{"durationSeconds":{"type":"number","description":"Clip duration in seconds."},"fps":{"type":"number","description":"Recording FPS."},"mimeType":{"type":"string","description":"Optional preferred MIME type."},"filename":{"type":"string"},"download":{"type":"boolean"},"returnDataUrl":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/ditherer/"}],"category":"Media & Personal","favicon":"/favicons/gyng.github.io.svg","apiSurface":"spec","toolCount":8}}