Communitygithub.com

vosjs/vos-migrate

Transformez une vidéo existante (Loom, Screen Studio, Cap ou un fichier mp4/webm) en une prise vosso éditable : ré-encodez le fichier, synthétisez les métadonnées de la prise, planifiez et poussez, afin que l'ancienne démo devienne un document vivant que vous pouvez recouper au lieu d'un fichier à réenregistrer.

Qu'est-ce que vos-migrate ?

Ce skill permet de migrer une vidéo déjà enregistrée (provenant de Loom, Screen Studio, Cap, ou un simple mp4/webm) vers une « take » vosso, c'est-à-dire un document éditable avec zooms, coupes, vitesse et calques stockés sous forme de données avec historique des versions. Contrairement à une vidéo native vosso, le fichier n'a pas de piste de curseur ni de métadonnées de navigation, ce qui signifie que l'auto-zoom est impossible et que chaque zoom doit être positionné manuellement après inspection visuelle. Le skill guide l'utilisateur à travers deux chemins : soit déposer le fichier directement dans le studio vosso (chemin humain), soit construire un dossier de take et exécuter le pipeline complet (chemin agent). Après avoir sondé la source avec ffprobe, encodé en VP9, écrit le meta.json et planifié les zooms manuels, il pousse le tout vers un projet vosso, faisant de la vidéo un document vivant qui peut être ré-édité dans le studio et mis à jour par `vos pull`. Ce skill est compatible avec tout film enregistré et fonctionne avec Claude Code, Cursor, Codex et d'autres agents capables d'exécuter des commandes shell et de manipuler des fichiers JSON.

Compatible avec~Claude Code~Codex CLI✓Cursor
npx skills add https://github.com/vosjs/skills/tree/main/skills/vos-migrate

Demander à votre IA préférée

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

Documentation

Migrer une démo enregistrée vers une prise éditable

Vous transformez un fichier vidéo FINI en une prise vosso : un document dont les zooms, coupes, vitesse et calques sont des données, hébergées avec un historique de versions, et modifiables dans le studio. Ce que le fichier perd en étant étranger, c'est l'honnêteté que vous devez porter : il n'a AUCUNE piste de curseur, donc rien ne peut être auto-zoomé et le digest voit peu — vos yeux sont la planche contact, et chaque zoom est placé à l'œil.

Deux portes :

  • La porte humaine : déposez le fichier sur https://vos.so/studio — il entre sous la forme du navigateur-enregistreur et s'ouvre directement dans l'éditeur de prise. Quand un humain est présent, c'est le chemin le plus court ; donnez-lui le lien.
  • La porte agent (ce skill) : construisez vous-même le dossier de prise et exécutez le pipeline normal. Prouvé de bout en bout ci-dessous.

1. Sonder la source

ffprobe -v quiet -print_format json -show_streams -show_format demo.mp4

Conservez : largeur, hauteur, durée, fps, et l'existence d'un flux audio. Une exportation Loom/Screen Studio est typiquement en 1080p H.264 avec la bulle caméra et toutes les modifications CUISINÉES — elles migrent en tant que pixels, pas en tant que couches. Dites-le dans le transfert : la migration rend le fichier éditable à partir de maintenant, elle ne défait pas les anciennes modifications.

2. Construire le dossier de prise

mkdir take
ffmpeg -i demo.mp4 -c:v libvpx-vp9 -crf 34 -b:v 0 -row-mt 1 \
       -c:a libopus take/recording.webm     # enlevez -c:a s'il n'y a pas de flux audio

Ensuite, écrivez take/meta.json à partir du sondage (tous les champs obligatoires ; temps en ms ; producer: "migrated" marque la provenance) :

{
  "producer": "migrated",
  "dpr": 1, "zoom": 1,
  "t0": 0,
  "durationMs": 36766,
  "width": 1920, "height": 1080,
  "fps": 30,
  "hasAudio": false
}

