{"ok":true,"site":{"host":"tobesttwitter.github.io","url":"https://tobesttwitter.github.io/tobesttwitter-TryOn/","type":"live","desc":"Virtual Try-On","tools":[{"name":"search_catalog","kind":"answer","impl":"imperative","description":"Search the virtual try-on catalog (dresses, kurtis, lehengas) by free-text query, occasion, colour, category, and/or maximum price in ₹. Returns matching garments with their id, name, price and occasions. Pass a returned id to `apply_tryon` to see it on the user.","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"query":{"type":"string","description":"Free text, e.g. \"flowy floral dress\" or \"red lehenga for a wedding\"."},"occasion":{"type":"string","description":"Occasion to dress for, e.g. \"sangeet\", \"wedding\", \"reception\", \"brunch\", \"office\"."},"color":{"type":"string","description":"Preferred colour, e.g. \"navy\", \"magenta\", \"pink\"."},"category":{"type":"string","enum":["dress","kurti","lehenga-choli"],"description":"Restrict to one garment type."},"maxPrice":{"type":"number","description":"Budget ceiling in Indian rupees (₹)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/tobesttwitter-TryOn/","pages":["/tobesttwitter-TryOn/"]},{"name":"apply_tryon","kind":"act","impl":"imperative","description":"Composite a catalog garment onto the loaded photo with the on-device try-on pipeline (segmentation + pose + warp, all in-browser). Pass a garmentId from `search_catalog`. If no photo is loaded, a default model photo is loaded first. After applying, ask the user how it looks before moving on — only they can judge fit and vibe.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"garmentId":{"type":"string","description":"The `id` of a garment from `search_catalog` (e.g. \"dress-magenta-wrap-01\")."}},"required":["garmentId"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/tobesttwitter-TryOn/","pages":["/tobesttwitter-TryOn/"]},{"name":"save_look","kind":"act","impl":"imperative","description":"Snapshot the current try-on — the composited photo plus which garments are on — into the saved-looks tray so it can be compared later. Optionally pass a short `label`. Call this after the user reacts positively to a try-on. Returns the new look id.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"label":{"type":"string","description":"Short human label for this look, e.g. \"the magenta wrap dress\". Optional."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/tobesttwitter-TryOn/","pages":["/tobesttwitter-TryOn/"]},{"name":"compare_looks","kind":"act","impl":"imperative","description":"Show saved looks side by side in the app so the user can pick between them. Pass an array of look ids from `save_look`. Returns the looks being compared; then ask the user which they prefer.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"lookIds":{"type":"array","items":{"type":"string"},"description":"Saved look ids from `save_look`, e.g. [\"look-1\", \"look-2\"]. Two or three works best."}},"required":["lookIds"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/tobesttwitter-TryOn/","pages":["/tobesttwitter-TryOn/"]},{"name":"await_reaction","kind":"act","impl":"imperative","description":"Record or wait for the user's reaction to the current try-on — call it right after apply_tryon. Two ways: (a) if the user already told you how they feel in chat, pass `reaction` (love / like / try_another / reject) and optionally `note` — it logs to the app's reaction bar and returns guidance immediately; (b) omit `reaction` to block until the user taps a reaction chip in the app (or it times out). Returns { reaction, note, guidance }.","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"reaction":{"type":"string","enum":["love","like","try_another","reject"],"description":"If the user ALREADY told you how they feel (in chat), pass it here — this logs it to the app and returns next-step guidance immediately, no waiting."},"note":{"type":"string","description":"What the user wants changed, in their words (e.g. \"too long\", \"more colour\"). Optional."},"timeoutSeconds":{"type":"number","description":"Only used when `reaction` is omitted: how long to wait for the user to tap a reaction chip in the app before giving up (default 120, max 600)."}}},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/tobesttwitter-TryOn/","pages":["/tobesttwitter-TryOn/"]}],"category":"AI & Agents","apiSurface":"spec","toolCount":5}}