Communitygithub.com

sf-ryanyan/fullgrade

Correction automatique et douce de la couleur et de la lumière pour les vidéos (étalonnage, exposition, balance des blancs, uniformisation des clips). Idéal pour les vidéos sombres, jaunes, bleues, sur-exposées, grises ou plates, le décodage LOG (DJI D-Log, Sony S-Log3, Panasonic V-Log, Apple Log) et l'iPhone HDR.

Qu'est-ce que fullgrade ?

Fullgrade est un outil de correction automatique et douce de la couleur pour les vidéos, fonctionnant entièrement en local avec ffmpeg et Python, sans GPU ni API cloud. Il permet de corriger l'exposition, la balance des blancs, le contraste et la saturation, et d'appliquer des préréglages d'ambiance (naturel, immobilier, chaleureux, vif, moderne froid, cinématique). Il traite chaque plan d'un montage final séparément, reframe aux formats 9:16, 16:9, 1:1 ou 4:5 sans étirement, et gère automatiquement les vidéos iPhone HDR et les courbes LOG. Il est adapté pour toute demande de correction colorimétrique, d'étalonnage, d'uniformisation des couleurs ou de changement de rapport hauteur/largeur, sans modification des originaux. Supporte Windows, macOS et Linux, avec une sortie vidéo dans un dossier `_graded` et un rapport HTML/MD complet.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/sf-ryanyan/fullgrade/tree/HEAD

Demander à votre IA préférée

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

Documentation

Que fait fullgrade ?

Correction automatique et douce de la couleur pour la vidéo. Tout fonctionne en local avec ffmpeg + Python ; pas de GPU, ni d'API cloud, presque aucun token (l'analyse est faite par le script, pas en regardant les images).

Langue : répondre dans la langue de l'utilisateur. Si l'utilisateur écrit en chinois, passer --lang zh pour que le rapport et les images de comparaison soient en chinois ; sinon --lang en.

