Map Motion
Transformer une liste de plans JSON en vidéo d'animation cartographique (MP4 vertical/horizontal + GIF) : AMap (Gaode) résout les noms de lieux et fournit les vraies routes voiture/marche/vélo et les
- Quoi
- Transformer une liste de plans JSON en vidéo d'animation cartographique (MP4 vertical/horizontal + GIF) : AMap (Gaode) résout les noms de lieux et fournit les vraies routes voiture/marche/vélo et les
- 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 une liste de plans JSON en vidéo d'animation cartographique (MP4 vertical/horizontal + GIF) : AMap (Gaode) résout les noms de lieux et fournit les vraies routes voiture/marche/vélo et les limites administratives, OpenStreetMap fournit les contours de parcs/sites, l'altitude SRTM vient d'OpenTopoData/AWS, et Chromium sans tête + ffmpeg rendent image par image. Quatorze types de plans (plongée du globe, localisation « je suis ici » avec carte de coordonnées, épingles, routes avec profil d'altitude, arcs de vol, districts en surbrillance, vols en radiation, voyages multi-arrêts avec photos, mur de photos, révélation snap du point de prise de vue, devine-le-lieu, et plus), un mode terrain 3D et un mode soleil, en quatorze styles des tuiles AMap/satellite aux vectoriels journal, néon et plan technique. 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 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
- 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 else to insta · Prérequis : aucun pour l'installation elle-même : aucun compte, aucune clé API, aucun service payant, et rien
- utilise des clés API ou des jetons — Prerequisites: none for the install itself: no account, no API key, no paid service, and nothing else to insta · 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 d'autre à installer d'abord. Pour utiliser le skill ensuite, lis ceci d'abord — l'usage exige des choses que cette installation ne met PAS en place : (1) ma propre clé API gratuite des services Web de AMap (Gaode), sans laquelle la compilation échoue carrément (voir les envois au point 2 : la clé n'est envoyée qu'à restapi.amap.com, comme clé propre à ce service) ; je la fournirai plus tard moi-même, comme variable d'environnement AMAP_KEY ou dans ~/.config/map-motion/amap_key — jamais dans un spec ni un dossier de projet ; l'inscription AMap est gratuite avec un quota quotidien, ce n'est pas un plan payant. (2) uv et ffmpeg sur ma machine. (3) À la première utilisation seulement, des téléchargements qui arrivent à ce moment-là, pas maintenant : uv va chercher les paquets Python nommés dans scripts/make.sh (certifi et Pillow pour la compilation, Playwright et certifi pour le rendu), et Playwright télécharge son navigateur Chromium (uv run --with playwright playwright install chromium) — SKILL.md présente cette étape comme une étape de première utilisation. Le skill transforme un spec JSON « liste de plans » — noms de lieux, routes, dates et chemins de photos locales que j'écris ou confirme — en vidéos d'animation cartographique MP4/GIF ; ce qui quitte cette machine à l'usage (noms de lieux et coordonnées vers AMap, OpenStreetMap/Overpass, OpenTopoData et les serveurs de tuiles) est divulgué au complet au point 2, avant que ça arrive. Installe-moi « map-motion ». Il fabrique des vidéos d'animation cartographique pour les vidéos de voyage et d'explication à partir d'une liste de plans JSON : compilation (AMap résout les noms de lieux, va chercher les vraies routes en voiture/à pied/à vélo et les limites administratives, OpenStreetMap fournit les contours de parcs/sites, OpenTopoData/AWS donnent l'altitude) puis rendu image par image (canvas Chromium sans tête + ffmpeg) en MP4 et GIF verticaux/horizontaux. Quatorze types de plans : plongée du globe vers un lieu, localisation Vlog « je suis ici » avec carte de coordonnées, épingles, tracé de route (voiture/marche/vélo/GPX, le véhicule suit la ligne, compteur kilométrique, profil d'altitude), arcs de vol, surbrillance de districts, vols en radiation un-vers-plusieurs, voyages multi-arrêts (routes + tampons + photos + retour ; un champ avatar fait passer un voyage en mode vlog à personnage de dessin animé, avec des images d'avatar que je fournis), mur de photos final, vue d'ensemble, cartes de titre, révélation de point de prise de vue « snap », devine-le-lieu, plus un mode terrain 3D (mode « 3d » : vrai terrain, texture satellite, lecture en suivant la trace) et un mode soleil — tous implantés dans les propres scripts de ce skill racine (scripts/terrain3d.py, scripts/sunlight.py), pas dans les dossiers frères. Quatorze styles (tuiles AMap standard/sombre/gris/sépia/journal, satellite AMap, satellite mondial Esri, et vectoriels sombre/clair/journal/vintage/néon/encre/plan technique). Dépôt : https://github.com/SpaceZephyr/map-motion (le skill est la RACINE du dépôt au commit épinglé : SKILL.md plus scripts/, references/, assets/ et les fichiers racine — 47 fichiers listés au point 1. Les skills frères map-3d/, photo-spot/ et travel-vlog/ et le dossier d'illustrations docs/ ne font PAS partie de cette installation — voir le point 2.) 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 copie UNIQUEMENT le périmètre de 47 fichiers listé ci-dessous depuis ce checkout (tout sauf map-3d/, photo-spot/, travel-vlog/ et docs/). Compare ensuite chaque fichier copié aux empreintes enregistrées pour cette fiche le 2026-10-19 : [FINGERPRINTS] - .gitignore: SHA-256 7b5e3485bca1a2f1aee193d16f8b2fb5860755c9239e3485edc05861b2563947 - LICENSE: SHA-256 503807b77b7096091e3be3fdec62cfdc41f7de2a1b805a05e586edae7a7a657c - README.md: SHA-256 d7fc885cb030037b7a3e8aa8e901cd8468c619f69564c589a8e1b00adf417634 - SKILL.md: SHA-256 d3848172be1eca9b4cd8ba3e51a76bb5ff5a8e39b8d421a357e0b5e12f159790 - assets/china.json: SHA-256 df6c10e3d0be10052355a958812a5decd60a544b858b2934b170ca0fdebf2985 - assets/examples/cycling_trip.json: SHA-256 0a8a9d9d623a5fcdb29ac935e61763a274bb2624bf7aca9c481066411f51389a - assets/examples/drive_follow.json: SHA-256 d8841616d9a21550fccd22ad41a1039d4676989bccd1d38b1a042a7019637701 - assets/examples/flight.json: SHA-256 512638e5b0c301fcb1f507361f520bdcc569361e638408d22de3869e5fb7d518 - assets/examples/globe_dive.json: SHA-256 8e11c218b033790744c8cd4f09f8afa6e1963101ac6ebb7411d3e35971f5af9e - assets/examples/hike_elevation.json: SHA-256 b3b5e74502e5b303765882b121e9805bea5091db67d8af60664c9b7dd825352e - assets/examples/park_locate.json: SHA-256 497066f5bc7bde2541fd1002604372e8cae511ec0e269121e4c9ea6e90524233 - assets/examples/park_walk.json: SHA-256 4d16c5e317b6a42b7dbf5ffe4f58edc33f22173563cf47795403893ef52cf3f8 - assets/examples/radiate.json: SHA-256 1fa2b5bc128f598ebfadf4a2216dab8be35a37902a12c41990144a3deab81eb1 - assets/examples/region.json: SHA-256 53246ac098f88d1ee1da70cb037f801a2b55033160cb3ea548ae15836deb98b5 - assets/examples/road_trip.json: SHA-256 669fa694b0e24f1a56fb888c4a4c84813c5087b0af3b9509f74be3b1849dd49e - assets/examples/showcase.json: SHA-256 0ffc405e08220fe0e68e5a8b4fd5e22e5fc91feb1490a78cffb8703eae9fd242 - assets/examples/vlog_locate.json: SHA-256 1b9f3689354c5471e06a5b15db2563a80bf53f21e162c0177e5a2d754e283a4c - assets/examples/vlog_locate_night.json: SHA-256 6095ce35948007efb048f851affed3f6a012577751c0dae740e7fc26a2232444 - assets/fonts/Anton-400.woff: SHA-256 791375bdbed00de4a3aad4811291220ead0e1405d6f8b5bdbf109798c8359ac5 - assets/fonts/LICENSES.md: SHA-256 d0eae41ae5d5a1f8a55ee0e153f4f197f6090df826f871c232b4dc6fbd31e5b1 - assets/fonts/LXGWWenKai-500.woff: SHA-256 734bd187392579417ac83effe31d37b9de43c7b290bcb400800456511ed79e8f - assets/fonts/NotoSansSC-700.woff: SHA-256 dd0d39a9780eb995c499af0c20cca93b1dfdda865da70871a20890b3e406b968 - assets/fonts/NotoSansSC-900.woff: SHA-256 d2d8a42438b18b65b6577434df4e41bb08c6b5051281757849af00ab743bb58f - assets/fonts/OFL.txt: SHA-256 67c5d5206b96f8340b95fabd02ae60701e0b20ce2594d976216f1065e5aa3822 - assets/land.json: SHA-256 e8546a66c5ad7545d60097580fd8abd154c6257ae4b5022ff2dfadc62fc4ce46 - references/amap.md: SHA-256 2c2e6b441b2fdd5361a10c9a58c44f5b6ecc39a880ba43a1d2a8bca841d0a85d - references/spec.md: SHA-256 14d38fb1e8185922b2f3ac5f581ac966b5255f9cc3fced69ed22fbcd91e3ab57 - scripts/amap.py: SHA-256 7db7efbaf5b63362ca8078d88da9f0606e5c38a92410c3643e0f19072486b92d - scripts/audio.py: SHA-256 4785e478cea1ff36158f3db471214706465fa7cd8946e516c5f4faad6d52770e - scripts/compile.py: SHA-256 32420d87aa526d5bf86ea526dfb61e63d4ba2b31666c5828bbb4d5bbd3a5879e - scripts/dem.py: SHA-256 c193482183aa1e0bb54e8b7661d77e6dde0a6e56339c2e3c229439013d588a9c - scripts/elev.py: SHA-256 ec41a716692742c58a80596b1df804db02d8f7017108ad2d0797b2b1b5b588a7 - scripts/geo.py: SHA-256 9a7b1f555e7a54c0b5f15504a9aa213d4dc99b3f11c410404d6ab57cf30e7b63 - scripts/make.sh: SHA-256 9fc63a0c7933448d46b28b7352d233d88d251399205d6d52015f868cb21c49af - scripts/osm.py: SHA-256 3e30d7b0d8288f5a62de626f428899cddf9c7ca5b3e94623ebf7892a307421e2 - scripts/qa.py: SHA-256 9b87b89c690d22aeecf0441685f2d7489a2379cf9a8c9514045e2438eeb19baa - scripts/render.py: SHA-256 fd5eb323b0207c9b9920aa6dc24982113a04020b582fe67266f8359a57db5ecd - scripts/runtime/hud.js: SHA-256 143017794af92ca455a6caa8ec3c1811171ee80b99c0d875442ce10a9983f4db - scripts/runtime/index.html: SHA-256 898c81ea79e2828b5fb6d37c80c0ca1fe9048640ab78523d4670a0749cedd34d - scripts/runtime/mm.js: SHA-256 f943260dea924193a67eb6df587b04053a16f844ed0d930fab35def86bbf31f3 - scripts/runtime/qa.js: SHA-256 8c761421f289a378b8341fac965a1f516567899eda9cb5786ac1fc8f792e801a - scripts/runtime/t3d.js: SHA-256 a891d9343f8471407c1b39bd6d5fe2d2a796d0a81e479aa6c61663e97fb7a306 - scripts/runtime/terrain.html: SHA-256 61cc9712c9323e2ba22ea1d5bb7d9e19bf5bfe52b518a1edb717528c80e7954c - scripts/status.py: SHA-256 eca7060ddc17aef9262d5b0c7536449de7f6856afe4184411be43351f3c5f0d5 - scripts/sun.py: SHA-256 2c6ce15ccc443a6fa0935d31ca76fdca1cea4d2d82c6119598757f91269db2bc - scripts/sunlight.py: SHA-256 577c7613504d84a14c5813a7ace7534c81dc0dee8bb0c295fcb7a7f58819dadc - scripts/terrain3d.py: SHA-256 cd2741899a619a477c917e6107a04033157a3e92bf29b1662c94ff65c6602cc2 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 SKILL.md au complet, les deux fichiers de references/ (spec.md, amap.md) et chaque fichier de scripts/ (amap.py, audio.py, compile.py, dem.py, elev.py, geo.py, make.sh, osm.py, qa.py, render.py, status.py, sun.py, sunlight.py, terrain3d.py et scripts/runtime/hud.js, index.html, mm.js, qa.js, t3d.js, terrain.html), 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 : - Périmètre et dépendances croisées, exactement : le skill racine est autonome dans les 47 fichiers ci-dessus. Son code n'importe ni n'appelle jamais rien dans map-3d/, photo-spot/ ou travel-vlog/ : le compilateur terrain 3D est scripts/terrain3d.py, le compilateur soleil est scripts/sunlight.py, et les plans snap (révélation de point de prise de vue) et avatar/vlog de trip sont des fonctions de plans dans scripts/compile.py. La dépendance va dans l'autre sens — les trois skills frères réutilisent CE moteur (map-3d/scripts/m3d.py, photo-spot/scripts/spot.py et travel-vlog/scripts/vlog.py pointent tous vers les scripts/ de la racine) — donc ils ne seront pas installés par cette installation, et un détail documenté vit hors de ce périmètre : references/spec.md renvoie à map-3d/SKILL.md pour les champs complets du spec du mode « sun ». Les fichiers d'exécution de la racine ne chargent que des assets de la racine : scripts/runtime/mm.js et hud.js chargent assets/land.json, assets/china.json et les quatre polices de assets/fonts/ (Anton-400, LXGWWenKai-500, NotoSansSC-700, NotoSansSC-900) via le serveur de rendu local, et le flux de travail de SKILL.md copie un spec de départ depuis assets/examples/. docs/media/ (18 images, environ 37 Mo) n'illustre que le README et n'est lu par aucun code. - 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, aucun Chromium ni paquet n'est installé, 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, et la compilation/le rendu roulent à ce moment-là via scripts/make.sh (uv run --with certifi --with pillow pour scripts/compile.py, uv run --with playwright --with certifi pour scripts/render.py, donc uv peut télécharger ces paquets depuis PyPI à la première utilisation, et le Chromium de Playwright doit déjà avoir été fetched par l'étape de première utilisation des prérequis) : (a) services Web AMap, https://restapi.amap.com — scripts/amap.py envoie ma clé AMAP_KEY (comme paramètre de requête « key », à AMap seulement) avec ce que mon spec nomme : les noms de lieux/adresses vers /v3/geocode/geo (avec recherche par mots-clés de repli vers /v3/place/text), les coordonnées d'origine, de destination et d'étapes vers /v3/direction/driving, /v3/direction/walking ou /v4/direction/bicycling, et les noms de districts vers /v3/config/district. Autrement dit, les lieux, adresses et extrémités de routes de ma liste de plans vont à AMap (AutoNavi). Les réponses sont mises en cache sous ~/.cache/map-motion/api/. (b) Tuiles cartographiques, fetched par scripts/render.py via son proxy local et mises en cache sous ~/.cache/map-motion/tiles/ : tuiles AMap depuis wprd0{s}.is.autonavi.com et webst0{s}.is.autonavi.com (x/y/z de tuile et style seulement, avec un user-agent Mozilla/5.0 et un Referer https://www.amap.com/, aucune clé), imagerie mondiale Esri depuis server.arcgisonline.com pour le style satellite-world et toute l'imagerie satellite 3D (z/y/x de tuile seulement), et tuiles de terrain AWS depuis s3.amazonaws.com/elevation-tiles-prod/terrarium/ pour le terrain 3D et l'altitude (scripts/dem.py va chercher les mêmes tuiles directement ; coordonnées de tuiles seulement). (c) Overpass OpenStreetMap — scripts/osm.py POSTe une requête à l'un de https://overpass-api.de/api/interpreter, https://maps.mail.ru/osm/tools/overpass/api/interpreter ou https://overpass.kumi.systems/api/interpreter (essayés en rotation, cache sous ~/.cache/map-motion/osm/) : pour un plan « area », la requête porte le nom de lieu de mon spec et une boîte englobante autour de ses coordonnées résolues par AMap ; pour une trace 3D bâtie à partir de points de passage, elle porte la boîte englobante de ces points. (d) Altitude OpenTopoData — scripts/elev.py envoie des coordonnées (reconverties de GCJ-02 AMap en WGS-84, par lots de 100 comme paires lat,lng dans l'URL) à https://api.opentopodata.org/v1/srtm30m quand un plan demande l'altitude ou un profil d'altitude ; résultats en cache sous ~/.cache/map-motion/elev/. (e) 3D seulement : scripts/render.py télécharge MapLibre GL JS 5.24.0 depuis https://unpkg.com/[email protected]/dist/maplibre-gl.js au premier rendu 3D et le met en cache sous ~/.cache/map-motion/vendor — un téléchargement de bibliothèque seulement, aucune donnée d'utilisateur n'est envoyée à unpkg au-delà de la requête elle-même. - Ce qui reste local à l'usage : mes photos ne sont jamais téléversées par ce skill racine — scripts/render.py ne sert que les fichiers locaux précis de photo/avatar/Live Photo nommés dans la timeline, via son serveur 127.0.0.1, à la page Chromium sans tête locale qui dessine les images, et ffmpeg assemble le MP4/GIF localement ; audio.py synthétise la musique et les effets sonores localement. Ce skill racine ne lit pas lui-même l'EXIF des photos (ce lecteur vit dans le skill frère photo-spot, non installé ici) : si je mets des coordonnées GPS/EXIF ou GPX dans un spec marqué « wgs84 » : true, la compilation les convertit localement, et seules les requêtes de lieux/routes/coordonnées listées ci-dessus quittent la machine. L'usage des tuiles AMap est non officiel : les vidéos personnelles/d'apprentissage vont bien en gardant l'attribution AMap à l'écran, l'usage commercial exige une autorisation AMap ou un style vectoriel — même chose pour l'imagerie Esri. - Hors de ce périmètre, divulgué pour qu'il n'y ait aucune surprise plus tard : le skill frère travel-vlog (non installé ici) peut générer un avatar de dessin animé à partir de ma photo via l'API d'images tierce LabNana, ce qui enverrait cette photo à LabNana sous ma propre clé LabNana — c'est le comportement du frère, décrit dans le README de ce dépôt ; rien dans ce skill racine n'appelle LabNana, et installer cette fiche ne l'active pas. - N'exécute pas make.sh, compile.py, render.py ni aucun autre script pendant cette installation, n'installe ni Chromium ni aucun paquet, ne règle pas et ne demande pas AMAP_KEY, et ne fabrique aucune vidéo : configurer la clé AMap et les téléchargements de première utilisation est ma décision, plus tard, quand je demande vraiment une vidéo. 3. Quand je dis « yes, install », installe-le comme skill : copie le périmètre de 47 fichiers dans le répertoire des skills de l'agent, dans un dossier nommé « map-motion », en gardant sa structure (SKILL.md à sa racine, scripts/, references/ et assets/ comme dans le checkout, et aucun dossier map-3d/, photo-spot/, travel-vlog/ ni docs/ dedans). Un clone manuel suivi de la copie de ce périmètre dans ~/.claude/skills/ est la route décrite ici ; toute autre route ne convient que si chaque fichier installé correspond à son empreinte. 4. Vérifie sans appels réseau : frontmatter valide (name: map-motion), les 47 fichiers en place avec des empreintes concordantes, et aucun dossier frère ni docs installé. N'exécute aucun script de scripts/ pour vérifier. 5. Indique ce qui a été installé, où, et ce qu'il me reste à faire moi-même (par exemple : obtenir une clé gratuite des services Web AMap et la fournir comme AMAP_KEY ou ~/.config/map-motion/amap_key avant la première utilisation, en sachant que les lieux, adresses et coordonnées de mes specs vont à AMap et que les autres envois à l'usage divulgués ci-dessus arrivent seulement quand une vidéo est compilée/rendue ; m'assurer que uv et ffmpeg sont installés ; à la première utilisation, laisser uv aller chercher certifi/Pillow/Playwright et installer le Chromium de Playwright ; fournir moi-même le contenu de la liste de plans — lieux, routes, dates et chemins de photos locales ; utiliser le skill est une étape séparée qui ne commence que quand je le demande). 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.