webfetch
La capa de imágenes con licencia primero para agentes de IA y humanos. 24 proveedores federados · CC0/CC-BY/PD-first · MCP nativo · Extensión de Chrome · SDKs de Python + TS.
Documentación
webfetch
La capa de imágenes con licencia primero, para agentes de IA y humanos.
Un servidor MCP, una CLI y un servidor HTTP que federan entre 25 proveedores de imágenes, clasifican los resultados priorizando la licencia y rechazan resultados UNKNOWN por defecto. Cualquier agente que hable MCP (Claude Code, Cursor, Cline, Continue, Roo Code, Codex) se conecta desde una sola línea de configuración. La página de inicio, los precios y el uso alojado están en getwebfetch.com.
Instalación
| Superficie | Una línea |
|---|---|
| npm | npm i -g getwebfetch |
| Homebrew | brew tap ashlrai/webfetch && brew install webfetch |
| Docker | docker run --rm ghcr.io/ashlrai/webfetch cli help |
| curl | bash | curl -fsSL https://raw.githubusercontent.com/ashlrai/webfetch/main/install/install.sh | bash |
El instalador curl | bash también conecta webfetch al ~/.claude/settings.json de Claude Code de forma idempotente. Vuelve a ejecutarlo en cualquier momento para actualizar.
Superficies
| Superficie | Mejor para | Punto de entrada |
|---|---|---|
| CLI | scripts, trabajo en shell, traspaso de agentes | webfetch search ... |
| Servidor MCP | Claude Code, Cursor, Cline, Continue, Roo Code, Codex | npx -y getwebfetch-mcp |
| Servidor HTTP | integraciones y extensiones locales | npx -y webfetch-server |
| Biblioteca principal | aplicaciones TypeScript y herramientas personalizadas | npm i webfetch-core |
| Capa de navegador | extracción de respaldo y flujos de navegador gestionado | npm i webfetch-browser |
| Nube alojada | claves agrupadas, seguimiento de uso, controles de equipo | app.getwebfetch.com |
Las notas de API a nivel de paquete están en packages/core/README.md, packages/browser/README.md y los demás README de paquetes bajo packages/.
Uso en 30 segundos
CLI:
webfetch search "drake portrait" --limit 5
webfetch artist "Taylor Swift" --kind portrait --min-width 1200
webfetch download <url> --out ./portrait.jpg
printf "drake portrait\nradiohead album\n" | webfetch batch --jsonl --continue-on-error
MCP (desde cualquier agente que hable MCP):
search_images({ query: "drake portrait", limit: 5 })
search_artist_images({ artist: "Taylor Swift", kind: "portrait" })
download_image({ url: "..." })
Biblioteca TypeScript:
import { searchArtistImages, pickBest, downloadImage } from "webfetch-core";
const { candidates } = await searchArtistImages("Drake", "portrait");
const best = pickBest(candidates, { minWidth: 1200 });
if (best) {
const { cachedPath, sha256 } = await downloadImage(best.url);
console.log(best.attributionLine, "->", cachedPath);
}
Qué problema resuelve esto
Obtener una imagen manualmente tiene cuatro modos de fallo:
- No conoces la licencia, así que no puedes publicar el resultado de forma segura.
- No puedes automatizarlo — cada sitio nuevo significa otra tarde de trabajo.
- La API de Búsqueda de Imágenes de Google está retirada; el scraping es frágil y de dudosa legalidad según los términos de servicio.
- Sin caché compartida — descargas el mismo archivo docenas de veces.
webfetch resuelve los cuatro federando entre APIs de fuentes directas con términos estables y metadatos de licencia estructurados, clasificando los candidatos priorizando la licencia y exponiendo el resultado como una única herramienta MCP.
Proveedores
| Proveedor | Cubre | Licencia por defecto | Autenticación | Opcional |
|---|---|---|---|---|
| wikimedia | retratos, eventos, logotipos, historia | CC_BY_SA (metadatos) | — | no |
| openverse | cualquier contenido con licencia CC | CC_BY (metadatos) | — | no |
| unsplash | fotografía de alta calidad | UNSPLASH_LICENSE | UNSPLASH_ACCESS_KEY | no |
| pexels | fotografía de stock | PEXELS_LICENSE | PEXELS_API_KEY | no |
| pixabay | fotos de stock + ilustraciones | PIXABAY_LICENSE | PIXABAY_API_KEY | no |
| itunes | portadas de álbumes, retratos de artistas | EDITORIAL_LICENSED | — | no |
| musicbrainz-caa | arte de álbum canónico | EDITORIAL_LICENSED | — | no |
| spotify | imágenes de artistas + álbumes | EDITORIAL_LICENSED | SPOTIFY_CLIENT_ID/SECRET | no |
| youtube-thumb | miniaturas de vídeo | EDITORIAL_LICENSED | — | sí |
| brave | búsqueda general de imágenes web | UNKNOWN (+heurística) | BRAVE_API_KEY | no |
| bing | búsqueda general de imágenes web | UNKNOWN (+heurística) | BING_API_KEY | sí |
| serpapi | Google Images + búsqueda inversa | UNKNOWN (+heurística) | SERPAPI_KEY | sí |
| browser | respaldo sin cabeza contra images.google.com | UNKNOWN | — | sí |
| managed-browser | respaldo de navegador gestionado Bright Data | UNKNOWN | BRIGHTDATA_API_TOKEN | sí |
| flickr | fotografía CC / dominio público | CC_BY (metadatos) | FLICKR_API_KEY | no |
| internet-archive | medios de archivo de dominio público / CC | PUBLIC_DOMAIN | — | no |
| smithsonian | medios de museo de acceso abierto | CC0 | SMITHSONIAN_API_KEY | no |
| nasa | imágenes de la NASA | PUBLIC_DOMAIN | — | no |
| met-museum | The Met Open Access | CC0 | — | no |
| europeana | patrimonio cultural europeo | CC_BY (metadatos) | EUROPEANA_API_KEY | no |
| library-of-congress | archivo histórico de EE. UU. | PUBLIC_DOMAIN | — | no |
| wellcome-collection | imágenes médicas/históricas | CC_BY (metadatos) | — | no |
| rawpixel | segmento de stock CC0 | CC0 | RAWPIXEL_API_KEY opcional | no |
| burst | fotos de stock de Shopify Burst | CC0 | — | no |
| europeana-archival | registros de texto/manuscritos de Europeana | CC_BY (metadatos) | EUROPEANA_API_KEY | sí |
Consulta docs/PROVIDERS.md para advertencias, límites de tasa y docs/PROVIDER_TUNING.md para selecciones por caso de uso.
Modos local y en la nube
La CLI es local-primero: por defecto webfetch search, artist, album, download, probe, license y batch llaman a webfetch-core en proceso y usan las claves de API de los proveedores desde tu entorno. Pasa --cloud o establece WEBFETCH_MODE=cloud para llamar a https://api.getwebfetch.com/v1/* con WEBFETCH_API_KEY o webfetch config set apiKey wf_live_....
Usa el modo local cuando quieras llamadas directas a proveedores y una caché local. Usa el modo nube cuando quieras autenticación alojada, claves de proveedores agrupadas, respaldo de navegador gestionado, contabilidad de uso o controles de equipo.
Por qué licencia-primero
El único resultado que rechazamos por defecto es una imagen que no podemos justificar. Una foto marginalmente mejor bajo una licencia desconocida no vale nada para un pipeline que necesita publicar sin revisión humana. Los empates de relevancia son fáciles de romper; la procedencia no lo es.
El clasificador ordena por: etiqueta de licencia -> confianza de metadatos -> resolución -> prioridad del proveedor. UNKNOWN se rechaza por defecto (Convención de Berna: la mayor parte de la web tiene todos los derechos reservados salvo que se demuestre lo contrario). Consulta docs/LICENSE_POLICY.md.
Migración: proveedores de stock CC0
Las versiones anteriores de webfetch trataban a Unsplash, Pexels y Pixabay como CC0. Las versiones actuales exponen sus términos de plataforma explícitamente:
| Etiqueta antigua | Etiqueta nueva | Qué comprobar |
|---|---|---|
CC0 de Unsplash | UNSPLASH_LICENSE | Términos de Unsplash; no es Creative Commons |
CC0 de Pexels | PEXELS_LICENSE | Términos de Pexels; no es Creative Commons |
CC0 de Pixabay | PIXABAY_LICENSE | Términos de Pixabay; no es Creative Commons |
La mayoría de los llamadores deberían mantener licensePolicy: "safe-only" porque aún permite categorías abiertas, de plataforma, editoriales y de kits de prensa mientras rechaza UNKNOWN. Los pipelines que requieren solo activos Creative Commons o de dominio público deberían usar licensePolicy: "open-only" y actualizar las protecciones de tipos para manejar las tres etiquetas de plataforma por separado.
webfetch frente a alternativas
| Capacidad | webfetch | Google Images sin procesar | Solo Unsplash | Bing CSE |
|---|---|---|---|---|
| Automatizable vía API | sí | no (retirada) | sí | sí |
| Metadatos de licencia por resultado | sí | no | sí (una licencia) | parcial |
| Cubre arte musical editorial | sí | parcial | no | parcial |
| Cubre CC / dominio público | sí | no | no | no |
| Seguro por defecto (rechaza UNKNOWN) | sí | n/a | n/a | no |
| Caché compartida direccionada por contenido | sí | no | no | no |
| Línea de atribución preconstruida | sí | no | no | no |
| Una línea de configuración MCP en todos los IDE | sí | no | no | no |
| Sin costo por consulta en valores predeterminados | sí | n/a | sí | no |
Arquitectura
+------------------+
| webfetch-core |
| (ranker, cache, |
| license coerce)|
+---------+--------+
|
+----------------+-----------+-----------+----------------+
| | | |
+-------v------+ +------v-------+ +-------v------+ +------v-------+
| webfetch | | webfetch-mcp | | webfetch- | | browser |
| CLI | | (stdio) | | server (HTTP)| | extensions |
+-------+------+ +------+-------+ +-------+------+ +------+-------+
| | | |
| | | |
+----------------+-----------+-----------+----------------+
|
+---------------------v---------------------+
| provider adapters |
| wikimedia openverse unsplash pexels |
| pixabay itunes mb-caa spotify |
| youtube brave bing serpapi |
| flickr nasa met europeana |
| loc wellcome rawpixel burst |
| browser + managed-browser + archival opt-in|
+-------------------------------------------+
Cada superficie comparte ~/.webfetch/cache/ con clave SHA-256, por lo que una descarga desde la CLI está disponible al instante para el servidor MCP y viceversa.
Valores predeterminados de seguridad
licensePolicy: "safe-only"— las categorías abiertas, de licencia de plataforma y editoriales/de prensa están permitidas;UNKNOWNse rechaza.safeSearch: "strict".- Proveedores opcionales (
youtube-thumb,bing,serpapi,browser,managed-browser,europeana-archival) desactivados por defecto. - Límite de 20 MB por descarga, protección de tipo de contenido, lista de bloqueo de hosts.
robots.txtrespetado en sondeos de páginas genéricas.
Hoja de ruta
webfetch watch— modo demonio para consultas repetidas / actualización incremental.- API de complementos para traer tu propio proveedor.
- Nivel alojado en getwebfetch.com — claves de proveedores agrupadas, respaldo de navegador gestionado, panel de uso del equipo.
Contribuciones
Se aceptan problemas y solicitudes de extracción. Ejecuta bun install && bun test para comenzar. Consulta docs/ para documentación de referencia por área.
Licencia
MIT.