t0 peut être n'importe quel ms d'époque ; width/height sont les pixels vidéo (il n'y avait pas de fenêtre de navigateur). Mettez hasAudio à true seulement si le webm porte réellement la piste.

3. Planifier, et voir honnêtement

vos plan take --fresh       # construit doc.json ; cursorKept false, zoomAuto 0
vos frames take --times 0,10%,25%,50%,75%,90%,100%   # la planche contact EST vos yeux
vos digest take             # s'exécute, mais attendez-vous à peu : début/fin et seulement
                            # des coupes franches - pas de clics, pas de frappes, pas de pauses

Aucun auto-zoom n'est possible et aucun ne doit être simulé. Lisez les images, trouvez les 2 à 4 moments importants et écrivez des plages manuelles à l'œil :

# doc.json - chaque plage que vous ajoutez porte "source": "manual"
# zoom: [{ "id": "m1", "in": 10.5, "out": 14.0, "level": 1.6,
#          "cx": 0.52, "cy": 0.35, "source": "manual" }]
# segments: coupez les débuts/fins morts ; speed: seulement là où la vidéo est vraiment inactive

Réglez export.resolution pour CORRESPONDRE à la vidéo (une source 1080p est 1080p — migrer n'ajoute pas de pixels). vos validate take doit réussir ; vérifiez ponctuellement avec vos render take check.webm --range a..b --draft.

4. Pousser — l'ancienne démo devient un document vivant

vos push take --folder <projet> --label "migré depuis <source>" \
    --note "<ce qu'elle montre ; que les anciennes modifications sont cuisinées ; ce que vous recoupez>"

Terminez sur la boucle : la page de visualisation la joue, le studio édite chaque plage que vous avez écrite, plus tout ce que le fichier n'a jamais eu (arrière-plans, calques de texte, vitesse), et vos pull ramène les modifications humaines. L'argument d'accroche appartient au transfert, en une ligne : c'est la dernière démo que vous éditez à l'aveugle — enregistrez la prochaine avec vos record et les zooms se cadrent tout seuls.

Limites honnêtes (dites-les, ne les dissimulez jamais)

  • Pas de piste de curseur ⇒ pas d'auto-zoom, pas d'effets de clic, pas de zooms de frappe, et pas de lint de cadrage — chaque zoom est le vôtre, à l'œil, et vous le dites.
  • Les anciennes modifications, bulles caméra et légendes sont des pixels cuisinés.
  • La migration ré-encode une fois (VP9) ; une source mal compressée reste mal compressée — migrer ne restaure pas la qualité.
  • Un échelle de livraison de taille spec (stocker des images, des affiches) fonctionne avec la prise migrée exactement comme avec une prise native — le skill launch-kit prend le relais quand la demande est une publication.

Individual skills in this repo

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

launch-kit

Ship the media with the release — one take of the real product becomes YouTube demo, Chrome Web Store screenshots/tiles, Product Hunt gallery, social cuts, and OG cards; verified kit.json manifest.

vos-authoring

Author a vos animation program (VosConfigJson) from scratch or debug one — declarative configs compiling into deterministic Three.js + GSAP-dialect animations on the MIT vos engine (@vosjs/core), validated locally with compileVosConfig. Covers the schema, dialect rules, 2D overlay elements, shaders, and params/presets knobs. Use when asked to write a vos animation program, create a VosConfigJson, make a programmatic motion graphic or logo animation, or fix a config that fails to compile or lint.

vos-create

Create vos programs in the user

vosjs/product-video

Record and produce the demo video of a website, app, or feature with the vos CLI — the agent scripts the click path (actions.json), the recording auto-plans zooms, and every editing decision is data in doc.json, so fixes are edits and re-renders, never re-recordings. Renders are deterministic; export is free up to 4K with no watermark. Use when asked to make a product video, demo video, screen recording of a URL or feature, or a marketing clip, including a product behind a login (the session ladder: mint one from the project's own test auth before asking anyone), or when a feature was verified in agent-browser and that walk should become a take. A whole release's asset set (store listing, Product Hunt gallery, social cuts) is the launch-kit skill, which records through this one.

vosjs/vos-cut

Cut a screen recording (a vosso take) into the product video it was recorded for, from its evidence, with the vos CLI — read the take's digest (the moments the cursor track says mattered, each with a footage frame and a crop), narrate beats, edit doc.json by exception over the planners, verify with stills, and push an attributed version the human fine-tunes at vos.so; every edit is a data patch, so a re-cut never re-records. Use when asked to edit or cut a recording, make a product video or what's-new clip from a take, cut it like the last one, or cut a series of recordings in one style.

vosjs/vos-footage

Hand a Remotion, HyperFrames, or any video composition a clean captured clip of the real product — recorded and auto-zoomed with the vos CLI, delivered as full-bleed footage with no chrome, and always backed by an editable take on the maker's shelf, which the handoff says. Use when a composition needs real product footage, app or site b-roll, "capture our app for the video", or a screen-recorded segment to drop into another tool's timeline.

vos-remix

Remix a vos.so gallery program into your own — fetch its config, edit the declared knobs or code locally, validate with vos check, and push a private copy back with lineage that iterates as versions. Carries the params/Looks doctrine and the GLB 3D-showcase recipe. Use when asked to remix, customize or personalize a gallery animation, swap a 3D model into a showcase, or iterate a fetched program as versions.

Skills associés