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

npm version CI License: MIT webfetch MCP server Discord GitHub stars

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

SuperficieUna línea
npmnpm i -g getwebfetch
Homebrewbrew tap ashlrai/webfetch && brew install webfetch
Dockerdocker run --rm ghcr.io/ashlrai/webfetch cli help
curl | bashcurl -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

SuperficieMejor paraPunto de entrada
CLIscripts, trabajo en shell, traspaso de agenteswebfetch search ...
Servidor MCPClaude Code, Cursor, Cline, Continue, Roo Code, Codexnpx -y getwebfetch-mcp
Servidor HTTPintegraciones y extensiones localesnpx -y webfetch-server
Biblioteca principalaplicaciones TypeScript y herramientas personalizadasnpm i webfetch-core
Capa de navegadorextracción de respaldo y flujos de navegador gestionadonpm i webfetch-browser
Nube alojadaclaves agrupadas, seguimiento de uso, controles de equipoapp.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:

  1. No conoces la licencia, así que no puedes publicar el resultado de forma segura.
  2. No puedes automatizarlo — cada sitio nuevo significa otra tarde de trabajo.
  3. 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.
  4. 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

ProveedorCubreLicencia por defectoAutenticaciónOpcional
wikimediaretratos, eventos, logotipos, historiaCC_BY_SA (metadatos)—no
openversecualquier contenido con licencia CCCC_BY (metadatos)—no
unsplashfotografía de alta calidadUNSPLASH_LICENSEUNSPLASH_ACCESS_KEYno
pexelsfotografía de stockPEXELS_LICENSEPEXELS_API_KEYno
pixabayfotos de stock + ilustracionesPIXABAY_LICENSEPIXABAY_API_KEYno
itunesportadas de álbumes, retratos de artistasEDITORIAL_LICENSED—no
musicbrainz-caaarte de álbum canónicoEDITORIAL_LICENSED—no
spotifyimágenes de artistas + álbumesEDITORIAL_LICENSEDSPOTIFY_CLIENT_ID/SECRETno
youtube-thumbminiaturas de vídeoEDITORIAL_LICENSED—sí
bravebúsqueda general de imágenes webUNKNOWN (+heurística)BRAVE_API_KEYno
bingbúsqueda general de imágenes webUNKNOWN (+heurística)BING_API_KEYsí
serpapiGoogle Images + búsqueda inversaUNKNOWN (+heurística)SERPAPI_KEYsí
browserrespaldo sin cabeza contra images.google.comUNKNOWN—sí
managed-browserrespaldo de navegador gestionado Bright DataUNKNOWNBRIGHTDATA_API_TOKENsí
flickrfotografía CC / dominio públicoCC_BY (metadatos)FLICKR_API_KEYno
internet-archivemedios de archivo de dominio público / CCPUBLIC_DOMAIN—no
smithsonianmedios de museo de acceso abiertoCC0SMITHSONIAN_API_KEYno
nasaimágenes de la NASAPUBLIC_DOMAIN—no
met-museumThe Met Open AccessCC0—no
europeanapatrimonio cultural europeoCC_BY (metadatos)EUROPEANA_API_KEYno
library-of-congressarchivo histórico de EE. UU.PUBLIC_DOMAIN—no
wellcome-collectionimágenes médicas/históricasCC_BY (metadatos)—no
rawpixelsegmento de stock CC0CC0RAWPIXEL_API_KEY opcionalno
burstfotos de stock de Shopify BurstCC0—no
europeana-archivalregistros de texto/manuscritos de EuropeanaCC_BY (metadatos)EUROPEANA_API_KEYsí

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 antiguaEtiqueta nuevaQué comprobar
CC0 de UnsplashUNSPLASH_LICENSETérminos de Unsplash; no es Creative Commons
CC0 de PexelsPEXELS_LICENSETérminos de Pexels; no es Creative Commons
CC0 de PixabayPIXABAY_LICENSETé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

CapacidadwebfetchGoogle Images sin procesarSolo UnsplashBing CSE
Automatizable vía APIsíno (retirada)sísí
Metadatos de licencia por resultadosínosí (una licencia)parcial
Cubre arte musical editorialsíparcialnoparcial
Cubre CC / dominio públicosínonono
Seguro por defecto (rechaza UNKNOWN)sín/an/ano
Caché compartida direccionada por contenidosínonono
Línea de atribución preconstruidasínonono
Una línea de configuración MCP en todos los IDEsínonono
Sin costo por consulta en valores predeterminadossín/así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; UNKNOWN se 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.txt respetado 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.