Travel Vlog
Transformer un ensemble de photos de voyage géolocalisées et une photo de vous en un vlog cartographique vertical de 30 à 90 secondes au style carnet de voyage : photos triées par heure et fusionnées en
- Quoi
- Transformer un ensemble de photos de voyage géolocalisées et une photo de vous en un vlog cartographique vertical de 30 à 90 secondes au style carnet de voyage : photos triées par heure et fusionnées en
- Coût
- Gratuit
- Prérequis
- Avant de commencer : lis ce prompt d'installation au complet, dis-moi en quelques lignes ce que ce skill fait et ce que son installation implique, et attends mon feu vert avant de faire quoi que ce soit d'autre.
- Installation
- Copiez le prompt d’installation ci-dessous dans votre Muse — votre agent fait le reste.
Sélectionné par Skill Harbor — Transformer un ensemble de photos de voyage géolocalisées et une photo de vous en un vlog cartographique vertical de 30 à 90 secondes au style carnet de voyage : photos triées par heure et fusionnées en étapes, chaque étape géocodée à rebours et reliée par la vraie route Amap à pied ou en voiture, un avatar cartoon « chibi » de vous généré depuis votre photo (ou intégré, sans frais) qui sautille le long de la route avec un compteur de kilomètres, un clic d'obturateur et une photo étiquetée qui surgit à chaque étape, et une fin en mur de photos avec le nombre d'étapes et la distance totale, avec musique et bruitages synthétisés localement. Crédit : @SpaceZephyr. Licence MIT. Skill Harbor ne vérifie jamais le code, examinez-le vous-même avant usage.
Version :
Installation
Copiez le dossier d’installation ci-dessous, puis collez-le dans Muse📌 Version épinglée : commit 65ab781Le prompt d'installation ci-dessous inclut déjà les étapes de vérification : votre agent suit la checklist communautaire avant d'installer tout ce qui contient du code exécutable. Vous en voulez plus ?
- Peut lancer des commandes sur l’ordinateur de ton Muse.
- Peut contacter des services externes par le réseau.
- Peut créer ou modifier des fichiers.
- Fonctionne avec une clé API ou un jeton que tu fournis.
Ce que le scan a trouvé — extraits du prompt d’installation
- exécute des commandes — Prerequisites: none for the install itself: no account, no API key, no paid service, and nothing is run or dow · Prérequis : aucun pour l'installation elle-même : aucun compte, aucune clé API, aucun service payant, et rien
- fait des appels réseau — - What leaves this machine at use time, disclosed here before it ever happens — using the skill is a separate · - Ce qui quitte cette machine à l'usage, divulgué ici avant que ça arrive — utiliser le skill est une étape sé
- écrit des fichiers — Prerequisites: none for the install itself: no account, no API key, no paid service, and nothing is run or dow · - Dependency layout, verified in the code: travel-vlog/scripts/vlog.py sets its engine folder to <repository r · - What leaves this machine at use time, disclosed here before it ever happens — using the skill is a separate
- utilise des clés API ou des jetons — Prerequisites: none for the install itself: no account, no API key, no paid service, and nothing is run or dow · - What leaves this machine at use time, disclosed here before it ever happens — using the skill is a separate · Prérequis : aucun pour l'installation elle-même : aucun compte, aucune clé API, aucun service payant, et rien
Avant de commencer : lis ce prompt d'installation au complet, dis-moi en quelques lignes ce que ce skill fait et ce que son installation implique, et attends mon feu vert avant de faire quoi que ce soit d'autre. Prérequis : aucun pour l'installation elle-même : aucun compte, aucune clé API, aucun service payant, et rien n'est exécuté ni téléchargé au-delà des fichiers du skill épinglés depuis GitHub. Pour utiliser le skill ensuite, lis ceci d'abord — les exigences à l'usage ne sont PAS configurées par cette installation : (1) les outils uv et ffmpeg doivent déjà être sur la machine (les lanceurs du skill appellent « uv run », qui à l'usage télécharge des paquets Python depuis PyPI — certifi, pillow et pillow-heif pour l'assistant vlog, plus playwright pour le moteur de rendu — et le navigateur Chromium sans tête de Playwright doit avoir été installé une fois, p. ex. « uv run --with playwright playwright install chromium », un gros téléchargement) ; (2) une clé API gratuite Amap (AutoNavi) de type « Web Service », à moi, est requise pour la planification et la compilation — le code la lit dans la variable d'environnement AMAP_KEY ou dans le fichier ~/.config/map-motion/amap_key — le palier gratuit d'Amap est limité en débit et mis en cache localement, et sans clé la planification/compilation s'arrête sur une erreur ; (3) une clé API d'image LabNana optionnelle et payante (LABNANA_API_KEY, facturée en crédits LabNana, environ 4 crédits par génération d'avatar selon SKILL.md) n'est requise QUE pour les routes d'avatar cartoon générées par IA (--photo et --describe) ; l'avatar intégré (--builtin) n'exige aucune clé, aucun service et n'envoie rien, et mes propres images cartoon en PNG peuvent aussi servir à la place ; (4) je fournis moi-même les photos de voyage, en originaux — les photos collées, capturées d'écran ou transmises par une app de clavardage n'ont pas de GPS EXIF et ne peuvent pas être placées automatiquement. Installe-moi « travel-vlog ». À partir d'un ensemble de mes photos de voyage (chacune avec GPS et heure de prise de vue en EXIF) et d'une photo de moi, il trie les photos par heure, fusionne celles prises à moins de 120 m en étapes (au plus 2 photos par étape), obtient pour chaque étape le nom de lieu le plus proche par géocodage inverse via Amap, choisit des routes à pied sous environ 12 km de distance directe totale (en voiture sinon), génère un avatar cartoon « chibi » de moi (poses marche et photo, détourés en autocollants à bord blanc), et pilote le moteur map-motion (plans globe + trip + wall) pour rendre un MP4 vertical de 30 à 90 secondes au style carnet de voyage (plus un GIF) : l'avatar avance en sautillant le long de la vraie route Amap à pied/en voiture pendant qu'un compteur de kilomètres défile, s'arrête à chaque lieu photo avec un « clic » d'obturateur, la photo surgit avec le numéro d'étape et la distance parcourue, et la vidéo se termine sur un mur de photos avec le nombre d'étapes et la distance totale, avec une musique de fond originale synthétisée localement et des bruitages de pas, d'obturateur, de « pop » et de « ding » placés sur les temps. Le seul exemple de spec du dossier (examples/westlake_walk.json) est une marche de 5 étapes au lac de l'Ouest d'environ 8,8 km ; ses photos et son avatar ne sont pas dans le dépôt. Dépôt : https://github.com/SpaceZephyr/map-motion (le skill est le dossier travel-vlog/, mais il n'est PAS autonome : son assistant résout le moteur map-motion à la racine du dépôt — scripts/ plus le runtime 2D et les données de cartes/polices sous assets/ — donc le périmètre d'installation ci-dessous est le dossier travel-vlog/ plus exactement les fichiers de la racine que son code charge, 22 fichiers au total ; le skill racine, les skills frères map-3d/ et photo-spot/, les modules du moteur 3D/soleil, references/, docs/ et les exemples de la racine sont des fiches séparées ou de la documentation et ne font PAS partie de cette installation) Version épinglée : installe le code au commit 65ab781832cace6e0f28d4c00452410a99f3a02c exactement. Ne substitue pas une version plus récente. Si ce commit est inaccessible, arrête-toi et dis-le-moi. 1. Clone https://github.com/SpaceZephyr/map-motion dans un dossier temporaire, place-toi au commit 65ab781832cace6e0f28d4c00452410a99f3a02c, et bâtis l'arbre d'installation à partir de ce checkout en utilisant SEULEMENT les 22 fichiers listés ci-dessous, en gardant leurs chemins relatifs au dépôt (travel-vlog/…, scripts/…, assets/…). Compare ensuite chacun de ces fichiers aux empreintes enregistrées pour cette fiche le 2026-10-19 : [FINGERPRINTS] - travel-vlog/SKILL.md: SHA-256 482447f45220a3dc0030a59fede012f545fc41a65a5e2d32b3d1d5b6d6fc20ff - travel-vlog/examples/README.md: SHA-256 207b606a2cc41dfabce253ac038418d4285cd25c045f546000af4e14d2065bd4 - travel-vlog/examples/westlake_walk.json: SHA-256 88f74cfd8606d3ffcbf9f853bdba0a2dacb761df1aa5243599fd3b4068c61146 - travel-vlog/scripts/vlog.py: SHA-256 8fdb8cec4a3a0560ee4430061abc5c5fd4c5d2f63379f79a8d1f76a85c7948c5 - travel-vlog/scripts/vlog.sh: SHA-256 840e9b7a9569608d8cbecfbf8401bc98940bd8edea8cdf9d2ac7b115a9c8d739 - scripts/amap.py: SHA-256 7db7efbaf5b63362ca8078d88da9f0606e5c38a92410c3643e0f19072486b92d - scripts/audio.py: SHA-256 4785e478cea1ff36158f3db471214706465fa7cd8946e516c5f4faad6d52770e - scripts/compile.py: SHA-256 32420d87aa526d5bf86ea526dfb61e63d4ba2b31666c5828bbb4d5bbd3a5879e - scripts/elev.py: SHA-256 ec41a716692742c58a80596b1df804db02d8f7017108ad2d0797b2b1b5b588a7 - scripts/osm.py: SHA-256 3e30d7b0d8288f5a62de626f428899cddf9c7ca5b3e94623ebf7892a307421e2 - scripts/qa.py: SHA-256 9b87b89c690d22aeecf0441685f2d7489a2379cf9a8c9514045e2438eeb19baa - scripts/render.py: SHA-256 fd5eb323b0207c9b9920aa6dc24982113a04020b582fe67266f8359a57db5ecd - scripts/status.py: SHA-256 eca7060ddc17aef9262d5b0c7536449de7f6856afe4184411be43351f3c5f0d5 - scripts/runtime/index.html: SHA-256 898c81ea79e2828b5fb6d37c80c0ca1fe9048640ab78523d4670a0749cedd34d - scripts/runtime/mm.js: SHA-256 f943260dea924193a67eb6df587b04053a16f844ed0d930fab35def86bbf31f3 - scripts/runtime/qa.js: SHA-256 8c761421f289a378b8341fac965a1f516567899eda9cb5786ac1fc8f792e801a - assets/china.json: SHA-256 df6c10e3d0be10052355a958812a5decd60a544b858b2934b170ca0fdebf2985 - assets/land.json: SHA-256 e8546a66c5ad7545d60097580fd8abd154c6257ae4b5022ff2dfadc62fc4ce46 - assets/fonts/Anton-400.woff: SHA-256 791375bdbed00de4a3aad4811291220ead0e1405d6f8b5bdbf109798c8359ac5 - assets/fonts/LXGWWenKai-500.woff: SHA-256 734bd187392579417ac83effe31d37b9de43c7b290bcb400800456511ed79e8f - assets/fonts/NotoSansSC-700.woff: SHA-256 dd0d39a9780eb995c499af0c20cca93b1dfdda865da70871a20890b3e406b968 - assets/fonts/NotoSansSC-900.woff: SHA-256 d2d8a42438b18b65b6577434df4e41bb08c6b5051281757849af00ab743bb58f Si un fichier ne correspond pas, il a changé depuis la préparation de la fiche : ne l'installe pas encore, dis-moi ce que tu as trouvé et laisse-moi décider. 2. Lis travel-vlog/SKILL.md au complet, lis travel-vlog/scripts/vlog.py et travel-vlog/scripts/vlog.sh, et lis les fichiers du moteur qu'ils chargent (scripts/compile.py, scripts/render.py, scripts/amap.py, scripts/osm.py, scripts/elev.py, scripts/audio.py, scripts/qa.py, scripts/status.py et le runtime 2D scripts/runtime/index.html, scripts/runtime/mm.js, scripts/runtime/qa.js), et dis-moi en mots simples : ce que le skill fait quand on l'utilise, à quels services il se connecte, s'il lit ou envoie des informations personnelles ou des clés, et tout ce qui semble inhabituel. Arrête-toi sur tout signal d'alerte et dis-le-moi avant d'aller plus loin. Confirme ces points à partir des fichiers : - Disposition des dépendances, vérifiée dans le code : travel-vlog/scripts/vlog.py règle son dossier moteur à <racine du dépôt>/scripts (avec repli vers ~/.claude/skills/map-motion/scripts seulement si compile.py n'y est pas trouvé), importe le module amap du moteur pour le géocodage inverse, et exécute comme sous-processus, via « uv run --with certifi --with pillow --with playwright », le compile.py du moteur (pour check et make), son render.py (pour les images fixes et le rendu final) et son status.py (pour la sous-commande status). compile.py importe amap, osm et elev au démarrage (les trois fichiers doivent donc être présents même si la spec vlog par défaut — plans globe, trip et wall seulement — n'exerce que les routes Amap et ni les consultations OSM ni celles d'altitude), et render.py importe qa et audio et sert scripts/runtime/index.html, qui charge qa.js et mm.js ; mm.js charge sans condition assets/land.json, assets/china.json et les quatre fichiers assets/fonts/*.woff au démarrage. C'est exactement le périmètre de 22 fichiers ci-dessus. Ne sont PAS inclus, parce que le flot vlog par défaut ne les charge jamais : le SKILL.md/README.md de la racine et references/, les skills frères map-3d/ et photo-spot/, les exemples de la racine et docs/media/, le lanceur racine scripts/make.sh, et les modules du moteur 3D/soleil (scripts/terrain3d.py, scripts/sunlight.py, scripts/sun.py, scripts/dem.py, scripts/geo.py, scripts/runtime/terrain.html, scripts/runtime/t3d.js, scripts/runtime/hud.js) — les modes terrain 3D et soleil du moteur élargi ne fonctionneront donc pas depuis cette installation, et le téléchargement MapLibre depuis unpkg.com codé dans render.py pour cette page 3D ne peut pas arriver puisque terrain.html n'est pas installé. - Rien n'est envoyé nulle part pendant l'installation elle-même ; le seul téléchargement à l'installation est le dépôt depuis GitHub au commit épinglé. Aucun script n'est exécuté pendant l'installation, aucune clé n'est demandée, et il n'y a aucune télémétrie dans le périmètre. - Ce qui quitte cette machine à l'usage, divulgué ici avant que ça arrive — utiliser le skill est une étape séparée qui ne commence que quand je demande une vidéo vlog, et mon travail de projet se fait sous ~/Documents/map-motion/<projet>/ : (a) Planification (« vlog.sh plan ») : l'assistant lit mes photos originales localement (coordonnées GPS EXIF et heure de prise de vue, HEIC inclus via pillow-heif) et n'envoie les photos NULLE part, mais pour chaque étape il envoie les coordonnées de cette étape (converties de WGS-84 à GCJ-02) au point de terminaison de géocodage inverse d'Amap GET https://restapi.amap.com/v3/geocode/regeo (rayon 300, POI et zones) avec ma clé AMAP_KEY dans la chaîne de requête, pour obtenir le nom de lieu le plus proche ; les réponses d'Amap sont mises en cache sous ~/.cache/map-motion/api/. Les photos sont converties localement en photos/NN_N.jpg (grand côté 1600). (b) Avatar (« vlog.sh avatar --photo » ou « --describe ») : avant tout téléversement d'un portrait, le skill doit me prévenir et obtenir mon consentement, exactement comme son propre SKILL.md l'exige — l'assistant envoie un POST à https://api.labnana.com/openapi/v1/images/generation (ou l'URL de remplacement LABNANA_API_URL) avec ma clé LABNANA_API_KEY en en-tête Bearer, un corps JSON portant le prompt de génération (pour --describe, la description textuelle que j'ai donnée ; pour --photo, un texte demandant de conserver ma coiffure, mon visage, mes lunettes/accessoires et les couleurs de mes vêtements) et ma photo de portrait redimensionnée à 1024 px au maximum, compressée en JPEG et encodée en base64 comme image de référence ; le second appel (pose photo) envoie aussi la première image de marche générée comme référence. La requête nomme un fournisseur par modèle (le modèle par défaut gpt-image-2 correspond à « openai » ; les variantes gemini-3-pro-image / gemini-3.1-flash-image correspondent à « google »), le tout via LabNana. La clé elle-même est lue dans la variable d'environnement LABNANA_API_KEY, ou dans un fichier .labnana.env du dossier travel-vlog, ou — divulgué — dans le fichier d'un autre skill installé ~/.claude/skills/person-image-studio/.labnana.env s'il existe ; elle n'est lue nulle part ailleurs et n'est jamais affichée. « --builtin » et l'apport de mes propres walk.png/snap.png n'envoient rien et n'exigent aucune clé. Si LabNana répond 26004 (crédits insuffisants), arrête-toi et dis-le-moi au lieu de réessayer aveuglément. (c) Compilation (« check » / « make », via le compile.py du moteur) : pour chaque étape, nom de lieu et tronçon de ma spec, le moteur envoie les coordonnées et tout nom de lieu que j'ai écrit à la main à Amap à https://restapi.amap.com — géocodage (/v3/geocode/geo, avec recherche POI de repli /v3/place/text pour les résultats de niveau POI), géocodage inverse comme en (a), et planification de routes (/v3/direction/driving, /v3/direction/walking ou /v4/direction/bicycling, origine/destination et jusqu'à 16 points de passage) — toujours avec ma clé AMAP_KEY dans la chaîne de requête ; les réponses sont mises en cache sous ~/.cache/map-motion/api/. Appels conditionnels du moteur que la spec vlog générée par défaut (globe/trip/wall) ne déclenche PAS, divulgués parce que les fichiers du moteur sont installés : si je modifie une spec à la main pour ajouter un profil d'altitude ou une altitude de plan locate, des coordonnées d'itinéraire échantillonnées sont envoyées à OpenTopoData à https://api.opentopodata.org/v1/srtm30m ; si je modifie une spec à la main pour ajouter un contour de zone, une recherche de tracé GPX/GeoJSON par nom, ou un sentier de style 3D, un nom de lieu plus un cadre de coordonnées sont envoyés en POST aux miroirs OpenStreetMap Overpass (https://overpass-api.de/api/interpreter, https://maps.mail.ru/osm/tools/overpass/api/interpreter, https://overpass.kumi.systems/api/interpreter) avec l'agent utilisateur « map-motion/1.0 (video tool) ». (d) Rendu (via le render.py du moteur) : un serveur lié à 127.0.0.1 seulement sert le runtime, les données intégrées et exactement les fichiers photo/avatar nommés dans ma chronologie à un Chromium sans tête local — mes photos ne sont pas téléversées — mais les tuiles de carte sont récupérées via ce proxy local depuis les hôtes de tuiles AutoNavi (pour le style par défaut amap-journal : https://wprd0{s}.is.autonavi.com/appmaptile, style 7, avec un agent utilisateur Mozilla/5.0 et un Referer https://www.amap.com/, sans clé API ; les coordonnées des tuiles elles-mêmes révèlent la zone cartographiée) et mises en cache sous ~/.cache/map-motion/tiles/ ; si je choisis le style satellite, le proxy récupère aussi les tuiles satellite et d'étiquettes AutoNavi (webst0{s}.is.autonavi.com, styles 6 et 8), et si je choisis satellite-world, il récupère les tuiles Esri World Imagery depuis https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/. La musique et les bruitages sont synthétisés localement par scripts/audio.py (ou un fichier de musique que je fournis est utilisé localement) ; rien de l'audio ne quitte la machine. Le MP4/GIF fini contient évidemment mes photos et les noms de lieux — le publier est mon étape à moi, et SKILL.md avertit de ne pas verser mes photos ni mon avatar dans un dépôt public. - Limites d'usage des cartes, tirées de la documentation amont et divulguées : récupérer directement les tuiles Amap est un usage non officiel — acceptable pour des vidéos personnelles/d'apprentissage en gardant l'attribution « © Amap » dans le coin ; une diffusion commerciale exige l'autorisation d'Amap (ou un style vectoriel), les images Esri exigent de même l'autorisation d'Esri pour un usage commercial, et les données de frontières chinoises intégrées (y compris Taïwan, les îles de la mer de Chine méridionale et la ligne en neuf traits) ne doivent pas être modifiées. - N'installe pas uv, ffmpeg, un paquet Python ni le navigateur Chromium de Playwright pendant cette installation, ne règle pas et ne demande pas AMAP_KEY ni LABNANA_API_KEY, n'exécute pas vlog.sh, vlog.py, compile.py ni render.py, et ne génère aucune vidéo : configurer les clés, les outils et le navigateur est ma décision, plus tard, quand je demande vraiment un vlog. 3. Quand je dis « yes, install », installe-le comme skill, en préservant la disposition du moteur que le code attend : crée un dossier nommé « map-motion » dans le répertoire des skills de l'agent et copies-y SEULEMENT les 22 fichiers empreintés, à leurs chemins relatifs au dépôt (travel-vlog/ avec son SKILL.md, ses examples/ et ses scripts/ ; scripts/ avec les huit fichiers Python et son sous-dossier runtime/ contenant index.html, mm.js et qa.js ; assets/ avec china.json, land.json et fonts/ contenant les quatre fichiers .woff), puis rends le skill lui-même repérable comme « travel-vlog » de la façon prescrite par le README amont — un lien symbolique ~/.claude/skills/travel-vlog pointant vers le dossier installé map-motion/travel-vlog (sur un système sans liens symboliques, une seconde copie du seul dossier travel-vlog/ ne suffit PAS à elle seule : son assistant se replie alors vers ~/.claude/skills/map-motion/scripts, donc le dossier map-motion ci-dessus doit exister exactement à cet endroit). Toute autre route ne convient que si chaque fichier installé correspond à son empreinte et que vlog.py peut trouver compile.py dans le dossier scripts/ frère de la disposition du dépôt. 4. Vérifie sans appels réseau : frontmatter valide (name: travel-vlog dans travel-vlog/SKILL.md), les 22 fichiers en place avec des empreintes concordantes, et la disposition du moteur intacte (le dossier scripts/ parent-du-parent de travel-vlog/scripts/vlog.py contient compile.py, render.py, status.py, amap.py, osm.py, elev.py, audio.py et qa.py). N'exécute pas vlog.sh, vlog.py, compile.py ni render.py pour vérifier. 5. Indique ce qui a été installé, où, et ce qu'il me reste à faire moi-même (par exemple : installer moi-même uv et ffmpeg et le navigateur Chromium de Playwright ; obtenir ma propre clé Amap Web Service gratuite et régler AMAP_KEY ou ~/.config/map-motion/amap_key avant la planification/compilation, en sachant que les coordonnées de mes étapes et mes noms de lieux vont à restapi.amap.com avec cette clé ; décider moi-même de la route d'avatar — intégré ou mes propres PNG (rien d'envoyé), une description textuelle ou mon portrait via LabNana (clé, crédits, et les envois divulgués au point 2, seulement avec mon consentement pour un portrait) ; fournir des photos originales avec GPS EXIF et vérifier ligne par ligne chaque nom de lieu issu du géocodage inverse ; utiliser le skill est une étape séparée qui ne commence que quand je le demande, et les envois à l'usage divulgués ci-dessus arrivent seulement à ce moment-là). GitHub est optionnel : si j'ai un compte GitHub ou la CLI gh, tu peux l'utiliser ; sinon l'accès public suffit. Ne jamais l'exiger sauf s'il figure dans les prérequis ci-dessus. Règles : ne touche à rien en dehors du dossier temporaire et de la cible d'installation. Si quelque chose semble anormal, arrête-toi et demande-moi.
Enregistré dans vos installs récentes. Retrouvez-le à tout moment sur /connect.
Questions
Comment installer une création ?
Chaque fiche produit contient un prompt d’installation à copier-coller. Collez-le dans votre Muse et il installe la création pour vous — sans configuration manuelle.
Où va mon argent ?
Directement au vendeur. Skill Harbor ne traite jamais les paiements : le paiement se fait sur la page du vendeur, généralement via Stripe.
Que signifie le ✓ à côté du nom d’un créateur ?
Il signifie que nous avons confirmé l’identité de la personne derrière la fiche. Il ne dit rien sur le code lui-même — vérifiez toujours une création avant de l’installer.