Communitygithub.com

Rushes vers Shorts : montez vos rushes en final.mp4

Montez n'importe quelle vidéo en conversant : déposez vos rushes dans un dossier et récupérez edit/final.mp4. Transcription Whisper locale et gratuite, coupe des tics de langage et des blancs, étalonnage par segment, fondus audio de 30 ms, sous-titres incrustés et animations, avec vérification à chaque coupe. Aucune clé API requise.

Qu'est-ce que Rushes vers Shorts : montez vos rushes en final.mp4 ?

Recette Rushes vers Shorts, étape 1 (le master fini), issue de Moh4696/freecut, un fork de browser-use/video-use qui remplace la dépendance payante ElevenLabs par une transcription gratuite et modulaire. Fonctionne avec Claude Code, Codex et tout agent ayant un accès shell ; installation : npx skills add Moh4696/freecut. Il transcrit les prises en local (mlx-whisper ou faster-whisper ; VibeVoice ou ElevenLabs en option pour la diarisation), produit une transcription par phrases, pose des questions adaptées aux images, propose une stratégie de montage en 4 à 8 phrases et attend votre accord. Il écrit ensuite une EDL, étalonne chaque segment avec ffmpeg, ajoute des fondus de 30 ms à chaque coupe, crée les animations dans des sous-agents parallèles (HyperFrames, Remotion, Manim ou PIL), incruste les sous-titres en dernier, contrôle le rendu à chaque coupe (3 passes maximum) et garde la mémoire de session dans project.md.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add Moh4696/freecut

Demander à votre IA préférée

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

Documentation

freecut

Principe

  1. Le LLM raisonne à partir de la transcription brute + visuels à la demande. Le seul artefact dérivé qui mérite sa place est une transcription compacte au niveau des phrases (takes_packed.md). Tout le reste — marquage des remplissages, détection des reprises, classification des plans, score d'emphase — vous le déduisez au moment de la décision.
  2. L'audio est primaire, les visuels suivent. Les candidats au découpage proviennent des frontières de parole et des silences. Ne plongez dans les visuels qu'aux points de décision.
  3. Demander → confirmer → exécuter → itérer → persister. Ne touchez jamais au montage tant que l'utilisateur n'a pas confirmé la stratégie en français clair.
  4. Généralisez. Ne partez pas du principe que vous savez de quel type de vidéo il s'agit. Regardez le matériau, demandez à l'utilisateur, puis montez.
  5. La liberté artistique est la règle par défaut. Chaque valeur, préréglage, police, couleur, durée, structure de pitch et technique spécifique dans ce document est un exemple concret issu d'une vidéo réelle — pas une obligation. Lisez-les pour comprendre ce qui est possible et pourquoi chaque choix a fonctionné. Ensuite, prenez vos propres décisions esthétiques en fonction du matériau réel et des souhaits de l'utilisateur. Les seules choses que vous DEVEZ faire se trouvent dans la section Règles dures ci-dessous. Tout le reste vous appartient.
  6. Inventez librement. Si le matériau nécessite une technique non décrite ici — écran partagé, incrustation d'image, cartes d'identité en bas-tiers, coupes de réaction, rampes de vitesse, arrêts sur image, fondus enchaînés, raccords dans le mouvement, L-cuts, J-cuts, rampes de vitesse sur la respiration, peu importe — construisez-la. Les outils sont ffmpeg et PIL. Ils peuvent tout faire ce que le format supporte. N'attendez pas la permission.
  7. Vérifiez votre propre sortie avant de la montrer à l'utilisateur. Si vous ne la livreriez pas, ne la présentez pas.

Règles dures (exactitude de production — non négociables)

