Communitygithub.com

Varnan-Tech/opendirectory

Crée des GIF animés en boucle à partir d'animations CSS (par défaut) ou d'une IA image-vers-vidéo. Taille 800×800 px par défaut, 6 types d'animation, 4 préréglages de style. Déclenché lorsque l'utilisateur dit « crée un gif animé », « fais un gif en boucle », « bannière animée », « gif d'animation CSS », « animation pour réseaux sociaux », « mets ça en boucle », « graphique animé » ou « motion design ».

Qu'est-ce que opendirectory ?

Ce skill génère un GIF animé en boucle à l'aide d'animations CSS capturées image par image via Playwright et l'API Web Animations (option par défaut), ou via le pipeline IA image-vers-vidéo de Kling (option B). Il produit un fichier `animation.gif` de 800×800 px, avec 6 types d'animation intégrés (fade-in, slide-in, typewriter, counter, pulse, loop-scroll) et 4 préréglages de style (clean-slate, terminal, electric-burst, brutalist). Utile pour les développeurs et créateurs qui veulent produire rapidement des visuels animés pour les réseaux sociaux, des bannières, ou des graphiques motion sans dépendre de services externes de montage vidéo. Le skill suit un processus structuré en 6 étapes : prise en compte de la demande, conception interne, génération HTML, auto-vérification, export et résumé. Il impose des règles strictes pour éviter les artefacts (pas d'image de début redondante, pas de `animation-delay`, palettes simplifiées) et optimise la taille du fichier. Compatible avec les agents comme Claude Code, Cursor ou Codex, il fonctionne sur tout système avec Node.js, Playwright et ffmpeg.

Compatible avec✓Claude Code~Codex CLI✓Cursor✓Gemini CLI
npx skills add https://github.com/Varnan-Tech/opendirectory/tree/main/skills/graphic-gif

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

graphic-gif

Génère un GIF animé en boucle à partir d'animations CSS ou d'une API IA image-vers-vidéo. Fichier de sortie : animation.gif.

Contrairement aux autres skills graphic- qui produisent un PNG ou PDF statique, celui-ci produit un .gif animé. Utilise les animations CSS @keyframes capturées image par image via Playwright et l'API Web Animations (Option A, par défaut), ou un pipeline IA image-vers-vidéo via Kling (Option B).


Règles critiques (à lire avant chaque génération)

  1. Par défaut, c'est css-animated. N'utilisez jamais ai-generated sauf demande explicite.
  2. La zone de travail est de 800×800 px. Tous les calculs clamp() sont basés sur 800 px (1vw = 8 px).
  3. Un seul fichier HTML autonome. Tout le CSS en ligne dans <style>. La seule dépendance externe autorisée est un <link> CDN pour les polices.
  4. Ne publiez jamais le HTML dans le chat. Sauvegardez dans un fichier, affichez uniquement un résumé.
  5. La capture d'images utilise l'API Web Animations par défilement temporel. PAS de boucles setTimeout, PAS d'astuces avec animation-delay.
  6. Nombre exact d'images : Math.floor(durée_secondes * fps) images. L'image à t=durée_ms NE DOIT PAS être capturée — elle duplique t=0 et provoque un à-coup visible au point de boucle.
  7. Pas de boîtes de remplissage. Visuels générés uniquement par CSS. Pas d'éléments « l'image va ici ».
  8. Des palettes plus simples = des fichiers plus petits. Utilisez : clean-slate, terminal, electric-burst, brutalist.
  9. Pas de animation-delay pour l'échelonnement. Intégrez l'échelonnement dans les pourcentages des @keyframes — le défilement temporel gère le timing.
  10. Engagez-vous sur la direction du design avant d'écrire le CSS. Ton, élément signature, style de mouvement, détail inoubliable — tout décidé avant la première ligne de code.

Étape 1 : Prise en compte

Requis : prompt (description du contenu ET consigne de mouvement)

Optionnel avec valeurs par défaut :

ParamètreValeur par défautOptions
animation_typecss-animatedcss-animated / ai-generated
duration3.0secondes
fps12images par seconde
looptruetrue / false
styleclean-slateclean-slate / terminal / electric-burst / brutalist
dimensions800x800LxH en pixels
optimizationbalancedquality / balanced / filesize

Si le prompt est manquant ou ne décrit pas le mouvement, demandez exactement :

« Que doit montrer le GIF ? Décrivez le contenu ET le mouvement (ex. : 'Compteur de stats : 73 % des acheteurs lisent 3+ contenus avant d'acheter. Effet machine à écrire, un caractère à la fois. Style : terminal. 3 secondes, 12 ips.') »

« Paramètres clés (tous optionnels, valeurs par défaut indiquées) :

  • animation_type : css-animated (par défaut) ou ai-generated
  • duration : 3,0 secondes
  • fps : 12
  • loop : true
  • style : clean-slate (options : clean-slate / terminal / electric-burst / brutalist)
  • dimensions : 800x800
  • optimization : balanced (options : quality / balanced / filesize) »

Si toutes les informations requises sont présentes → passez directement à l'Étape 2.


Étape 2 : Architecture interne (jamais montrée à l'utilisateur)

Pour css-animated :

  1. Choisissez le type d'animation parmi : fade-in, slide-in, typewriter, counter, pulse, loop-scroll
  2. Lisez references/animation-library.md — trouvez le cahier des charges HTML/CSS complet du type choisi
  3. Lisez references/style-presets.md — chargez le bloc de jetons CSS du style choisi
  4. Calculez le nombre d'images : Math.floor(durée_secondes * fps) — notez ce nombre
  5. Engagez-vous sur la direction du design :
DécisionDérivé de
TonRegistre émotionnel pour le public (mécanique / chaleureux / électrique / professionnel)
Élément signatureUN dispositif visuel utilisé systématiquement (clignement de curseur, chiffre fantôme, superposition de lignes de balayage, bordure d'accent)
Style de mouvementPhilosophie de courbe d'atténuation pour ce type (ressort / linéaire / par paliers / ease-in-out)
Détail inoubliableLa UNE chose dont un spectateur se souviendra en voyant ce GIF

Pour ai-generated :

  1. Générez une image fixe de base au format HTML (disposition style affiche pour la zone de travail)
  2. Exportez-la en PNG via capture d'écran
  3. Appelez l'API Kling : POST https://api.klingai.com/v1/videos/image2video avec image_url et prompt décrivant le mouvement
  4. Interrogez l'état d'avancement du travail
  5. Téléchargez la vidéo → convertissez-la en GIF avec ffmpeg :
    # Palette en deux passes pour une meilleure qualité de couleur
    ffmpeg -i input.mp4 -vf "fps=12,scale=800:800:flags=lanczos,palettegen=stats_mode=diff" palette.png
    ffmpeg -i input.mp4 -i palette.png -vf "fps=12,scale=800:800:flags=lanczos,paletteuse=dither=bayer:bayer_scale=5" output.gif
    

Étape 3 : Génération HTML (chemin css-animated)

Lisez references/animation-library.md et references/style-presets.md avant de générer.

Base de la zone de travail — requise sur chaque GIF :

*, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }

body {
  width: 800px;
  height: 800px;
  overflow: hidden;
  background: var(--bg);
  font-family: var(--font-body);
}

.canvas {
  width: 800px;
  height: 800px;
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  justify-content: center;
}

Règles d'animation :

  • animation-fill-mode: forwards (ou both) sur TOUS les éléments animés
  • Fonctions de temporisation par type :
    • typewriter → steps(N, end) où N = nombre exact de caractères
    • counter → linear
    • fade-in → cubic-bezier(0.22, 1, 0.36, 1) (ease-out)
    • slide-in → cubic-bezier(0.34, 1.56, 0.64, 1) (dépassement élastique)
    • pulse → ease-in-out avec animation-iteration-count: infinite
    • loop-scroll → linear avec animation-iteration-count: infinite
  • Pour les animations uniques (fade-in, slide-in, typewriter, counter) : animation-iteration-count: 1 — la boucle se fait au niveau du GIF
  • Pas de animation-delay — l'échelonnement est intégré dans les pourcentages des @keyframes

Calcul du N pour le typewriter : Comptez chaque caractère, y compris les espaces, la ponctuation et les chiffres :

  • « 73% d'acheteurs » = 15 caractères → steps(15, end)
  • « Bonjour le monde ! » = 18 caractères → steps(18, end)

CSS @property pour le counter (requis pour le type counter) :

@property --num {
  syntax: '<integer>';
  inherits: false;
  initial-value: 0;
}
.counter {
  animation: countUp var(--duration) linear forwards;
  counter-reset: num var(--num);
}
.counter::after { content: counter(num); }
@keyframes countUp {
  from { --num: 0; }
  to   { --num: var(--target); }
}

Loop-scroll : le contenu DOIT être dupliqué :

<!-- 4 éléments originaux + 4 éléments dupliqués -->
<div class="ticker-track" style="--item-count: 4;">
  [élément1][élément2][élément3][élément4][élément1][élément2][élément3][élément4]
</div>

translateX(0 → -50%) avec linear infinite.

Règles de qualité du design (issues de l'engagement à l'Étape 2) :

  • L'élément signature nommé DOIT être présent dans le CSS/HTML (pas seulement décrit)
  • Typographie : contraste de poids minimum 2:1 (ex : 700 vs 400) entre le texte d'affichage et le texte secondaire
  • Arrière-plan : pas de blanc pur #fff pour les styles sombres — utilisez la valeur exacte --bg du préréglage
  • Pour le style terminal : ajoutez une superposition de lignes de balayage ::after avec repeating-linear-gradient à opacity: 0.03
  • Pour le style brutalist : bordure épaisse 4px solid #000 ou 4px solid var(--accent) sur l'élément clé
  • Détail inoubliable : s'il nécessite un élément supplémentaire — ajoutez-le maintenant

Étape 4 : Auto-vérification (corrigez chaque échec avant l'Étape 5)

Zone de travail :

  • body et .canvas exactement 800×800 px (ou dimensions spécifiées)
  • overflow: hidden à la fois sur body et .canvas
  • Aucun élément ne dépasse les bords de la zone de travail

Animations :

  • AUCUN animation-delay nulle part — l'échelonnement est dans les pourcentages des @keyframes
  • Toutes les animations commencent à t=0 (l'API Web Animations cherchera à partir de là)
  • animation-fill-mode: forwards ou both sur tous les éléments animés
  • Animations uniques : animation-iteration-count: 1
  • Animations infinies (pulse, loop-scroll) : animation-iteration-count: infinite

Vérifications spécifiques au type :

  • Typewriter : N dans steps(N, end) = nombre exact de caractères de la chaîne de texte
  • Counter : @property --num déclaré avec syntax: '<integer>' et initial-value: 0
  • Counter : counter-reset: num var(--num) et ::after { content: counter(num) }
  • Loop-scroll : contenu dupliqué exactement une fois dans le HTML

Design :

  • Pas de boîtes de remplissage
  • Jetons du préréglage de style appliqués depuis references/style-presets.md — pas de couleurs hexadécimales isolées
  • L'élément signature nommé à l'Étape 2 est effectivement présent dans le HTML/CSS
  • Le détail inoubliable de l'Étape 2 est effectivement implémenté
  • <link> CDN pour la police présent pour la police du style choisi

Étape 5 : Export

Déterminez le slug à partir du prompt (kebab-case, ≤30 caractères). Créez le répertoire de sortie :

mkdir -p [slug]

Sauvegardez le HTML :

[slug]/animation.html

Ouvrez dans le navigateur pour un contrôle visuel rapide :

open [slug]/animation.html

Exécutez le script d'export (remplacez [skill-root] par le chemin réel de ce skill) :

bash [skill-root]/scripts/export-gif.sh \
  [slug]/animation.html \
  [slug]/animation.gif \
  --duration [duration] \
  --fps [fps] \
  [--no-loop si loop=false] \
  --optimization [optimization] \
  --width [W] \
  --height [H]

Le script :

  1. Installe gifenc, sharp (ou jimp) et playwright dans un répertoire temporaire
  2. Télécharge Chromium s'il n'est pas en cache
  3. Exécute capture-and-encode.mjs — met les animations en pause, cherche chaque image, prend une capture d'écran, assemble le GIF
  4. Exécute une passe d'optimisation gifsicle si disponible
  5. Signale la taille du fichier et ouvre le résultat

Si le script d'export n'est pas trouvé à l'emplacement [skill-root]/scripts/export-gif.sh, vérifiez que le skill a bien été installé avec son dossier scripts/ intact.


Étape 6 : Résumé de sortie

Affichez après un export réussi :

## GIF : [description en 1 ligne]
Date : [AAAA-MM-JJ] | Style : [style] | Animation : [type] | [durée]s @ [fps] ips
Dimensions : [LxH] | Images : [N] | Boucle : [true/false]

Fichiers
  Source :   [slug]/animation.html
  Sortie :   [slug]/animation.gif
  Taille :   [X] Ko

Liste de contrôle
- [ ] L'aperçu boucle proprement au point de départ/arrivée (pas d'à-coup)
- [ ] Texte lisible à la taille d'affichage prévue
- [ ] Taille de fichier appropriée : e-mail <500 Ko / réseaux sociaux <3 Mo

Chemin IA (Option B)

À utiliser uniquement lorsque animation_type: ai-generated est explicitement spécifié.

Prérequis :

  • Clé API Kling dans l'environnement : KLING_API_KEY (66 crédits gratuits/jour, pas de carte de crédit pour le niveau gratuit)
  • ffmpeg installé localement pour la conversion vidéo→GIF

Flux de travail :

  1. Générez une image fixe de base HTML correspondant au prompt (style affiche/graphique aux dimensions spécifiées)
  2. Exportez l'image fixe en PNG :
    # Capture d'écran rapide via Playwright
    node -e "
      const { chromium } = require('playwright');
      (async () => {
        const browser = await chromium.launch();
        const page = await browser.newPage({ viewport: { width: W, height: H } });
        await page.goto('file://[slug]/animation.html');
        await page.screenshot({ path: '[slug]/base-frame.png' });
        await browser.close();
      })();
    "
    
  3. Téléversez vers le point de terminaison image-vers-vidéo de Kling
  4. Convertissez le résultat en GIF avec la palette en deux passes de ffmpeg
  5. Appliquez l'optimisation gifsicle

Lorsque Kling est indisponible : Revenez à css-animated avec une note à l'utilisateur : « La génération IA nécessite une clé API Kling (KLING_API_KEY). Repli sur css-animated. Définissez la clé pour activer la génération IA. »


Conseils pour le prompt (afficher lorsque l'utilisateur demande des conseils)

« Décrivez le mouvement, pas seulement le contenu. 'Compteur de stats qui défile un par un' est mieux que 'afficher les stats'. »

« Restez simple pour la taille du fichier. 1 à 3 éléments animés et un arrière-plan uni. »

« Pensez en boucles. L'animation doit passer de la fin au début de manière invisible. »

« Spécifiez le type d'animation explicitement. typewriter et counter sont les plus efficaces pour les réseaux sociaux. »

✅ Bon : « Crée un GIF animé, css-animated, effet typewriter. Texte : '73 % des acheteurs B2B lisent 3+ contenus avant de contacter les ventes.' Chaque caractère s'affiche un par un. Style : terminal. 3 secondes, 12 ips, loop=true. »

❌ Mauvais : « fais un gif animé de conseils marketing »

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

Varnan-Tech/opendirectory

Use when the user asks to generate a blog cover image, thumbnail, or article header. Automatically uses modern typography, brand logos, and Google Search grounding to create beautiful 16:9 images with Gemini 3.1 Flash Image Preview.

Varnan-Tech/opendirectory

World-class brand strategist and naming expert. Uses an interrogation-led discovery phase to extract your brand's DNA, then applies scientific naming frameworks (Phonosemantics) and automated multi-TLD domain checking.

Varnan-Tech/opendirectory

Use when the user asks to generate or update a project's CLAUDE or AGENTS context file from a codebase scan. Writes a focused file under 100 lines containing only the non-obvious build commands, conventions, and gotchas Claude Code needs.

Varnan-Tech/opendirectory

Use when the user wants to verify cold emails, enrich a lead list, or autonomously guess email addresses from a CSV using ValidEmail.co or the open-source Reacher engine.

Varnan-Tech/opendirectory

Competitive intelligence orchestrator tracking companies across 8+ platforms (GitHub, Twitter, Reddit, HN, PH, YC Jobs) with heat scores and AI briefings.

Varnan-Tech/opendirectory

Give it your product URL or description. It finds your top 5 competitors, runs three-track PR research across all of them (editorial, podcasts, communities), identifies which channels appear most frequently, looks up the journalist or host for each, and returns a tiered outreach list with story angles and ready-to-send cold pitch drafts tailored to your product. Use when asked to find PR opportunities, discover where competitors got featured, build a media outreach list, find which journalists cover my space, or get pitch templates for press coverage.

Varnan-Tech/opendirectory

Generate high-converting, deep-dive growth case studies in MDX format. Use this skill when asked to write a case study or blog post about a company's growth, tech stack, or product-led strategy. It handles the full pipeline (researching the company via Tavily, generating a 16:9 cover image, quality checking the draft, uploading assets to cloud storage, and pushing directly to the target repository).

Varnan-Tech/opendirectory

Scans your project for outdated npm, pip, Cargo, Go, or Ruby packages. Runs a CVE security audit. Fetches changelogs, summarizes breaking changes with Gemini, and opens one PR per risk group (patch, minor, major). Includes Diagnosis Mode for install conflicts. Use when asked to update dependencies, check for outdated packages, open dependency PRs, scan for package updates, audit for CVEs, or flag breaking changes in upgrades. Trigger when a user says "check for outdated packages", "update my dependencies", "open PRs for dependency updates", "scan for CVEs", or "which packages need upgrading".

Varnan-Tech/opendirectory

Generates and updates README.md and API reference docs by reading your codebase's functions, routes, types, schemas, and architecture. Uses graphify to build a knowledge graph first, then writes accurate docs from it. Use when asked to write docs, generate a README, document an API, update stale docs, create an API reference from code, add an architecture section, or document a project in any language. Trigger when a user says their docs are missing, outdated, or wants to document their codebase without writing it manually.

Varnan-Tech/opendirectory

Evaluates expired domain candidates against a target niche, scores them by topical relevance, historical activity level, and history cleanliness, then outputs a ranked shortlist with explainable reasoning and risk flags.

Varnan-Tech/opendirectory

Brutally honest developer-experience audit for a GitHub repo. Scores 10 DX dimensions (time-to-first-success, README clarity, visual proof, install, quick-start, docs, examples, community, trust, marketing), writes a shareable roast in the requested tone (brutal/honest/kind), produces a prioritized action plan ranked by impact × effort, and sketches an ideal README. Trigger when user says "roast my repo", "audit my README", "dx audit", "developer experience review", "score my GitHub project", "before launch checklist", or "make my repo shareable".

Varnan-Tech/opendirectory

Drafts and designs a complete HTML email newsletter from a topic or content brief. Outputs paste-ready HTML for Loops, Mailchimp, Beehiiv, Resend, or any standard email platform. Includes subject line options and plain-text fallback. Trigger when a user says "write a newsletter", "draft an email newsletter", "create an HTML email", "design an email for my subscribers", or "write a newsletter about [topic]".

Varnan-Tech/opendirectory

Takes a GitHub PR URL or the current branch and writes a plain-English explanation of what it does and why, then posts it as a PR comment. Use when asked to explain a PR, summarize a pull request, write a plain-English description of a PR, add a summary comment to a PR, or understand what a PR changes. Trigger when a user says "explain this PR", "summarize this pull request", "what does this PR do", "add a comment explaining the PR", or shares a GitHub PR URL and asks what it does.

Varnan-Tech/opendirectory

Audit how often LLMs recommend your brand vs competitors and generate a GEO action plan.

Varnan-Tech/opendirectory

Takes a competitor's public GitHub repo URL, fetches their open issues via the GitHub REST API, filters noise locally, clusters issues into 6 demand categories, computes a demand score per issue and per cluster, and outputs a ranked demand gap report with a GTM messaging brief. Use when asked to scan a competitor's GitHub issues, find what their users are begging for, turn GitHub complaints into product positioning, identify competitor feature gaps, or generate messaging from real user demand. Trigger when a user says "scan competitor issues", "what are users asking for on X repo", "find demand gaps in Y", "turn GitHub issues into messaging", or "what should I build based on competitor complaints".

Varnan-Tech/opendirectory

Find recurring confusion in your repo's GitHub Discussions, rank it by urgency, and draft the actual docs fixes and content angles — with verbatim community quotes and source links as evidence.

Varnan-Tech/opendirectory

SEO keyword research workflow for blog generation using Google Trends data. Use when writing blog posts, planning content calendars, or optimizing articles for search engines. Finds breakout keywords, builds content structure, and generates SEO-optimized blog outlines targeting tech and developer audiences.

Varnan-Tech/opendirectory

Generates a professionally designed case study PDF for B2B SaaS sales and marketing. Supports 7 page layouts, 9 style presets, 1-4 page output. Trigger when user says "create a case study", "write a customer story", "make a case study PDF", "design a success story", "turn this customer win into a PDF".

Varnan-Tech/opendirectory

Generates data visualization charts (bar, line, area, pie, doughnut, scatter, radar, treemap) as PNG using Apache ECharts v6. 1080×1080px default, 5 style presets, highlight annotations. Trigger when user says "create a chart", "visualize data", "make a bar chart", "line graph", "pie chart", "data visualization", "chart this data", "plot", "graph", or "visualize these numbers".

Varnan-Tech/opendirectory

Fetches low-star App Store and Google Play reviews, clusters them into broken-promise patterns, and generates a ranked copy brief with positioning opportunities.

Skills associés