1. Environnement (première exécution, ou en cas d'échec)

python3 <skill_dir>/scripts/fullgrade.py --check

Si quelque chose manque, indiquer à l'utilisateur la commande nécessaire :

ManquantmacOSWindowsLinux
ffmpegbrew install ffmpegwinget install ffmpegsudo apt install ffmpeg
numpy / Pillowpython3 -m pip install numpy pillow (ajouter --break-system-packages si pip refuse)
recadrage intelligent (optionnel)python3 -m pip install opencv-python-headless

Exécuter le script sur la machine où se trouvent les vidéos. Si les fichiers ont été chargés dans un sandbox, l'exécuter là-bas et renvoyer les sorties. Sous Windows, utiliser python au lieu de python3 si python3 n'est pas trouvé.

Optionnel : python3 <skill_dir>/scripts/fullgrade.py --selftest construit des séquences synthétiques et vérifie chaque fonctionnalité (environ 2–3 minutes). L'utiliser si l'utilisateur demande « est-ce que ça marche sur mon ordinateur ? ».

2. Transformer la demande en une commande

python3 <skill_dir>/scripts/fullgrade.py <fichiers-ou-dossiers> [options] --lang <en|zh>
L'utilisateur dit…Option
rien sur le style / « corrige juste » / 自然--preset natural (défaut)
immobilier, intérieur, lumineux et aéré / 房产, 明亮通透--preset real-estate
chaleureux, cosy, soirée / 温暖, 温馨--preset warm
vif, alimentaire, produit / 鲜艳, 美食--preset vivid
propre, froid, moderne, tech / 清冷, 现代--preset cool-modern
cinématographique, look film, vlog / 电影感--preset cinematic
vertical, TikTok, Reels, Shorts, 抖音, 小红书--ratio 9:16
YouTube, paysage / 横屏--ratio 16:9
carré / flux Instagram--ratio 1:1 ou --ratio 4:5
remplir le cadre, sans barres / 裁切--fit crop
garder toute l'image / 不要裁, 补边--fit blur
barres noires / blanches--fit color --pad-color black (ou white)
drone / DJI D-Log--log dlog
Sony S-Log3 · Panasonic V-Log · iPhone Apple Log--log slog3 · --log vlog · --log applelog
tout faire correspondre à ce clip / photo--match <file> (--match-method mkl par défaut ; reinhard, hist)
faire correspondre tous les clips entre eux étroitement--match hero
touche plus légère / ne pas en faire trop / 轻一点--strength 0.6
export plus rapide--fast (encodeur matériel Apple / NVIDIA / Intel, repli automatique)
meilleure qualité--quality best
inclure les sous-dossiers--recursive
seulement vérifier, sans exporter--analyze-only
un seul réglage pour tout le fichier--no-split
fichiers LUT pour Premiere / DaVinci / Final Cut / CapCutpointer vers <skill_dir>/luts/ (ou --export-luts <dossier>)

Valeurs par défaut déjà adaptées pour la plupart des gens : --fit auto (recadre si cela conserve ≥60% de l'image, sinon fond flou — donc 16:9 ↔ 9:16 utilise un fond flou sauf si l'utilisateur demande le recadrage), --dynamic auto, --denoise auto.

Ne pas demander le rapport hauteur/largeur sauf si l'utilisateur le mentionne — conserver l'original. Demander uniquement lorsque la demande est vraiment peu claire (par exemple, ils disent « LOG » mais pas quelle caméra).

3. Ce qui se passe (expliquer brièvement uniquement si demandé)

  1. iPhone HDR → SDR automatiquement ; LOG décodé quand --log est donné (le script prévient lorsqu'un clip ressemble à du LOG).
  2. Un montage final est découpé en plans (détection de scène) ; chaque plan est étalonné individuellement.
  3. Par plan : balance des blancs → niveaux noir/blanc (hautes lumières protégées) → exposition dans une bande de confort → contraste → saturation → préréglage d'ambiance → correspondance optionnelle. Intégré dans une LUT 3D par plan avec des limites de sécurité, pour ne jamais exagérer.
  4. La luminosité qui dérive à l'intérieur d'un plan (marcher d'un couloir sombre à une pièce lumineuse) est lissée (exposition dynamique). Les plans fortement éclaircis reçoivent un léger débruitage.
  5. Le recadrage n'étire jamais ; le recadrage intelligent suit les visages (si OpenCV est installé) ou la zone la plus détaillée.
  6. Un clip qui semble déjà correct est copié sans ré-encodage.

Vitesse : le traitement prend environ 1–3× la durée de la vidéo pour du 1080p (4K prend plus de temps). Pour les fichiers longs ou nombreux, dire à l'utilisateur que c'est en cours et attendre ; ne pas annuler. Utiliser --fast s'ils sont pressés.

Code de sortie : 0 = tout est fait · 2 = certains fichiers ont échoué (les autres sont OK — la fin de la sortie liste Fait : X OK, Y échoué et le rapport montre pourquoi) · 1 = rien n'a pu être traité. Toujours dire à l'utilisateur quels fichiers ont échoué et pourquoi (causes courantes : pas une vidéo, fichier endommagé, fichier audio uniquement).

4. Sorties

  • Vidéos : <dossier d'entrée>/_graded/<nom>_<préréglage>[_9x16].mp4 — jamais écrasé (ajoute _v2), originaux intacts.
  • _graded/compare/*_compare.jpg — images avant/après. Toujours en montrer au moins une à l'utilisateur.
  • _graded/fullgrade_report.html — curseurs avant/après, chiffres et oscilloscopes pour chaque plan. Le proposer.
  • _graded/fullgrade_report.md — les mêmes chiffres en texte ; le lire pour écrire votre résumé.

5. Réponse

Bref résumé dans la langue de l'utilisateur : combien de vidéos, quel préréglage/ratio, où sont les fichiers, une ou deux phrases sur ce qui a changé (d'après le rapport, par ex. « le plan 2 était très jaune et est maintenant neutre ; les hautes lumières de la fenêtre ont été protégées »), l'image/les images de comparaison, et une prochaine étape utile (un autre préréglage, une version 9:16, --strength s'ils veulent plus léger).

Limites honnêtes

  • Les fenêtres/ciels complètement blancs brûlés ne peuvent pas être récupérés ; le reste de l'image est quand même amélioré.
  • Les séquences très sombres montrent du bruit lorsqu'elles sont éclaircies (un léger débruitage aide, ce n'est pas magique).
  • La lumière mixte dans un même plan (lampe orange + lumière du jour bleue) est équilibrée en compromis.
  • Les fondus entre deux plans très différents peuvent montrer un petit saut au niveau de la coupe.
  • Le D-Log M de DJI et d'autres courbes LOG non listées ne sont pas supportés en V1 — les étalonner sans --log et utiliser --strength.

Skills associés