{"ok":true,"site":{"host":"pixelforge-studio.himomohi.workers.dev","url":"https://pixelforge-studio.himomohi.workers.dev/","type":"live","desc":"A professional browser pixel-art editor for drawing, frame animation, palettes, sprite sheets, GIF export, and WebMCP automation.","tools":[{"name":"get_project_state","kind":"answer","impl":"imperative","description":"Read a concise project summary. Set includePixels only when exact cel data is required.","title":"Get project state","annotations":{"openWorldHint":false,"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"includePixels":{"type":"boolean","description":"Include every cel pixel. This can be a large response."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_projects","kind":"answer","impl":"imperative","description":"List every browser-local PixelForge project with its stable id, name, dimensions, frame count, layer count, and last update time.","title":"List local projects","annotations":{"openWorldHint":false,"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"select_project","kind":"act","impl":"imperative","description":"Save the current project and switch to another browser-local project by stable id.","title":"Select project","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["projectId"],"properties":{"projectId":{"type":"string","minLength":1,"maxLength":160}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"duplicate_project","kind":"act","impl":"imperative","description":"Create and select a new browser-local copy without changing the original project.","title":"Duplicate active project","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_project","kind":"transact","impl":"imperative","description":"Delete one browser-local project by id and select another remaining project.","title":"Delete project","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["projectId"],"properties":{"projectId":{"type":"string","minLength":1,"maxLength":160}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_project_presets","kind":"answer","impl":"imperative","description":"List researched sprite, tile, web-game, and classic-system canvas presets.","title":"List production presets","annotations":{"openWorldHint":false,"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_from_preset","kind":"act","impl":"imperative","description":"Add and select a production-sized project with a matching palette while preserving existing projects.","title":"Create from preset","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["presetId"],"properties":{"presetId":{"type":"string","minLength":1,"maxLength":80},"name":{"type":"string","maxLength":120}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"create_project","kind":"act","impl":"imperative","description":"Add and select a new transparent pixel project while preserving existing projects.","title":"Create project","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["width","height"],"properties":{"width":{"type":"integer","minimum":1,"maximum":4096,"description":"Canvas width in pixels."},"height":{"type":"integer","minimum":1,"maximum":4096,"description":"Canvas height in pixels."},"name":{"type":"string","maxLength":120,"description":"Project name."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"image_to_pixel","kind":"act","impl":"imperative","description":"Create a new editable project from a bounded image. strict-99 is the default: it dynamically preserves the source or transparent-subject ratio, forbids crop/stretch, uses a detail-preserving palette, and returns a measured fidelity report. Use manual only when the user explicitly requests a stylized or lower-fidelity result.","title":"Reconstruct image as pixel art","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["imageDataUrl"],"properties":{"imageDataUrl":{"type":"string","pattern":"^data:image/(png|jpeg|webp);base64,","maxLength":22400000,"description":"Base64 image data URL; arbitrary remote URLs are not accepted."},"name":{"type":"string","maxLength":120},"resolutionMode":{"type":"string","enum":["source-exact","auto-faithful","custom"],"description":"Defaults to auto-faithful. Custom requires width and height."},"fidelityMode":{"type":"string","enum":["strict-99","balanced","manual"],"description":"Defaults to strict-99. Manual is an explicit opt-out from the fidelity guardrails."},"width":{"type":"integer","minimum":1,"maximum":4096,"description":"Editable output width for custom mode."},"height":{"type":"integer","minimum":1,"maximum":4096,"description":"Editable output height for custom mode."},"maxColors":{"type":"integer","minimum":2,"maximum":256,"description":"Adaptive palette size; strict-99 enforces at least 128."},"dither":{"type":"string","enum":["none","ordered-4x4","floyd-steinberg"]},"fit":{"type":"string","enum":["contain","cover","stretch"]},"sampling":{"type":"string","enum":["smooth","nearest"]},"alphaThreshold":{"type":"integer","minimum":0,"maximum":255},"preserveAlpha":{"type":"boolean","description":"Preserve alpha values above the cutoff."},"trimTransparent":{"type":"boolean","description":"Crop transparent source margins before fitting."},"targetOccupancy":{"type":"number","minimum":0.1,"maximum":1,"description":"Share of the canvas occupied by the visible subject."},"hardAlpha":{"type":"boolean","description":"Convert retained edge pixels to fully opaque pixels."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"animation_from_images","kind":"act","impl":"imperative","description":"Align two or more source images into animation frames with strict-99 proportion and sampling guardrails by default, separate pixels shared by every frame from motion details when memory allows, and add the result as a new project.","title":"Create animation from images","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["imageDataUrls"],"properties":{"imageDataUrls":{"type":"array","minItems":2,"maxItems":120,"items":{"type":"string","pattern":"^data:image/(png|jpeg|webp);base64,","maxLength":22400000}},"sourceNames":{"type":"array","maxItems":120,"items":{"type":"string","maxLength":180}},"name":{"type":"string","maxLength":120},"resolutionMode":{"type":"string","enum":["source-exact","auto-faithful","custom"]},"fidelityMode":{"type":"string","enum":["strict-99","balanced","manual"]},"width":{"type":"integer","minimum":1,"maximum":4096},"height":{"type":"integer","minimum":1,"maximum":4096},"maxColors":{"type":"integer","minimum":2,"maximum":256},"alphaThreshold":{"type":"integer","minimum":0,"maximum":255},"targetOccupancy":{"type":"number","minimum":0.1,"maximum":1},"fps":{"type":"integer","minimum":1,"maximum":60},"loopMode":{"type":"string","enum":["loop","once","ping-pong"]},"separateLayers":{"type":"boolean","description":"Separate common pixels from per-frame motion details."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.get_state","kind":"answer","impl":"imperative","description":"Read the browser-local reference image metadata and every synchronized view setting without returning the image bytes.","title":"Get reference image state","annotations":{"openWorldHint":false,"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.open_picker","kind":"act","impl":"imperative","description":"Request the browser file picker for a local PNG, JPEG, or WebP. Browser user-activation rules may require the user to click the visible upload control instead.","title":"Open reference image picker","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_from_data_url","kind":"act","impl":"imperative","description":"Validate and store a bounded PNG, JPEG, or WebP data URL as the current browser-local reference image. Remote URLs are never accepted.","title":"Set reference from data URL","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["imageDataUrl"],"properties":{"imageDataUrl":{"type":"string","pattern":"^data:image/(png|jpeg|webp);base64,","maxLength":22400000,"description":"Base64 image data URL; arbitrary remote URLs are not accepted."},"name":{"type":"string","maxLength":180}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.clear","kind":"act","impl":"imperative","description":"Remove the current browser-local reference image while preserving the pixel project.","title":"Clear reference image","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_mode","kind":"act","impl":"imperative","description":"Switch the desktop reference between split, floating overlay, and hidden modes. Mobile continues to use its dedicated sheet viewer.","title":"Set reference display mode","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["mode"],"properties":{"mode":{"type":"string","enum":["split","overlay","hidden"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_zoom","kind":"act","impl":"imperative","description":"Set the reference image scale from 0.1 to 8, where 1 is 100 percent.","title":"Set reference zoom","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["zoom"],"properties":{"zoom":{"type":"number","minimum":0.1,"maximum":8,"description":"Scale multiplier; 1 is 100 percent."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_opacity","kind":"act","impl":"imperative","description":"Set reference image opacity from 0 to 1.","title":"Set reference opacity","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["opacity"],"properties":{"opacity":{"type":"number","minimum":0,"maximum":1,"description":"Opacity from transparent 0 to opaque 1."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_flip","kind":"act","impl":"imperative","description":"Set horizontal and/or vertical reference mirroring. At least one field is required.","title":"Set reference flips","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"minProperties":1,"properties":{"flipX":{"type":"boolean","description":"Mirror left to right."},"flipY":{"type":"boolean","description":"Mirror top to bottom."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_panel_size","kind":"act","impl":"imperative","description":"Set the desktop split reference panel width in pixels.","title":"Set reference panel width","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["panelSize"],"properties":{"panelSize":{"type":"integer","minimum":220,"maximum":720,"description":"Desktop panel width in pixels."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_overlay_rect","kind":"act","impl":"imperative","description":"Move and resize the floating reference using workspace-relative pixel bounds.","title":"Set floating reference bounds","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"integer","minimum":0,"maximum":4096},"y":{"type":"integer","minimum":0,"maximum":4096},"width":{"type":"integer","minimum":260,"maximum":1600},"height":{"type":"integer","minimum":220,"maximum":1200}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.fit","kind":"act","impl":"imperative","description":"Fit the entire reference image inside its current panel or floating window.","title":"Fit reference image","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_pinned","kind":"act","impl":"imperative","description":"Pin or unpin the floating reference so its position and size cannot be changed by pointer input.","title":"Pin floating reference","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["pinned"],"properties":{"pinned":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.set_collapsed","kind":"act","impl":"imperative","description":"Collapse or expand the desktop split reference panel without clearing its image.","title":"Collapse reference panel","annotations":{"openWorldHint":false,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["collapsed"],"properties":{"collapsed":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.pixelize","kind":"act","impl":"imperative","description":"Reuse the current browser-local reference as image-to-pixel input. strict-99 is the default and dynamically derives a canvas from transparent content bounds, preserves aspect ratio without cropping or stretching, and returns an auditable measured score.","title":"Convert current reference to pixel art","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","maxLength":120},"resolutionMode":{"type":"string","enum":["source-exact","auto-faithful","custom"],"description":"Defaults to auto-faithful. Supplying width and height implies custom mode."},"fidelityMode":{"type":"string","enum":["strict-99","balanced","manual"],"description":"Defaults to strict-99. Manual is an explicit opt-out from guardrails."},"width":{"type":"integer","minimum":1,"maximum":4096,"description":"Editable output width for custom mode."},"height":{"type":"integer","minimum":1,"maximum":4096,"description":"Editable output height for custom mode."},"maxColors":{"type":"integer","minimum":2,"maximum":256,"description":"Adaptive palette size; strict-99 enforces at least 128."},"dither":{"type":"string","enum":["none","ordered-4x4","floyd-steinberg"]},"fit":{"type":"string","enum":["contain","cover","stretch"]},"sampling":{"type":"string","enum":["smooth","nearest"]},"alphaThreshold":{"type":"integer","minimum":0,"maximum":255},"preserveAlpha":{"type":"boolean","description":"Preserve alpha values above the cutoff."},"trimTransparent":{"type":"boolean","description":"Crop transparent source margins before fitting."},"targetOccupancy":{"type":"number","minimum":0.1,"maximum":1},"hardAlpha":{"type":"boolean","description":"Convert retained edge pixels to fully opaque pixels."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reference_image.audit_fidelity","kind":"act","impl":"imperative","description":"Measure the active frame against the browser-local reference after every reference-driven WebMCP workflow. A verified_99 result requires a score of at least 0.990, every metric floor, exact dimensions, and a meaningful reference alpha mask; never describe an unscorable or degraded result as 99% verified.","title":"Audit current frame against reference","annotations":{"openWorldHint":false,"readOnlyHint":true,"idempotentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"alphaThreshold":{"type":"integer","minimum":0,"maximum":255,"description":"Alpha cutoff used for the silhouette comparison."},"trimTransparent":{"type":"boolean","description":"Compare against transparent content bounds."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"import_project","kind":"act","impl":"imperative","description":"Add and select a complete PixelForge project JSON object while preserving existing projects.","title":"Import project data","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["project"],"properties":{"project":{"type":"object","description":"PixelForge project object."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rename_project","kind":"act","impl":"imperative","description":"Change the current project name.","title":"Rename project","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":120}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"resize_canvas","kind":"act","impl":"imperative","description":"Resize every cel and anchor existing pixels to a chosen edge or the center.","title":"Resize canvas","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"required":["width","height"],"properties":{"width":{"type":"integer","minimum":1,"maximum":4096},"height":{"type":"integer","minimum":1,"maximum":4096},"anchor":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_active_tool","kind":"act","impl":"imperative","description":"Select pencil, eraser, fill, line, rectangle, ellipse, picker, marquee, or hand.","title":"Select drawing tool","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["tool"],"properties":{"tool":{"type":"string","enum":["pencil","eraser","fill","line","rectangle","ellipse","picker","select","hand"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_primary_color","kind":"act","impl":"imperative","description":"Set the foreground drawing color.","title":"Set primary color","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["color"],"properties":{"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"Hex color as #RRGGBB or #RRGGBBAA."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_secondary_color","kind":"act","impl":"imperative","description":"Set the right-click background drawing color.","title":"Set secondary color","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["color"],"properties":{"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"Hex color as #RRGGBB or #RRGGBBAA."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_brush_size","kind":"act","impl":"imperative","description":"Set the square pixel brush size from 1 to 8.","title":"Set brush size","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["size"],"properties":{"size":{"type":"integer","minimum":1,"maximum":8}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"load_palette","kind":"act","impl":"imperative","description":"Replace the active palette with named hex colors.","title":"Load color palette","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["colors"],"properties":{"name":{"type":"string","maxLength":80},"colors":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"Hex color as #RRGGBB or #RRGGBBAA."}}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"draw_pixels","kind":"act","impl":"imperative","description":"Write a bounded batch of exact pixels into the active cel atomically.","title":"Draw pixel batch","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["pixels"],"properties":{"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"Hex color as #RRGGBB or #RRGGBBAA."},"pixels":{"type":"array","minItems":1,"maxItems":1048576,"items":{"type":"object","additionalProperties":false,"required":["x","y"],"properties":{"x":{"type":"integer","minimum":0,"maximum":4095,"description":"Zero-based pixel x coordinate."},"y":{"type":"integer","minimum":0,"maximum":4095,"description":"Zero-based pixel y coordinate."},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"Hex color as #RRGGBB or #RRGGBBAA."}}}}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_edit","kind":"act","impl":"imperative","description":"Run the editor's line, rectangle, ellipse, or flood-fill algorithm on the active cel.","title":"Draw shape or fill","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["operation","start"],"properties":{"operation":{"type":"string","enum":["line","rectangle","ellipse","fill"]},"start":{"type":"object","additionalProperties":false,"required":["x","y"],"properties":{"x":{"type":"integer","minimum":0,"maximum":4095,"description":"Zero-based pixel x coordinate."},"y":{"type":"integer","minimum":0,"maximum":4095,"description":"Zero-based pixel y coordinate."}}},"end":{"type":"object","additionalProperties":false,"required":["x","y"],"properties":{"x":{"type":"integer","minimum":0,"maximum":4095,"description":"Zero-based pixel x coordinate."},"y":{"type":"integer","minimum":0,"maximum":4095,"description":"Zero-based pixel y coordinate."}}},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}([0-9a-fA-F]{2})?$","description":"Hex color as #RRGGBB or #RRGGBBAA."},"filled":{"type":"boolean","description":"Fill the interior of rectangles or ellipses."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"clear_active_cel","kind":"act","impl":"imperative","description":"Erase all pixels in the active layer and frame unless the layer is locked.","title":"Clear active cel","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_selection","kind":"act","impl":"imperative","description":"Create or clear the rectangular marquee selection.","title":"Set marquee selection","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"selection":{"oneOf":[{"type":"object","additionalProperties":false,"required":["x","y","width","height"],"properties":{"x":{"type":"integer","minimum":0,"maximum":4095},"y":{"type":"integer","minimum":0,"maximum":4095},"width":{"type":"integer","minimum":1,"maximum":4096},"height":{"type":"integer","minimum":1,"maximum":4096}}},{"type":"null"}]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_selection","kind":"transact","impl":"imperative","description":"Clear pixels inside the current marquee on the active cel.","title":"Delete selected pixels","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_frame","kind":"act","impl":"imperative","description":"Append a blank animation frame.","title":"Add frame","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"duplicate_frame","kind":"act","impl":"imperative","description":"Copy the active frame and every layer cel.","title":"Duplicate frame","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_frame","kind":"transact","impl":"imperative","description":"Delete the active animation frame.","title":"Delete frame","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_layer","kind":"act","impl":"imperative","description":"Add a transparent layer.","title":"Add layer","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"duplicate_layer","kind":"act","impl":"imperative","description":"Copy the active layer and all cels.","title":"Duplicate layer","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_layer","kind":"transact","impl":"imperative","description":"Delete the active layer.","title":"Delete layer","annotations":{"openWorldHint":false,"destructiveHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"toggle_layer_visibility","kind":"act","impl":"imperative","description":"Show or hide the active layer.","title":"Toggle layer visibility","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"undo","kind":"act","impl":"imperative","description":"Undo the latest recorded project edit.","title":"Undo","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"redo","kind":"act","impl":"imperative","description":"Redo the next project edit.","title":"Redo","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_active_frame","kind":"act","impl":"imperative","description":"Select an animation frame by zero-based index.","title":"Select frame","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["index"],"properties":{"index":{"type":"integer","minimum":0,"maximum":9999}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_frame_duration","kind":"act","impl":"imperative","description":"Set the active frame duration in milliseconds.","title":"Set frame duration","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["ms"],"properties":{"ms":{"type":"integer","minimum":20,"maximum":10000}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reorder_frame","kind":"act","impl":"imperative","description":"Move the active frame to a zero-based timeline index.","title":"Reorder frame","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["to"],"properties":{"to":{"type":"integer","minimum":0,"maximum":9999}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rename_layer","kind":"act","impl":"imperative","description":"Rename the active layer.","title":"Rename layer","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","minLength":1,"maxLength":120}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"lock_layer","kind":"act","impl":"imperative","description":"Lock, unlock, or toggle the active layer edit lock.","title":"Lock layer","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"locked":{"type":"boolean","description":"Omit to toggle."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_layer_opacity","kind":"act","impl":"imperative","description":"Set active layer opacity from 0 to 100 percent.","title":"Set layer opacity","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["opacity"],"properties":{"opacity":{"type":"number","minimum":0,"maximum":100}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_active_layer","kind":"act","impl":"imperative","description":"Select a layer by zero-based index.","title":"Select layer","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["index"],"properties":{"index":{"type":"integer","minimum":0,"maximum":9999}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reorder_layer","kind":"act","impl":"imperative","description":"Move the active layer to a zero-based stack index.","title":"Reorder layer","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["to"],"properties":{"to":{"type":"integer","minimum":0,"maximum":9999}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_zoom","kind":"act","impl":"imperative","description":"Set the editor's integer pixel zoom multiplier from 1 to 64.","title":"Set canvas zoom","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["zoom"],"properties":{"zoom":{"type":"integer","minimum":1,"maximum":64}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"toggle_grid","kind":"act","impl":"imperative","description":"Show, hide, or toggle the pixel grid.","title":"Toggle grid","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean","description":"Omit to toggle the current value."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"toggle_onion_skin","kind":"act","impl":"imperative","description":"Show, hide, or toggle adjacent animation frames.","title":"Toggle onion skin","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean","description":"Omit to toggle the current value."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"toggle_symmetry","kind":"act","impl":"imperative","description":"Enable, disable, or toggle mirrored drawing on both axes.","title":"Toggle symmetry","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"enabled":{"type":"boolean","description":"Omit to toggle the current value."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"playback","kind":"act","impl":"imperative","description":"Play, pause, or stop the frame animation.","title":"Control animation playback","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["action"],"properties":{"action":{"type":"string","enum":["play","pause","stop"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_png","kind":"act","impl":"imperative","description":"Download the active frame as a crisp PNG.","title":"Export png","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"scale":{"type":"integer","minimum":1,"maximum":16}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_gif","kind":"act","impl":"imperative","description":"Download all frames as a looping animated GIF.","title":"Export gif","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"scale":{"type":"integer","minimum":1,"maximum":8},"loop":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_spritesheet","kind":"act","impl":"imperative","description":"Download a PNG sprite sheet and JSON frame metadata.","title":"Export spritesheet","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"scale":{"type":"integer","minimum":1,"maximum":16},"columns":{"type":"integer","minimum":1,"maximum":9999},"gap":{"type":"integer","minimum":0,"maximum":128},"layout":{"type":"string","enum":["horizontal","vertical","grid"]}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_project","kind":"act","impl":"imperative","description":"Download the editable PixelForge project file.","title":"Export project","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export_game_bundle","kind":"act","impl":"imperative","description":"Download a game-ready ZIP with transparent sprite sheets, optional PNG frame sequence, atlas metadata, timing, pivots, engine helpers, and a README.","title":"Export game-bundle","annotations":{"openWorldHint":false},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"engine":{"type":"string","enum":["universal","unity","godot","phaser","unreal","libgdx","gamemaker","rpg-maker","love2d"]},"scale":{"type":"integer","minimum":1,"maximum":16},"columns":{"type":"integer","minimum":1,"maximum":9999},"gap":{"type":"integer","minimum":0,"maximum":128},"includeFrameSequence":{"type":"boolean"}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Media & Personal","favicon":"/favicons/pixelforge-studio.himomohi.workers.dev.svg","apiSurface":"spec","toolCount":65}}