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
brand_status string ok, no_url, aggregator, unreachable ou no_assets.
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_urls list URL sources des variantes.
logo_variants_local_urls list Variantes ré-hébergées : apple-touch, mask-icon, monochrome, etc.
logo_variants_sources list Origine de chaque variante.
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.
http_status, final_url, fetch_error mixte Détails techniques de la récupération de la page.

Les colonnes d'entrée sont conservées. Les listes sont séparées par \|.

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