{"ok":true,"site":{"host":"webroom.openai.chatgpt.site","url":"https://webroom.openai.chatgpt.site/","type":"demo","desc":"A private, browser-based photo editor with precise manual controls and agent-ready WebMCP tools.","tools":[{"name":"get_document_info","kind":"answer","impl":"imperative","description":"Get safe metadata for the active Webroom image, including source and current output pixel dimensions, revision, dirty state, and history counts.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"get_edit_state","kind":"answer","impl":"imperative","description":"Get every manual adjustment, non-destructive geometry value, independently selected filter, and revision for the active image. Manual values are applied on top of the filter.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"get_edit_history","kind":"answer","impl":"imperative","description":"Get concise ordered edit history and redo entries. Returns command summaries and sources without pixel data.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"get_image_preview","kind":"answer","impl":"imperative","description":"Return an original or edited image preview as a bounded data URL. maxDimension is 64–2048 pixels and quality is 1–100.","inputSchema":{"type":"object","properties":{"variant":{"type":"string","enum":["original","edited"],"default":"edited","description":"Whether to render the untouched source or current edit."},"format":{"type":"string","enum":["jpeg","png","webp"],"default":"jpeg"},"maxDimension":{"type":"integer","minimum":64,"maximum":2048,"default":1024},"quality":{"type":"integer","minimum":1,"maximum":100,"default":85}},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"open_image_from_url","kind":"act","impl":"imperative","description":"Open a JPEG, PNG, or WebP from an HTTPS URL using a CORS request without credentials. Set replace true only to discard unexported edits.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Required HTTPS image URL."},"filename":{"type":"string","description":"Optional safe display filename."},"replace":{"type":"boolean","default":false}},"required":["url"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"open_image_from_data_url","kind":"act","impl":"imperative","description":"Open a JPEG, PNG, or WebP data URL up to 12 MiB encoded length. Set replace true only to discard unexported edits.","inputSchema":{"type":"object","properties":{"dataUrl":{"type":"string","description":"Required supported image data URL."},"filename":{"type":"string","description":"Optional safe display filename."},"replace":{"type":"boolean","default":false}},"required":["dataUrl"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_exposure","kind":"act","impl":"imperative","description":"Set the manual exposure layer to an absolute value from -5 through 5. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-5,"maximum":5,"description":"Absolute exposure value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_brightness","kind":"act","impl":"imperative","description":"Set the manual brightness layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute brightness value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_contrast","kind":"act","impl":"imperative","description":"Set the manual contrast layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute contrast value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_highlights","kind":"act","impl":"imperative","description":"Set the manual highlights layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute highlights value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_shadows","kind":"act","impl":"imperative","description":"Set the manual shadows layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute shadows value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_whites","kind":"act","impl":"imperative","description":"Set the manual whites layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute whites value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_blacks","kind":"act","impl":"imperative","description":"Set the manual blacks layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute blacks value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_temperature","kind":"act","impl":"imperative","description":"Set the manual temperature layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute temperature value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_tint","kind":"act","impl":"imperative","description":"Set the manual tint layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute tint value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_saturation","kind":"act","impl":"imperative","description":"Set the manual saturation layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute saturation value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_vibrance","kind":"act","impl":"imperative","description":"Set the manual vibrance layer to an absolute value from -100 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":-100,"maximum":100,"description":"Absolute vibrance value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_sharpening","kind":"act","impl":"imperative","description":"Set the manual sharpening layer to an absolute value from 0 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":100,"description":"Absolute sharpening value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"set_blur","kind":"act","impl":"imperative","description":"Set the manual blur layer to an absolute value from 0 through 100. It is applied on top of the selected filter and creates one undoable edit.","inputSchema":{"type":"object","properties":{"value":{"type":"number","minimum":0,"maximum":100,"description":"Absolute blur value."}},"required":["value"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"apply_filter","kind":"act","impl":"imperative","description":"Select one canonical Webroom filter as an independent undoable layer. Manual adjustment values are preserved; use none to remove only the filter.","inputSchema":{"type":"object","properties":{"filter":{"type":"string","enum":["none","vivid","warm","cool","mono","film","fade"]}},"required":["filter"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"crop_image","kind":"act","impl":"imperative","description":"Crop using whole-pixel x, y, width, and height in the current oriented image coordinates returned by get_document_info.","inputSchema":{"type":"object","properties":{"x":{"type":"integer","minimum":0},"y":{"type":"integer","minimum":0},"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"required":["x","y","width","height"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"rotate_image","kind":"act","impl":"imperative","description":"Rotate the active image by -90, 90, or 180 degrees. Positive values rotate clockwise.","inputSchema":{"type":"object","properties":{"degrees":{"type":"integer","enum":[-90,90,180]}},"required":["degrees"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"flip_image","kind":"act","impl":"imperative","description":"Flip the active image across its horizontal or vertical axis.","inputSchema":{"type":"object","properties":{"axis":{"type":"string","enum":["horizontal","vertical"]}},"required":["axis"],"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"resize_image","kind":"act","impl":"imperative","description":"Resize to positive whole-pixel dimensions. Supply width, height, or both; one omitted dimension preserves aspect ratio.","inputSchema":{"type":"object","properties":{"width":{"type":"integer","minimum":1},"height":{"type":"integer","minimum":1}},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"undo_edit","kind":"act","impl":"imperative","description":"Undo one committed human or agent edit in the active Webroom document.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"redo_edit","kind":"act","impl":"imperative","description":"Redo one previously undone edit in the active Webroom document.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"reset_edits","kind":"act","impl":"imperative","description":"Reset all adjustments and geometry to the untouched source as one undoable command.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"executable":true,"handlerField":"execute"},{"name":"export_image","kind":"act","impl":"imperative","description":"Export the current full-resolution edit as JPEG, PNG, or WebP. Delivery defaults to a local download; bounded data_url delivery returns image data.","inputSchema":{"type":"object","properties":{"format":{"type":"string","enum":["jpeg","png","webp"]},"quality":{"type":"integer","minimum":1,"maximum":100,"default":90},"delivery":{"type":"string","enum":["download","data_url"],"default":"download"}},"required":["format"],"additionalProperties":false},"executable":true,"handlerField":"execute"}],"favicon":"/favicons/webroom.openai.chatgpt.site.png","apiSurface":"spec","_scrape":{"etag":null,"lastModified":null,"scrapedAt":"2026-08-26T07:39:29.612Z"},"category":"Media & Personal","toolCount":28}}