[{"data":1,"prerenderedAt":484},["ShallowReactive",2],{"navigation_docs":3,"-guide-image":104,"-guide-image-surround":479},[4,44],{"title":5,"path":6,"stem":7,"children":8,"icon":43},"Guide","\u002Fguide","1.guide\u002F1.index",[9,11,15,19,23,27,31,35,39],{"title":10,"path":6,"stem":7},"Getting Started",{"title":12,"path":13,"stem":14},"Searching","\u002Fguide\u002Fsearch","1.guide\u002F2.search",{"title":16,"path":17,"stem":18},"Fan-out","\u002Fguide\u002Ffanout","1.guide\u002F3.fanout",{"title":20,"path":21,"stem":22},"Reading","\u002Fguide\u002Fread","1.guide\u002F4.read",{"title":24,"path":25,"stem":26},"Reverse Image Search","\u002Fguide\u002Fimage","1.guide\u002F5.image",{"title":28,"path":29,"stem":30},"CLI","\u002Fguide\u002Fcli","1.guide\u002F6.cli",{"title":32,"path":33,"stem":34},"Agents","\u002Fguide\u002Fagents","1.guide\u002F7.agents",{"title":36,"path":37,"stem":38},"Custom Providers","\u002Fguide\u002Fcustom","1.guide\u002F8.custom",{"title":40,"path":41,"stem":42},"Explorer","\u002Fguide\u002Fexplorer","1.guide\u002F9.explorer","i-lucide-book-open",{"title":45,"path":46,"stem":47,"children":48,"icon":103},"Providers","\u002Fproviders","2.providers\u002F0.index",[49,51,55,59,63,67,71,75,79,83,87,91,95,99],{"title":50,"path":46,"stem":47},"Overview",{"title":52,"path":53,"stem":54},"Brave","\u002Fproviders\u002Fbrave","2.providers\u002F01.brave",{"title":56,"path":57,"stem":58},"Context.dev","\u002Fproviders\u002Fcontext","2.providers\u002F02.context",{"title":60,"path":61,"stem":62},"Exa","\u002Fproviders\u002Fexa","2.providers\u002F03.exa",{"title":64,"path":65,"stem":66},"Firecrawl","\u002Fproviders\u002Ffirecrawl","2.providers\u002F04.firecrawl",{"title":68,"path":69,"stem":70},"Jina","\u002Fproviders\u002Fjina","2.providers\u002F05.jina",{"title":72,"path":73,"stem":74},"Mojeek","\u002Fproviders\u002Fmojeek","2.providers\u002F06.mojeek",{"title":76,"path":77,"stem":78},"SearXNG","\u002Fproviders\u002Fsearxng","2.providers\u002F07.searxng",{"title":80,"path":81,"stem":82},"SerpAPI","\u002Fproviders\u002Fserpapi","2.providers\u002F08.serpapi",{"title":84,"path":85,"stem":86},"SerpBase","\u002Fproviders\u002Fserpbase","2.providers\u002F09.serpbase",{"title":88,"path":89,"stem":90},"Tavily","\u002Fproviders\u002Ftavily","2.providers\u002F10.tavily",{"title":92,"path":93,"stem":94},"TinyFish","\u002Fproviders\u002Ftinyfish","2.providers\u002F11.tinyfish",{"title":96,"path":97,"stem":98},"OpenAI Codex","\u002Fproviders\u002Fopenai-codex","2.providers\u002F12.openai-codex",{"title":100,"path":101,"stem":102},"Marginalia","\u002Fproviders\u002Fmarginalia","2.providers\u002F13.marginalia","i-lucide-library",{"id":105,"title":24,"body":106,"description":472,"extension":473,"links":474,"meta":475,"navigation":152,"path":25,"seo":477,"stem":26,"__hash__":478},"docs\u002F1.guide\u002F5.image.md",{"type":107,"value":108,"toc":467},"minimark",[109,114,249,261,430,433,437,456,460,463],[110,111,113],"h2",{"id":112},"search-by-image","Search by image",[115,116,121],"pre",{"className":117,"code":118,"language":119,"meta":120,"style":120},"language-ts shiki shiki-themes web web web","import { searchByImage } from \"@agntn\u002Fweb\";\n\nconst matches = await searchByImage(\"https:\u002F\u002Fexample.com\u002Fimage.jpg\", {\n  provider: \"serpapi\",\n  maxResults: 5,\n});\n\nfor (const match of matches) {\n  console.log(match.pageUrl, match.imageUrl, match.imageWidth, match.imageHeight);\n}\n","ts","",[122,123,124,147,154,182,194,200,206,211,231,243],"code",{"__ignoreMap":120},[125,126,129,133,137,140,144],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"skH_V","import",[125,134,136],{"class":135},"s38Sx"," { searchByImage } ",[125,138,139],{"class":131},"from",[125,141,143],{"class":142},"shU9J"," \"@agntn\u002Fweb\"",[125,145,146],{"class":135},";\n",[125,148,150],{"class":127,"line":149},2,[125,151,153],{"emptyLinePlaceholder":152},true,"\n",[125,155,157,160,163,166,169,173,176,179],{"class":127,"line":156},3,[125,158,159],{"class":131},"const",[125,161,162],{"class":135}," matches ",[125,164,165],{"class":131},"=",[125,167,168],{"class":131}," await",[125,170,172],{"class":171},"sK71F"," searchByImage",[125,174,175],{"class":135},"(",[125,177,178],{"class":142},"\"https:\u002F\u002Fexample.com\u002Fimage.jpg\"",[125,180,181],{"class":135},", {\n",[125,183,185,188,191],{"class":127,"line":184},4,[125,186,187],{"class":135},"  provider: ",[125,189,190],{"class":142},"\"serpapi\"",[125,192,193],{"class":135},",\n",[125,195,197],{"class":127,"line":196},5,[125,198,199],{"class":135},"  maxResults: 5,\n",[125,201,203],{"class":127,"line":202},6,[125,204,205],{"class":135},"});\n",[125,207,209],{"class":127,"line":208},7,[125,210,153],{"emptyLinePlaceholder":152},[125,212,214,217,220,222,225,228],{"class":127,"line":213},8,[125,215,216],{"class":131},"for",[125,218,219],{"class":135}," (",[125,221,159],{"class":131},[125,223,224],{"class":135}," match ",[125,226,227],{"class":131},"of",[125,229,230],{"class":135}," matches) {\n",[125,232,234,237,240],{"class":127,"line":233},9,[125,235,236],{"class":135},"  console.",[125,238,239],{"class":171},"log",[125,241,242],{"class":135},"(match.pageUrl, match.imageUrl, match.imageWidth, match.imageHeight);\n",[125,244,246],{"class":127,"line":245},10,[125,247,248],{"class":135},"}\n",[250,251,252,253,256,257,260],"p",{},"This is its own capability, not a text search with a URL stuffed into the query. A provider without image lookup gets ",[122,254,255],{},"ImageSearchNotSupportedError",", not a fake query it would answer with garbage. ",[122,258,259],{},"searchImageProviders()"," lists the ones that have it. Right now that is SerpAPI, which goes through Google Lens.",[115,262,264],{"className":117,"code":263,"language":119,"meta":120,"style":120},"interface ImageSearchResult {\n  pageUrl: string; \u002F\u002F the page that shows the image\n  imageUrl: string; \u002F\u002F the matched image\n  title: string;\n  provider: string;\n  source?: string;\n  thumbnailUrl?: string;\n  imageWidth?: number;\n  imageHeight?: number;\n  thumbnailWidth?: number;\n  thumbnailHeight?: number;\n  position?: number;\n  exactMatch?: boolean;\n}\n",[122,265,266,277,295,309,320,331,343,354,366,377,388,400,412,425],{"__ignoreMap":120},[125,267,268,271,274],{"class":127,"line":128},[125,269,270],{"class":131},"interface",[125,272,273],{"class":171}," ImageSearchResult",[125,275,276],{"class":135}," {\n",[125,278,279,282,285,288,291],{"class":127,"line":149},[125,280,281],{"class":135},"  pageUrl",[125,283,284],{"class":131},":",[125,286,287],{"class":171}," string",[125,289,290],{"class":135},"; ",[125,292,294],{"class":293},"scIB-","\u002F\u002F the page that shows the image\n",[125,296,297,300,302,304,306],{"class":127,"line":156},[125,298,299],{"class":135},"  imageUrl",[125,301,284],{"class":131},[125,303,287],{"class":171},[125,305,290],{"class":135},[125,307,308],{"class":293},"\u002F\u002F the matched image\n",[125,310,311,314,316,318],{"class":127,"line":184},[125,312,313],{"class":135},"  title",[125,315,284],{"class":131},[125,317,287],{"class":171},[125,319,146],{"class":135},[125,321,322,325,327,329],{"class":127,"line":196},[125,323,324],{"class":135},"  provider",[125,326,284],{"class":131},[125,328,287],{"class":171},[125,330,146],{"class":135},[125,332,333,336,339,341],{"class":127,"line":202},[125,334,335],{"class":135},"  source",[125,337,338],{"class":131},"?:",[125,340,287],{"class":171},[125,342,146],{"class":135},[125,344,345,348,350,352],{"class":127,"line":208},[125,346,347],{"class":135},"  thumbnailUrl",[125,349,338],{"class":131},[125,351,287],{"class":171},[125,353,146],{"class":135},[125,355,356,359,361,364],{"class":127,"line":213},[125,357,358],{"class":135},"  imageWidth",[125,360,338],{"class":131},[125,362,363],{"class":171}," number",[125,365,146],{"class":135},[125,367,368,371,373,375],{"class":127,"line":233},[125,369,370],{"class":135},"  imageHeight",[125,372,338],{"class":131},[125,374,363],{"class":171},[125,376,146],{"class":135},[125,378,379,382,384,386],{"class":127,"line":245},[125,380,381],{"class":135},"  thumbnailWidth",[125,383,338],{"class":131},[125,385,363],{"class":171},[125,387,146],{"class":135},[125,389,391,394,396,398],{"class":127,"line":390},11,[125,392,393],{"class":135},"  thumbnailHeight",[125,395,338],{"class":131},[125,397,363],{"class":171},[125,399,146],{"class":135},[125,401,403,406,408,410],{"class":127,"line":402},12,[125,404,405],{"class":135},"  position",[125,407,338],{"class":131},[125,409,363],{"class":171},[125,411,146],{"class":135},[125,413,415,418,420,423],{"class":127,"line":414},13,[125,416,417],{"class":135},"  exactMatch",[125,419,338],{"class":131},[125,421,422],{"class":171}," boolean",[125,424,146],{"class":135},[125,426,428],{"class":127,"line":427},14,[125,429,248],{"class":135},[250,431,432],{},"Page and image stay separate on purpose. A match says where the image appears and which file matched, and never pretends those are the same thing.",[110,434,436],{"id":435},"what-the-url-must-be","What the URL must be",[250,438,439,440,443,444,447,448,451,452,455],{},"The image URL goes to the provider as is. So it has to be public, absolute, ",[122,441,442],{},"http"," or ",[122,445,446],{},"https",", and it should not carry credentials or private query tokens, because the provider will fetch it and you just handed them the token. ",[122,449,450],{},"EmptyImageUrlError"," and ",[122,453,454],{},"InvalidImageUrlError"," cover the blank and malformed cases before any request leaves.",[110,457,459],{"id":458},"what-stays-out","What stays out",[250,461,462],{},"Uploads, hosting, OCR, embeddings, perceptual hashes, local image analysis. None of it is here. Lookup by URL fits because it is a thin adapter over a search API. The rest drags in heavy dependencies and belongs in an image or vision package of its own.",[464,465,466],"style",{},"html pre.shiki code .skH_V, html code.shiki .skH_V{--shiki-light:var(--shiki-token-keyword);--shiki-default:var(--shiki-token-keyword);--shiki-dark:var(--shiki-token-keyword)}html pre.shiki code .s38Sx, html code.shiki .s38Sx{--shiki-light:var(--ui-text-highlighted);--shiki-default:var(--ui-text-highlighted);--shiki-dark:var(--ui-text-highlighted)}html pre.shiki code .shU9J, html code.shiki .shU9J{--shiki-light:var(--shiki-token-string);--shiki-default:var(--shiki-token-string);--shiki-dark:var(--shiki-token-string)}html pre.shiki code .sK71F, html code.shiki .sK71F{--shiki-light:var(--shiki-token-function);--shiki-default:var(--shiki-token-function);--shiki-dark:var(--shiki-token-function)}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .scIB-, html code.shiki .scIB-{--shiki-light:var(--shiki-token-comment);--shiki-default:var(--shiki-token-comment);--shiki-dark:var(--shiki-token-comment)}",{"title":120,"searchDepth":149,"depth":149,"links":468},[469,470,471],{"id":112,"depth":149,"text":113},{"id":435,"depth":149,"text":436},{"id":458,"depth":149,"text":459},"A public image URL in, the pages that contain or resemble it out, through SerpAPI Google Lens.","md",null,{"icon":476},"i-lucide-image",{"title":24,"description":472},"_wsVZmGFJJnyTKdJHdPDWR-tHhmqilFkVQ0k4M9wHtM",[480,482],{"title":20,"path":21,"stem":22,"description":481,"children":-1},"URL in, normalized page out, with Jina Reader first, automatic fallback, an exact output bound and a continuation for the rest.",{"title":28,"path":29,"stem":30,"description":483,"children":-1},"The web command, its five subcommands, the flags, and the JSON envelopes that match the library.",1790790788677]