Ce sont les points où une déviation produit des échecs silencieux ou une sortie cassée. Ce n'est pas une question de goût, c'est une question d'exactitude. Mémorisez-les.

  1. Les sous-titres sont appliqués EN DERNIER dans la chaîne de filtres, après chaque superposition. Sinon, les superpositions cachent les légendes. Échec silencieux.
  2. Extraction par segment → concaténation -c copy sans perte, pas un graphe de filtres en un seul passage. Sinon, vous ré-encodez deux fois chaque segment lorsque des superpositions sont ajoutées.
  3. Fonclus audio de 30ms à chaque frontière de segment (afade=t=in:st=0:d=0.03,afade=t=out:st={dur-0.03}:d=0.03). Sinon, clics audibles à chaque coupe.
  4. Les superpositions utilisent setpts=PTS-STARTPTS+T/TB pour décaler l'image 0 de la superposition au début de sa fenêtre. Sinon, vous voyez le milieu de l'animation pendant la fenêtre de superposition.
  5. Le SRT maître utilise les décalages de la timeline de sortie : output_time = word.start - segment_start + segment_offset. Sinon, les légendes se désalignent après la concaténation des segments.
  6. Ne coupez jamais à l'intérieur d'un mot. Ancrez chaque bord de coupe à une frontière de mot de la transcription.
  7. Tamponnez chaque bord de coupe. Fenêtre de travail : 30–200ms. Les horodatages ASR dérivent de 50 à 100 ms — le tampon absorbe la dérive. Plus serré pour les rythmes rapides, plus lâche pour le cinématographique.
  8. ASR verbatim au niveau du mot uniquement. Jamais le mode SRT/expression (perd les données d'écart sub-secondes). Jamais de remplissages normalisés (perd le signal éditorial).
  9. Mettez en cache les transcriptions par source. Ne retranscrivez jamais à moins que le fichier source lui-même n'ait changé.
  10. Sous-agents parallèles pour plusieurs animations. Jamais séquentiel. Lancez N à la fois via l'outil Agent ; le temps mural total ≈ le plus lent des temps.
  11. Confirmation de la stratégie avant exécution. Ne touchez jamais au montage tant que l'utilisateur n'a pas approuvé le plan en français clair.
  12. Toutes les sorties de session dans <videos_dir>/edit/. N'écrivez jamais à l'intérieur du répertoire du projet freecut/.

Tout le reste dans ce document est un exemple concret. Déviez chaque fois que le matériau le justifie.

Structure des répertoires

Le skill vit dans freecut/. Les séquences utilisateur se trouvent là où ils les mettent. Toutes les sorties de session vont dans <videos_dir>/edit/.

<videos_dir>/
├── <fichiers sources, intacts>
└── edit/
    ├── project.md               ← mémoire ; ajouté à chaque session
    ├── takes_packed.md          ← transcriptions au niveau des phrases, la vue de lecture principale du LLM
    ├── edl.json                 ← décisions de montage
    ├── transcripts/<nom>.json  ← JSON ASR normalisé en cache
    ├── animations/slot_<id>/    ← source + rendu + raisonnement par animation
    ├── clips_graded/            ← extractions par segment avec étalonnage et fondus
    ├── master.srt               ← sous-titres de la timeline de sortie
    ├── downloads/               ← sorties yt-dlp
    ├── verify/                  ← images de débogage / PNG de timeline
    ├── preview.mp4
    └── final.mp4

Configuration

L'installation initiale se trouve dans install.md (clone, dépendances, ffmpeg, enregistrement du skill, clé API). Ne l'exécutez pas à chaque session ; lors d'un démarrage à froid, vérifiez simplement :

  • Le backend de transcription est disponible. Le backend par défaut est whisper (gratuit, local) — vérifiez que mlx-whisper (Apple Silicon) ou faster-whisper est importable. Si aucun des deux n'est installé, dites à l'utilisateur de pip install mlx-whisper (ou faster-whisper) plutôt que de passer silencieusement à un backend payant. Pour les backends optionnels vibevoice / elevenlabs, vérifiez VIBEVOICE_ASR_URL / ELEVENLABS_API_KEY dans l'environnement ou dans .env à la racine du dépôt freecut.
  • ffmpeg + ffprobe dans le PATH.
  • Dépendances Python installées (uv sync ou pip install -e . dans le dépôt).
  • Node.js + npm disponibles si la session nécessite HyperFrames ou des slots Remotion. HyperFrames nécessite actuellement Node.js 22+.
  • yt-dlp, HyperFrames, Remotion, Manim installés seulement lors de la première utilisation.
  • La configuration de l'animation pour la première utilisation a lieu dans le répertoire du slot, jamais à la racine du dépôt freecut. HyperFrames peut être invoqué avec npx --yes hyperframes ... ; Remotion peut être échafaudé avec npx create-video@latest ou installé comme dépendance locale du projet avant d'utiliser sa commande remotion render.
  • Ce skill vend skills/manim-video/. Lisez son SKILL.md lors de la construction d'un slot Manim.

Les outils (helpers/transcribe.py, helpers/render.py, etc.) se trouvent à côté de ce SKILL.md. Résolvez leurs chemins par rapport au répertoire contenant ce fichier — le skill est généralement un lien symbolique à ~/.claude/skills/freecut/ ou ~/.codex/skills/freecut/.

Outils

  • transcribe.py <video> — transcription d'un seul fichier. Backend enfichable via --backend {whisper,vibevoice,elevenlabs} (par défaut whisper, local + gratuit, locuteur unique). vibevoice utilise VIBEVOICE_ASR_URL pour la diarisation en temps réel ; elevenlabs utilise ELEVENLABS_API_KEY et supporte --num-speakers. Mis en cache.
  • transcribe_batch.py <videos_dir> — transcription parallèle avec 4 workers. Même indicateur --backend. Utilisez pour les prises multiples.
  • pack_transcripts.py --edit-dir <dir> — transcripts/*.json → takes_packed.md (au niveau des phrases, coupe sur silence ≥ 0,5 s ou changement de locuteur). Fonctionne de manière identique sur tous les backends car la forme JSON est normalisée.
  • timeline_view.py <video> <start> <end> — filmstrip + PNG de forme d'onde. Exploration visuelle à la demande. Pas un outil de balayage — utilisez-le aux points de décision, pas constamment.
  • render.py <edl.json> -o <out> — extraction par segment → concaténation → superpositions (décalées PTS) → sous-titres EN DERNIER. --preview pour 720p rapide. --build-subtitles pour générer master.srt en ligne.
  • grade.py <in> -o <out> — chaîne de filtres ffmpeg pour l'étalonnage. Préréglages + --filter '<raw>' pour personnalisé.

Pour les animations, créez <edit>/animations/slot_<id>/ avec Bash et lancez un sous-agent via l'outil Agent.

Le processus

  1. Inventaire. ffprobe de chaque source. transcribe_batch.py sur le répertoire. pack_transcripts.py pour produire takes_packed.md. Échantillonnez une ou deux timeline_view pour une première impression visuelle.

  2. Pré-analyse des problèmes. Un passage sur takes_packed.md pour noter les lapsus verbaux, les erreurs de langage évidentes ou les formulations à éviter. Liste simple, alimente le brief de l'éditeur.

  3. Dialogue. Décrivez ce que vous voyez en français clair. Posez des questions guidées par le matériau. Collectez : type de contenu, durée/format cibles, direction esthétique/de marque, rythme, moments à préserver, moments à couper, préférences d'animation et d'étalonnage, besoins en sous-titres. N'utilisez pas de liste de contrôle fixe — les bonnes questions sont différentes à chaque fois.

  4. Proposer une stratégie. 4 à 8 phrases : forme, choix des prises, direction du montage, plan d'animation, direction de l'étalonnage, style de sous-titres, estimation de la durée. Attendez la confirmation.

  5. Exécuter. Produisez edl.json via le brief du sous-agent éditeur. Plongez dans timeline_view aux moments ambigus. Construisez les animations dans des sous-agents parallèles. Appliquez l'étalonnage par segment. Composez via render.py.

  6. Aperçu. render.py --preview.

  7. Auto-évaluation (avant de montrer à l'utilisateur). Lancez timeline_view sur la sortie rendue (pas les sources) à chaque frontière de coupe (fenêtre de ±1,5 s). Vérifiez chaque image pour :

    • Discontinuité visuelle / flash / saut à la coupe
    • Pic de forme d'onde à la frontière (clic audio qui a échappé au fondu de 30 ms)
    • Sous-titre caché derrière une superposition (violation de la règle 1)
    • Superposition mal alignée ou montrant les mauvaises images (violation de la règle 4)

    Échantillonnez également : les 2 premières secondes, les 2 dernières secondes et 2 à 3 points intermédiaires — vérifiez la cohérence de l'étalonnage, la lisibilité des sous-titres, la cohérence générale. Lancez ffprobe sur la sortie pour vérifier que la durée correspond à l'attente de l'EDL.

    Si quelque chose échoue : corrigez → re-rendu → ré-évaluez. Limitez à 3 passes d'auto-évaluation — si des problèmes persistent après 3 passes, signalez-les à l'utilisateur plutôt que de boucler indéfiniment. Ne présentez l'aperçu qu'une fois l'auto-évaluation réussie.

  8. Itérer + persister. Retour d'information en langage naturel, re-planification, re-rendu. Ne retranscrivez jamais. Rendu final sur confirmation. Ajoutez à project.md.

Techniques de coupe

  • Audio d'abord. Coupes candidates à partir des frontières de mots et des silences.
  • Préservez les pics. Rires, punchlines, temps forts. Prolongez après les punchlines pour inclure les réactions — le rire EST le temps fort.
  • Les changements de locuteur bénéficient d'un espace entre les paroles. Valeurs courantes : 400–600 ms. Moins pour un rythme rapide, plus pour un style cinématographique. Décision esthétique.
  • Les événements audio comme signaux. (rires), (soupirs), (applaudissements) marquent les temps forts. Prolongez au-delà.
  • Les silences sont des candidats à la coupe. Les silences ≥400 ms sont généralement les plus propres. Les frontières de phrase de 150 à 400 ms sont utilisables avec une vérification visuelle. <150 ms est dangereux (au milieu d'une phrase).
  • Exemple de tampon de coupe (la vidéo de lancement livrée avec ce skill) : 50 ms avant le premier mot conservé, 80 ms après le dernier. Plus serré pour l'énergie du montage, plus lâche pour le documentaire. Restez dans la fenêtre de travail de 30 à 200 ms (règle dure 7).
  • Ne raisonnez jamais sur l'audio et la vidéo indépendamment. Chaque coupe doit fonctionner sur les deux pistes.

La transcription compacte (vue de lecture principale)

pack_transcripts.py lit tous les transcripts/*.json et produit un fichier markdown où chaque prise est une liste de lignes au niveau des phrases, chacune précédée de sa plage temporelle [start-end]. Les phrases sont coupées sur tout silence ≥ 0,5 s OU changement de locuteur. C'est l'artefact que le sous-agent éditeur lit pour choisir les coupes — il donne une précision au niveau du mot à partir du seul texte avec 1/10 des jetons du JSON brut.

Exemple de ligne :

## C0103  (durée : 43,0 s, 8 phrases)
  [002.52-005.36] S0 Quatre-vingt-dix pour cent de ce qu'un agent web fait est complètement gaspillé.
  [006.08-006.74] S0 Nous avons résolu ce problème.

Brief du sous-agent éditeur (pour la sélection multi-prises)

Lorsque la tâche est « choisir la meilleure prise de chaque temps fort parmi plusieurs clips », lancez un sous-agent dédié avec un brief similaire à celui-ci. La structure est importante ; l'exemple de forme de pitch ne l'est pas.

Vous éditez une vidéo de <type>. Choisissez la meilleure prise de chaque temps fort et
assemblez-les chronologiquement par temps fort, pas par ordre de clip source.

ENTRÉES :
  - takes_packed.md (transcriptions au niveau des phrases avec annotations temporelles de toutes les prises)
  - Contexte produit/narratif : <2 phrases de l'utilisateur>
  - Locuteur(s) : <nom, rôle, note de style de livraison>
  - Structure attendue : <choisissez un archétype ou inventez-en un>
  - Lapsus verbaux à éviter : <liste du passage de pré-analyse>
  - Durée cible : <secondes>

Archétypes structurels courants (choisissez, adaptez ou inventez) :
  - Lancement tech / démo :   ACCROCHE → PROBLÈME → SOLUTION → BÉNÉFICE → EXEMPLE → APPEL À L'ACTION
  - Tutoriel :             INTRODUCTION → MISE EN PLACE → ÉTAPES → PIÈGES → RÉCAPITULATIF
  - Interview :            (QUESTION → RÉPONSE → RELANCE) répété
  - Voyage / événement :   ARRIVÉE → TEMPS FORTS → MOMENTS CALMES → DÉPART
  - Documentaire :         THÈSE → PREUVES → CONTREPOINT → CONCLUSION
  - Musique / performance : INTRODUCTION → COUPLET → REFRAIN → PONT → OUTRO
  - Ou inventez le vôtre.

RÈGLES :
  - Les heures de début/fin doivent tomber sur des frontières de mots de la transcription.
  - Tamponnez les bords de coupe (fenêtre de travail 30–200 ms).
  - Préférez les silences ≥ 400 ms comme cibles de coupe.
  - Les lapsus inévitables sont conservés s'il n'existe pas de meilleure prise. Notez-les dans « raison ».
  - Si hors budget, révisez : supprimez un temps fort ou rognez les fins. Signalez le total et corrigez-vous.

SORTIE (tableau JSON, pas de prose) :
  [{"source": "C0103", "start": 2.42, "end": 6.85, "beat": "ACCROCHE",
    "quote": "...", "reason": "..."}, ...]

Retournez l'EDL final et une vérification de la durée totale en une ligne.

Étalonnage (sur demande)

Votre travail consiste à raisonner sur l'image, pas à appliquer un préréglage. Regardez une image (via timeline_view), décidez ce qui ne va pas, ajustez une chose, regardez à nouveau.

Le modèle mental est ASC CDL. Par canal : out = (in * slope + offset) ** power, puis saturation globale. slope → hautes lumières, offset → ombres, power → tons moyens.

Exemples de chaînes de filtres (grade.py a --list-presets ; utilisez-les comme points de départ ou mélangez les vôtres) :

  • warm_cinematic — rétro/technique, subtile division teal/orange, désaturé. Livré dans une vraie vidéo de lancement. Sûr pour les têtes parlantes.
  • neutral_punch — correctif minimal : contraste augmenté + courbe en S douce. Pas de décalage de teinte.
  • none — copie directe. Par défaut lorsque l'utilisateur n'a rien demandé.

Pour tout le reste — portrait, nature, produit, clip musical, documentaire — inventez votre propre chaîne. grade.py --filter '<raw ffmpeg>' accepte n'importe quelle chaîne de filtres.

Règles dures : appliquez par segment lors de l'extraction (pas après la concaténation, ce qui ré-encode deux fois). Ne devenez jamais agressif sans tester les tons de peau.

Sous-titres (sur demande)

Les sous-titres ont trois dimensions à prendre en compte : le découpage (1/2/3 ou phrase par ligne), la casse (MAJUSCULES/Première lettre en majuscule/Naturel) et l'emplacement (marge par rapport au bas). La bonne combinaison dépend du contenu.

Styles travaillés — choisissez, adaptez ou inventez le vôtre :

StyleDécoupageCasseEmplacementQuandExemple
Poétique1–2 mots par ligneMots choisis en majuscules, le reste en minusculesBas, centré, fondNarration lyrique, poésieCIEL / étoile
Interview50–75 % de la largeur, phrase complèteMinuscule naturelleBas, centré, barre semi-transparenteInterviews, documentairesJe pense que le changement climatique est...
Tutoriel100 % de la largeur, 1–2 lignesMinuscule naturelleBas, centré, fond pleinTutoriels, conférencesEnsuite, vous initialisez le vecteur de poids
KaraokéMot par motMinusculeBas, centré, pas de fondContenu musical ou rythméEnsuite (apparaît) → vous (apparaît) etc.
Accessibilité1× phrase complèteMinuscule sauf noms propresBas, centré, fond plein, taille 1,5×, contraste 7:1Conformité WCAG, tout public
Cinématique1 seul mot-clé par ligneMinuscule, police fineAu centreStorytelling minimalisteattendez
Plein écran1 mot, centréMinuscule, police grasseCentre de l'écran, 40 % de hauteurAccent dramatiquenon

Exemples de commandes ffmpeg pour les sous-titres :

Sous-titres statiques (chemin principal) :

ffmpeg -i final_no_subs.mp4 -vf \
  "subtitles=master.srt:force_style='Alignment=2,FontName=Arial,FontSize=18,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=1,Outline=1,Shadow=0,MarginV=30'" \
  -c:a copy final.mp4

Sous-titres de karaoké (mot par mot) :

ffmpeg -i final_no_subs.mp4 -vf \
  "subtitles=master.srt:force_style='Alignment=2,FontName=Arial,FontSize=20,PrimaryColour=&HFFFFFF,OutlineColour=&H000000,BorderStyle=1,Outline=1,Shadow=0,MarginV=40'" \
  -c:a copy final_karaoke.mp4

Règles dures pour les sous-titres :

  • Appliquez EN DERNIER dans la chaîne de filtres (règle dure 1).
  • Le SRT maître utilise les décalages de la timeline de sortie (règle dure 5).
  • Ne coupez jamais à l'intérieur d'un mot (règle dure 6).
  • Si le dialogue est rapide, 3 lignes sont acceptables ; plus que cela est illisible.

Exemple de session de montage : Vidéo de lancement

Cette section documente une session réelle — vidéo promotionnelle SaaS de 45 secondes, une seule tête parlante. Elle illustre le processus décrit ci-dessus. Adaptez-la à votre matériau.

Inventaire → Prétraitement

Identique au processus principal : ffprobe → transcription → pack → échantillon visuel.

Dialogue

Posez des questions, ne présumez pas. Le dialogue réel de la session de lancement :

Moi : Quelle est l'ambiance de cette vidéo ? C'est un lancement technique, donc plutôt professionnel et net ? Ou vous cherchez quelque chose de plus décontracté et en phase avec la culture startup ?

Utilisateur : Les deux. Les démos techniques doivent inspirer confiance, mais je veux aussi que cela semble ambitieux — comme si nous construisions l'avenir.

Moi : Je vois. Donc une palette sobre avec une subtile chaleur dans les tons de peau pour le côté humain, et des animations élégantes pour le côté visionnaire. Des préférences de couleurs ?

Utilisateur : Utilisons les deux. Bleu foncé, blanc, une touche de doré.

...discussion sur la structure, les prises à utiliser, la durée cible...

Moi : OK, voici ma stratégie : nous ouvrons sur le problème immédiatement — un hook. Un plan large de vous, puis un plan rapproché serré lorsque vous parlez de la solution. Nous découpons autour de 95 % des pauses, en gardant les rires et la respiration pour l'énergie. Animations : un défilement de code élégant pendant que vous montrez l'indice d'utilisation — une superposition de style code flottant. À la fin, un appel à l'action superposé sur un plan large de vous. L'étalonnage sera un bleu foncé professionnel avec des reflets chauds — un aspect warm_cinematic modifié. Les sous-titres suivront le style « poétique » — pas de légendes standard, mais des mots-clés flottant sur l'écran aux moments clés. Devrait faire environ 45 secondes. Qu'en pensez-vous ?

Utilisateur : J'aime la direction. Allez-y.

Exécution (réelle)

Le sous-agent éditeur a sélectionné :

[
  {"source": "C0103", "start": 2.42, "end": 6.85, "beat": "ACCROCHE",
    "quote": "...les agents web gaspillent..."},
  {"source": "C0103", "start": 7.1, "end": 12.3, "beat": "PROBLÈME",
    "quote": "...l'utilisateur moyen..."},
  ...
]

L'animation du défilement de code a été construite avec PIL (image d'arrière-plan de code, superposition avec position et opacité animées), rendue comme une courte vidéo transparente de 3 secondes. Le sous-agent d'animation a choisi un décalage de tremblement de 3 %, une exponentielle douce pour l'entrée et la sortie, et une sensation de début de démo technique.

La superposition de l'appel à l'action finale a été un texte "Essayez Gratuitement" entrant avec un fondu de 0,6 seconde, maintenu 2 secondes, puis sortant progressivement.

L'étalonnage a utilisé :

curve=preset=medium_contrast:
  red='0/0 0.1/0.15 0.3/0.35 0.5/0.5 0.7/0.65 0.9/0.85 1/1':
  green='0/0 0.1/0.1 0.3/0.3 0.5/0.5 0.7/0.7 0.9/0.9 1/1':
  blue='0/0 0.1/0.1 0.3/0.3 0.5/0.5 0.7/0.65 0.9/0.8 1/1',
eq=saturation=0.85,
hue=H=10

(Cela donne un aspect teal/orange avec des noirs bleutés)

Auto-évaluation (réelle)

La passe d'auto-évaluation a détecté que l'animation de défilement de code apparaissait 1 image trop tard (décalage de PTS) — la règle dure 4 a été corrigée. Aucun autre problème. Pas de second passage nécessaire.

Résultat

Sortie : final.mp4 dans edit/. L'utilisateur a été ravi. La session a été ajoutée à project.md.


Ce document est un point de départ, pas un ensemble de restrictions. Plus que tout, n'oubliez pas la règle 6 : inventez librement.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés