{"ok":true,"site":{"host":"printchum.vercel.app","url":"https://printchum.vercel.app/","type":"live","desc":"Create Layout","tools":[{"name":"get-editor-summary","kind":"answer","impl":"imperative","description":"Returns the current print layout state: paper settings, photo size items with quantities, selected service set, page count, active page, placed item count, paper utilization, unplaced items, and any layout error. Photo pixel data is never included.","title":"Get editor summary","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list-paper-presets","kind":"answer","impl":"imperative","description":"Returns available standard paper presets (id, name, dimensions, unit) plus the user's saved custom paper presets. Use an id from this list as presetId in configure-paper.","title":"List paper presets","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list-photo-size-presets","kind":"answer","impl":"imperative","description":"Returns available photo size presets such as ID photos, passport, wallet, and portrait prints (id, name, dimensions, unit, default quantity). Use an id from this list as presetId in add-photo-size.","title":"List photo size presets","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list-service-sets","kind":"answer","impl":"imperative","description":"Returns the user's saved service sets (packages of photo sizes, paper, and pricing) that can be applied to the editor in one step.","title":"List service sets","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list-nameplate-presets","kind":"answer","impl":"imperative","description":"Returns the available nameplate starting points (id, name, description) such as full name, name and ID, and name with department. Use an id from this list as presetId in configure-nameplate.","title":"List nameplate presets","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"configure-paper","kind":"act","impl":"imperative","description":"Changes the print sheet configuration. Provide presetId to switch to a standard paper, or width/height/unit for custom dimensions. Optionally also set orientation, margin, spacing, and cutting guides. Margin and spacing values are interpreted in the resulting paper display unit. The preview updates immediately.","title":"Configure paper","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"presetId":{"description":"Standard paper preset id, e.g. 'letter', 'legal', 'a4', 'a3', '4r', '5r'.","type":"string"},"width":{"description":"Custom paper width. Requires height and unit when used without presetId.","type":"number","exclusiveMinimum":0,"maximum":1000},"height":{"description":"Custom paper height.","type":"number","exclusiveMinimum":0,"maximum":1000},"unit":{"description":"Unit for custom dimensions, margin, and spacing values.","type":"string","enum":["in","cm","mm"]},"orientation":{"description":"Paper orientation.","type":"string","enum":["portrait","landscape"]},"margin":{"description":"Page margin in the paper's current display unit.","type":"number","minimum":0,"maximum":100},"horizontalSpacing":{"description":"Gap between photos horizontally, in the display unit.","type":"number","minimum":0,"maximum":100},"verticalSpacing":{"description":"Gap between photos vertically, in the display unit.","type":"number","minimum":0,"maximum":100},"cuttingGuidesEnabled":{"description":"Whether cutting guides are drawn on the output.","type":"boolean"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add-photo-size","kind":"act","impl":"imperative","description":"Adds a photo size to the layout by presetId or custom width/height/unit, optionally with a copy quantity, and the preview updates immediately with the new placement. Returns the created item id needed by update-photo-size, remove-photo-size, and configure-nameplate.","title":"Add photo size","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"presetId":{"description":"Photo size preset id, e.g. '2x2', 'passport', 'wallet', '2r', 'half-body'. Omit to use custom dimensions.","type":"string"},"width":{"description":"Custom photo width. Use instead of presetId together with height and unit.","type":"number","exclusiveMinimum":0,"maximum":100},"height":{"description":"Custom photo height.","type":"number","exclusiveMinimum":0,"maximum":100},"unit":{"description":"Unit for custom dimensions (required with custom width/height).","type":"string","enum":["in","cm","mm"]},"quantity":{"description":"Number of copies to place. Defaults to the preset default.","type":"integer","minimum":1,"maximum":500},"allowRotation":{"description":"Allow this photo size to rotate 90° during packing.","type":"boolean"}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update-photo-size","kind":"act","impl":"imperative","description":"Updates an existing photo size item: change quantity, allowRotation, or enable or disable its nameplate. The preview updates immediately. Identify the item with the itemId returned when it was added or listed in get-editor-summary.","title":"Update photo size","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemId":{"type":"string","minLength":1,"description":"Id of the photo size item to update."},"quantity":{"description":"New copy count for this photo size.","type":"integer","minimum":1,"maximum":500},"allowRotation":{"type":"boolean"},"nameplateEnabled":{"description":"Enable or disable the nameplate attached to this photo size.","type":"boolean"}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove-photo-size","kind":"act","impl":"imperative","description":"Removes a photo size item from the layout and recalculates placement; the preview updates immediately.","title":"Remove photo size","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemId":{"type":"string","minLength":1,"description":"Id of the photo size item to remove."}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply-service-set","kind":"act","impl":"imperative","description":"Applies one of the user's service sets, replacing the current photo sizes and paper configuration with the package definition. The preview updates immediately. Disabled service sets are reported instead of applied.","title":"Apply service set","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"serviceSetId":{"type":"string","minLength":1,"description":"Id of the service set to apply, from list-service-sets."}},"required":["serviceSetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"configure-nameplate","kind":"act","impl":"imperative","description":"Creates or updates the nameplate attached to a photo size item, and the nameplate renders on the preview immediately. Optionally start from presetId (full-name, name-and-id, name-id-department, custom), then override text lines (name, ID number, department), position relative to the photo, font size and weight, alignment, and colors.","title":"Configure nameplate","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"itemId":{"type":"string","minLength":1,"description":"Id of the photo size item whose nameplate to configure."},"presetId":{"description":"Start from a saved nameplate layout before applying overrides.","type":"string","enum":["full-name","name-and-id","name-id-department","custom"]},"primaryText":{"description":"Main line text, typically a full name.","type":"string","maxLength":120},"secondaryText":{"description":"Second line text, such as an ID or student number.","type":"string","maxLength":120},"thirdLineText":{"description":"Third line text, such as a department or section.","type":"string","maxLength":120},"position":{"type":"string","enum":["bottom-inside","bottom-outside","top-inside","top-outside"]},"fontSizePoints":{"type":"integer","minimum":4,"maximum":72},"fontWeight":{"anyOf":[{"type":"number","const":400},{"type":"number","const":500},{"type":"number","const":600},{"type":"number","const":700}]},"textAlign":{"type":"string","enum":["left","center","right"]},"textColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"backgroundColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},"borderEnabled":{"type":"boolean"},"borderColor":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["itemId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set-preview-page","kind":"act","impl":"imperative","description":"Shows the layout page the user should look at next in the canvas preview. Page numbers start at 1; get-editor-summary reports pageCount and the current activePageNumber.","title":"Set preview page","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"pageNumber":{"type":"integer","minimum":1,"maximum":500,"description":"Page number to display in the preview, starting at 1."}},"required":["pageNumber"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set-background","kind":"act","impl":"imperative","description":"Sets the photo background treatment: original keeps the photo as uploaded, solid composites the photo over the given hex color (defaults to white), and transparent is reserved for photos whose background has been removed. The preview updates immediately.","title":"Set background","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["original","transparent","solid"],"description":"original keeps the uploaded photo, transparent suits photos with the background removed, solid composites over a color."},"color":{"description":"Hex color for solid mode. Defaults to white.","type":"string","pattern":"^#[0-9a-fA-F]{6}$"}},"required":["mode"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set-crop-mode","kind":"act","impl":"imperative","description":"Chooses how the user's crop fills each photo size: keep-head-size preserves the subject's apparent size across sizes, fill-frame fills each frame and may crop edges, and fit-with-padding fits the whole crop inside the frame with padding. The preview updates immediately.","title":"Set crop mode","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"mode":{"type":"string","enum":["keep-head-size","fill-frame","fit-with-padding"],"description":"keep-head-size preserves the subject's apparent size across sizes, fill-frame fills each frame and may crop edges, fit-with-padding fits the whole crop with padding."}},"required":["mode"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save-service-set","kind":"act","impl":"imperative","description":"Saves the current photo sizes and paper configuration as a reusable service set with the given name and optional price, and the new service set appears in the user's list immediately for later use with apply-service-set.","title":"Save service set","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Name for the saved service set."},"description":{"description":"Short description of the package.","type":"string","maxLength":200},"price":{"description":"Price for the package. Defaults to 0.","type":"number","minimum":0,"maximum":100000},"currencyCode":{"description":"ISO currency code. Defaults to the user's most recent service set currency.","type":"string","minLength":3,"maxLength":3}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"export-pdf","kind":"act","impl":"imperative","description":"Generates a print-ready PDF of all pages at exact physical dimensions and starts the browser download immediately. Requires a loaded photo and at least one placed photo size. Returns only file metadata; image data stays in the browser. A user-visible download appears in the browser.","title":"Export PDF","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"filename":{"description":"Download file name without extension. Defaults to a timestamped name.","type":"string","maxLength":140},"quality":{"description":"Raster output quality. High uses ~300 PPI. Default high.","type":"string","enum":["standard","high"]}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"open-print-dialog","kind":"act","impl":"imperative","description":"Opens the print options dialog on screen immediately so the user can review printer settings (paper size match, Actual Size scaling, no margins) and confirm printing. Printing always requires explicit human confirmation.","title":"Open print dialog","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Productivity & Business","apiSurface":"spec","toolCount":17}}