Communitygithub.com

Angles

Créez une vidéo produit calme et photographique (mouvement de caméra lent, plan serré et incliné, rendu écran réaliste, mise au point douce) à partir d'un enregistrement d'écran ou d'une capture d'écran, rendue localement avec le studio Angles. Idéal pour les vidéos de démonstration, les présentations de produits, les clips de lancement et les « vidéos mockup ».

Qu'est-ce que Angles ?

Angles est un outil spécialisé dans la génération de vidéos produit élégantes et photographiques, directement depuis le terminal. Il transforme des enregistrements d'écran ou des captures d'écran en clips vidéo professionnels avec des mouvements de caméra lents et cinématiques, sans nécessiter d'édition manuelle dans un studio. L'utilisateur écrit un petit fichier de spécifications JSON, exécute une commande `check` pour prévisualiser rapidement les différentes options de style (sous forme de planche d'images), puis une commande `make` pour générer la vidéo MP4 finale. Angles supporte une grande variété de styles de caméra (close, raking, float, etc.), des niveaux d'intensité de mouvement (de still à bold), des arrière-plans, des ombres, des effets de mise au point, des incrustations, et même des séquences multi-styles via les `beats`. L'outil est conçu pour la rapidité et l'itération : la commande `check` est très rapide (environ 5 secondes) et produit une seule image avec toutes les variantes, permettant de choisir la meilleure sans avoir à générer plusieurs vidéos. Il est compatible avec Claude Code, Cursor, Codex et tout agent capable d'exécuter des commandes shell.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/HansEngebretsen/angles/tree/main

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 Angles ?

Écrivez une petite spécification JSON, exécutez une commande et lisez une ligne JSON en retour. N'ouvrez pas et ne modifiez pas le studio ; la spécification atteint tout ce qu'il peut créer, et rejette tout ce qu'il ne peut pas.

node <ce dossier>/angles.mjs check spec.json   # ~5s, pas de vidéo : une planche, une rangée de 4 images par variante
node <ce dossier>/angles.mjs make spec.json    # le mp4 (1920 de large, environ 4s de travail par seconde de vidéo) + une planche
  1. Vérifiez avant de créer. Placez les options que vous évaluez dans variants. Un check les affiche toutes sous forme de rangées étiquetées dans une seule petite image. Regardez la planche, choisissez une rangée, puis exécutez make une fois avec les champs de cette rangée fusionnés dans la spécification (et variants supprimés). Ne générez pas de vidéos pour comparer les rendus.
  2. Regardez une planche, jamais le mp4. Lisez le chemin de la planche qu'il affiche. Cela suffit pour juger le cadrage, l'angle et la mise au point.
  3. Sur ok: false, corrigez uniquement ce que les warnings nomment. Ils listent les choix valides. node angles.mjs schema affiche chaque choix si vous en avez besoin. Ne devinez pas.
{ "source": "~/Desktop/demo.mov", "out": "~/Desktop/angles", "trim": { "in": 2, "out": 8 },
  "look": "bright", "background": "mist", "shadow": "soft",
  "variants": [{ "style": "close", "level": "gentle" }, { "style": "raking" }, { "style": "float" }] }
ChampValeurs
sourceun enregistrement (.mov .mp4 .webm) ou une capture d'écran (.png .jpg). Les enregistrements sont découpés en images une fois et réutilisés (--fresh refait l'opération).
styleclose, raking (en gros plan à un angle réel) ; float, angle, flyby, focus, push, reveal, rise, tiltshift
levelstill, whisper (par défaut), gentle, lively, bold. Chacun est un budget de vitesse, et le mouvement se réduit pour s'y adapter. speed ≤ budget est considéré comme calme.
trim, loop, aspect{ "in": s, "out": s } ; true fond la fin dans le début ; 16:9 (par défaut), 1:1, 9:16, n'importe quel L:H
beatsplusieurs styles dans un seul clip : [{ "at": 0, "style": "float" }, { "at": 4, "style": "close" }]
look, lookAmountbright, crisp grain, glossy, sunlit, pixel macro, cool studio, film print, none ; 0–1
background, shadowmist linen sky sage blush dusk ou #hex ; none soft close float
focus{ "at": s, "u": 0–1, "v": 0–1, "size": 30 }. Omettez u/v pour faire la mise au point là où l'enregistrement change.
overlays[{ "at": 1, "dur": 1.5, "keys": ["⌘", "K"] }] ou { "text": "…" } : badges au-dessus de la caméra
ease, dir, travelsteady soft settle constant ; left right ; 0–2 (par défaut .8)

Astuce : la subtilité gagne (whisper ou gentle), une idée par clip (un style, ou deux ou trois beats), et un trim de 3 à 8 secondes se terminant sur l'action.

Nécessite Chrome, ffmpeg, node 18+ et python3 avec numpy et pillow ; exécutez npm i une fois ici. Il se sert lui-même sur le port 8790 (définissez ANGLES_PORT pour le changer).

Skills associés