EN
Copied
Modules

Assets visuels

Assets visuels

Extrait l'identité visuelle de chaque prospect depuis son propre site : logo principal, variantes de logo, favicon, couleur de marque dominante, palette harmonique dérivée du logo. Capture d'écran de la page d'accueil en option. Toutes les images sont ré-hébergées dans le stockage privé de l'appelant, ce qui évite qu'un lien casse si le prospect change de CDN.

Le module est en lecture seule contre le site du prospect — aucune soumission de formulaire, aucune connexion, aucun franchissement d'authentification.

Inputs

Une ligne par POI. Seul site_web est requis ; le reste est transmis en passe-plat.

Champ Type Requis Notes
site_web string oui URL HTTP(S) du site du prospect.
nom string non Nom affiché, exposé dans l'UI.

Un batch accepte 1 à 10 000 lignes. Les lignes sans site_web sont écartées avant la mise en file.

Options au niveau du job :

Option Type Défaut Notes
source_job_id string null Job parent dans la chaîne du pipeline.
capture_screenshot bool false Ajoute une capture de la page d'accueil. ~5× plus lent.

Outputs

Sortie par ligne. Les URLs locales pointent vers des assets ré-hébergés sous /api/brand-assets/<owner_user_id>/<sha256>.<ext> et ne sont servies qu'au propriétaire (ou à un admin).

Colonne Type Notes
logo_url string URL source du logo principal trouvée sur le site du prospect.
logo_local_url string Copie ré-hébergée du logo principal, URL stable.
logo_source string Origine du logo (par exemple og:image, JSON-LD, apple-touch).
logo_variants_local_urls list Variantes ré-hébergées : apple-touch, mask-icon, monochrome, etc.
favicon_url string URL source du favicon de meilleure qualité détecté.
favicon_local_url string Copie ré-hébergée du favicon.
brand_color string Couleur de marque dominante au format hex.
brand_color_source string Origine de la couleur (meta theme-color, échantillonnage du logo, etc.).
brand_palette list Cinq couleurs hex harmoniques dérivées du logo.
screenshot_local_url string Capture de la page d'accueil. Renseigné si capture_screenshot=true.

Les binaires sont stockés sous data/brand_assets/<user_id>/<sha256>.<ext>. Extensions autorisées : svg, png, jpg, jpeg, webp, gif, ico, avif. Chaque asset est haché pour la déduplication entre lignes d'un même propriétaire.

Cycle de vie

États de job standard — voir Cycle de vie des jobs. Les erreurs HTTP par ligne ne font jamais échouer le job : une ligne en échec porte fetch_error et un logo_local_url à null.

Pipeline

Needs Produces
site_web logo_url, logo_local_url, logo_variants_local_urls, favicon_url, favicon_local_url, brand_color, brand_palette, screenshot_local_url

pipelinable: true, s'insère après toute étape produisant site_web — typiquement un parent scrap. supports_veille: false : l'identité de marque est traitée comme une extraction one-shot, pas un signal récurrent.

Endpoints

Créer un job batch

POST /api/jobs/brand-assets

Body :

{
  "items": [
    {"nom": "Stripe", "site_web": "https://stripe.com"}
  ],
  "source_job_id": null,
  "capture_screenshot": false
}

Retourne une enveloppe JobPublic. Authentification : tout utilisateur actif.

Lookup live mono-domaine

GET /api/brand-lookup?domain=<domain>&refresh=<bool>

One-shot, aucun job batch créé. Le premier appel sur un domaine donné fait un fetch live (~2–3s) et stocke le résultat dans un cache par utilisateur. Les appels suivants dans les sept jours retournent instantanément le profil mis en cache. refresh=true force un re-fetch.

Forme de la réponse :

{
  "domain": "stripe.com",
  "cached": false,
  "cached_at": null,
  "profile": {
    "status": "ok",
    "logo_url": "...",
    "logo_local_url": "...",
    "logo_source": "og:image",
    "logo_variants_local_urls": ["..."],
    "favicon_url": "...",
    "favicon_local_url": "...",
    "brand_color": "#635BFF",
    "brand_color_source": "theme-color",
    "brand_palette": ["#635BFF", "..."],
    "http_status": 200,
    "final_url": "https://stripe.com/",
    "fetch_error": null
  }
}

Servir un asset ré-hébergé

GET /api/brand-assets/<owner_user_id>/<sha256>.<ext>

Isolation par propriétaire : seul le propriétaire (ou un admin) peut lire les assets du namespace. Les noms de fichiers sont validés par une regex stricte ; les tentatives de path traversal sont rejetées avec 400.

Pour les quotas et caps globaux, voir Limites. TTL du cache brand-lookup : 7 jours, par utilisateur, par domaine. Le mode screenshot multiplie le coût par ligne par ~5 ; opt-in uniquement.

Erreurs

Code Signification
400 Aucun établissement avec site web — aucune ligne ne porte un site_web exploitable.
400 Domaine invalide sur /api/brand-lookup.
400 Nom de fichier d'asset invalide sur l'endpoint de service.
403 Accès à un asset appartenant à un autre utilisateur.
502 Lookup live en échec côté amont (Lookup failed: <type>: <message>).

Pour aller plus loin