← Recherche

Photo Spot
Video 📌 Version épinglée : commit 65ab781
🔎 Analyse du prompt d’installation · 2026-10-19 : exécute des commandes · fait des appels réseau · écrit des fichiers · utilise des clés API ou des jetons
⚙ Prérequis: Avant de commencer…

Photo Spot

Transformer une photo en une courte vidéo verticale de 13 à 16 secondes qui révèle où elle a été prise : plongée d'un globe satellite jusqu'au point de prise de vue et au lieu photographié

L’essentiel
Quoi
Transformer une photo en une courte vidéo verticale de 13 à 16 secondes qui révèle où elle a été prise : plongée d'un globe satellite jusqu'au point de prise de vue et au lieu photographié
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.

Version :

⌁

Installation

Copiez le dossier d’installation ci-dessous, puis collez-le dans Muse📌 Version épinglée : commit 65ab781
Envie d'être encore plus prudent ?

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

Comment vérifier une création avant de l’installer →

🧭 Ce que ça touche
  • 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.
Analyse du prompt d’installation · 2026-10-19
🔒 Sécurité et provenance
📌 Version épinglée : commit 65ab781 · 2026-10-19
🔎 Analyse du prompt d’installation · 2026-10-19 : exécute des commandes · fait des appels réseau · écrit des fichiers · utilise des clés API ou des jetons
Ce que le scan a trouvé — extraits du prompt d’installation
  • exécute des commandes — Prerequisites: the install itself is only a file copy (no account, no key, no script run), but using the skill · - What leaves this machine at use time, disclosed here before it ever happens — using the skill is a separate
  • 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: the install itself is only a file copy (no account, no key, no script run), but using the skill · - What leaves this machine at use time, disclosed here before it ever happens — using the skill is a separate · Prérequis : l'installation elle-même n'est qu'une copie de fichiers (aucun compte, aucune clé, aucun script ex
  • utilise des clés API ou des jetons — Prerequisites: the install itself is only a file copy (no account, no key, no script run), but using the skill · Prérequis : l'installation elle-même n'est qu'une copie de fichiers (aucun compte, aucune clé, aucun script ex
Skill Harbor ne révise jamais le code des skills listés. Ce sont des faits datés sur le prompt d’installation et notre test d’installation, pas une certification de sécurité. Révisez un skill vous-même avant de l’installer. Comment nous vérifions

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 : l'installation elle-même n'est qu'une copie de fichiers (aucun compte, aucune clé, aucun script exécuté), mais utiliser le skill demande une configuration qui ne fait PAS partie de cette installation, alors lis-la avant de décider : (1) une clé API Amap (Gaode) « Web Service » gratuite, à moi — le flot documenté cherche des POI Amap et géocode des noms de lieux avec elle (spot.sh find, et les lieux donnés par nom au moment de la compilation) ; elle est lue dans la variable d'environnement AMAP_KEY ou dans ~/.config/map-motion/amap_key, jamais écrite dans un spec ni dans un dossier de projet. C'est moi qui obtiens la clé sur la plateforme ouverte d'Amap ; elle est gratuite dans la limite de son quota quotidien. (2) Les outils uv et ffmpeg sur ma machine. (3) À la première utilisation seulement, les scripts d'enrobage livrés roulent Python via `uv run --with ...`, ce qui télécharge des paquets Python depuis PyPI (certifi, pillow, pillow-heif pour l'assistant photo-spot ; certifi et pillow pour le compilateur ; playwright et certifi pour le moteur de rendu), et le moteur de rendu a besoin d'un Chromium sans tête téléchargé une fois via Playwright (`playwright install chromium`). Rien de tout ça n'est installé par cette installation. Je fournis aussi la photo moi-même : le skill lit ses EXIF (position GPS, direction, réglages de l'appareil) quand le fichier original les contient encore — une photo collée dans un clavardage, une capture d'écran ou une photo passée par une messagerie a habituellement perdu ses EXIF, et il faut alors deviner le lieu à partir de l'image et me le faire confirmer avant de rendre quoi que ce soit. Installe-moi « photo-spot ». Il transforme une photo en une courte vidéo verticale (portrait) de 13 à 16 secondes qui révèle où la photo a été prise : plongée d'un globe satellite jusqu'au point de prise de vue et au lieu photographié, une icône d'appareil photo et une épingle qui tombent en place, un éventail de visée qui balaie de l'appareil vers le sujet, un cadre de mise au point qui verrouille en vert, un clic d'obturateur (son d'obturateur synthétisé), puis la photo elle-même qui se redresse en perspective 3D depuis le point de prise de vue, sur fond de sa propre version floutée, avec légende manuscrite et coordonnées en dessous ; en option, un effet iPhone Live Photo (simulation à partir de la photo fixe, ou le vrai MOV — les 3 premières secondes avec son son d'origine). C'est un sous-skill du moteur de rendu map-motion, dans le même dépôt : photo-spot gère le flot (lire les EXIF → fixer les deux lieux → écrire un spec « snap » → vérifier des images fixes → rendre), et le moteur map-motion à la racine du dépôt fait la compilation et le rendu. C'est pour ça que l'installation ci-dessous copie des fichiers de deux endroits du même commit épinglé. Dépôt : https://github.com/SpaceZephyr/map-motion (le skill est le dossier photo-spot/, 7 fichiers, PLUS les fichiers du moteur map-motion dont il a strictement besoin à la racine du dépôt, 21 fichiers — 28 fichiers en tout, tous listés avec leurs empreintes au point 1) 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 seulement ces 28 fichiers de ce checkout, en gardant leur disposition relative au dépôt. Compare ensuite chaque fichier copié aux empreintes enregistrées pour cette fiche le 2026-10-19 : [FINGERPRINTS] - photo-spot/SKILL.md: SHA-256 559fe6829e555fc4600141f81c1d5ca783a7c960e0a3c8f3bd3604055d36ae02 - photo-spot/scripts/spot.py: SHA-256 0b5197983bdfc601e11e93ecc1473a0d8f40c6637ba5617594f83e758bff7cad - photo-spot/scripts/spot.sh: SHA-256 e937ccac2909a214dd90787c37c7589b8a9ad49a80c22d912b2530959d6fd4af - photo-spot/examples/README.md: SHA-256 f4564e9260f24bbd73b97677af51dcf489ed5429ca1d6136e668209f987bc2cc - photo-spot/examples/fuji_shinkansen.json: SHA-256 1b903cf7cde66bf1bf9c450c63d91372df91bb56711d7575a54125158f378b35 - photo-spot/examples/high_junk_peak_live.json: SHA-256 727153ead06d29d5fd4e3fdc594106939b45b16ea7e5490253a8a4765c40dbae - photo-spot/examples/yubeng_waterfall_live.json: SHA-256 e948ca5ae467077f8e6f3806b6248a09deae14632fa2185ec5378c86dc747a13 - SKILL.md: SHA-256 d3848172be1eca9b4cd8ba3e51a76bb5ff5a8e39b8d421a357e0b5e12f159790 - LICENSE: SHA-256 503807b77b7096091e3be3fdec62cfdc41f7de2a1b805a05e586edae7a7a657c - scripts/make.sh: SHA-256 9fc63a0c7933448d46b28b7352d233d88d251399205d6d52015f868cb21c49af - scripts/compile.py: SHA-256 32420d87aa526d5bf86ea526dfb61e63d4ba2b31666c5828bbb4d5bbd3a5879e - scripts/amap.py: SHA-256 7db7efbaf5b63362ca8078d88da9f0606e5c38a92410c3643e0f19072486b92d - scripts/osm.py: SHA-256 3e30d7b0d8288f5a62de626f428899cddf9c7ca5b3e94623ebf7892a307421e2 - scripts/elev.py: SHA-256 ec41a716692742c58a80596b1df804db02d8f7017108ad2d0797b2b1b5b588a7 - scripts/render.py: SHA-256 fd5eb323b0207c9b9920aa6dc24982113a04020b582fe67266f8359a57db5ecd - scripts/qa.py: SHA-256 9b87b89c690d22aeecf0441685f2d7489a2379cf9a8c9514045e2438eeb19baa - scripts/audio.py: SHA-256 4785e478cea1ff36158f3db471214706465fa7cd8946e516c5f4faad6d52770e - 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 - references/spec.md: SHA-256 14d38fb1e8185922b2f3ac5f581ac966b5255f9cc3fced69ed22fbcd91e3ab57 - references/amap.md: SHA-256 2c2e6b441b2fdd5361a10c9a58c44f5b6ecc39a880ba43a1d2a8bca841d0a85d 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 photo-spot/SKILL.md et le SKILL.md du moteur au complet, lis photo-spot/scripts/spot.py et spot.sh, et lis les scripts du moteur que photo-spot exécute vraiment (scripts/make.sh, scripts/compile.py, scripts/amap.py, scripts/render.py, scripts/qa.py, scripts/audio.py, scripts/runtime/mm.js et 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 : - Le périmètre d'installation compte 28 fichiers et rien d'autre dans le dépôt n'est requis par photo-spot : le dossier photo-spot/ est complet en lui-même (SKILL.md, son assistant spot.py/spot.sh, et trois specs d'exemple), et spot.py trouve le moteur de exactement deux façons — d'abord un dossier ~/.claude/skills/map-motion/scripts installé, ou, quand il roule dans un checkout du dépôt, le dossier scripts/ deux niveaux plus haut. Les fichiers du moteur copiés ici sont exactement ceux que le flot snap charge : make.sh roule compile.py (qui importe amap.py, osm.py et elev.py au démarrage, donc les trois doivent être présents même si le plan snap lui-même n'appelle que amap.py) puis render.py (qui importe qa.py et audio.py, et sert scripts/runtime/index.html avec mm.js et qa.js ; mm.js charge toujours assets/land.json, assets/china.json et les quatre polices .woff). references/spec.md et references/amap.md sont la documentation du moteur vers laquelle les deux SKILL.md pointent (format du spec, configuration de la clé Amap). NON copiés, et non requis pour photo-spot : les skills frères map-3d/ et travel-vlog/ (des fiches séparées), les modules du moteur 3D/soleil (scripts/geo.py, dem.py, sun.py, sunlight.py, terrain3d.py, scripts/runtime/t3d.js, terrain.html, hud.js), scripts/status.py (un afficheur de progression optionnel), assets/examples/ (des specs d'exemple pour d'autres types de plans), le README et docs/media/ (images de documentation). - 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 paquet ni navigateur 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 remets une photo et demande une vidéo : (a) Lire la photo est local seulement : spot.py « exif » ouvre ma photo avec Pillow (et pillow-heif pour le HEIC) sur cette machine et affiche ses EXIF — coordonnées GPS (WGS-84), direction de prise de vue, altitude, heure, modèle d'appareil, et ISO/ouverture/aperture/longueur focale. Rien de la photo n'est téléversé pour ça. La photo est copiée dans un dossier de projet local sous ~/Documents/map-motion/<projet>/, et ces coordonnées sont écrites dans le fichier spec local. (b) Recherches Amap (Gaode) : spot.py « find » envoie mon mot-clé de recherche et la ville, plus ma clé AMAP_KEY en paramètre de requête, à https://restapi.amap.com/v3/place/text (recherche de POI). À la compilation, scripts/amap.py envoie tout lieu donné par un NOM ou une adresse (pas par des coordonnées brutes [lng, lat] — les paires de coordonnées sont résolues localement, sans appel) à https://restapi.amap.com/v3/geocode/geo, avec repli vers /v3/place/text, encore avec ma clé dans la chaîne de requête ; les réponses sont mises en cache sous ~/.cache/map-motion/api/. Donc : les noms de lieux que je cherche et ma clé Amap vont à Amap ; les coordonnées brutes tapées dans le spec n'y vont pas. (c) Tuiles de carte au moment du rendu : render.py démarre un serveur sur 127.0.0.1 seulement et va chercher les tuiles à travers lui — pour le style « satellite » (Chine) depuis les hôtes de tuiles Amap webst0*.is.autonavi.com (satellite) et wprd0*.is.autonavi.com (surcouche des noms de routes), en n'envoyant que les numéros de tuile x/y/z plus un Referer https://www.amap.com/ ; pour le style « satellite-world » (hors Chine) depuis Esri, https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/... Les numéros de tuile cernent la zone appareil/sujet rendue, donc ces hôtes apprennent quelle zone la vidéo couvre ; les tuiles sont mises en cache sous ~/.cache/map-motion/tiles/. (d) Ma photo elle-même n'est jamais téléversée par ce code : render.py la sert seulement au Chromium sans tête local à travers ce serveur 127.0.0.1, le MOV Live Photo (si j'en fournis un) est découpé en images et son audio d'origine est extrait localement par ffmpeg, et la vidéo finie est un fichier local. Mais la vidéo elle-même montre la photo plus la latitude/longitude du point de prise de vue sous la carte — si je publie la vidéo, je publie où la photo a été prise ; et selon SKILL.md, ne mets jamais ma photo dans un dépôt public, et avertis-moi si la photo contient des personnes reconnaissables. (e) Présents dans le moteur copié mais NON appelés par le flot snap de photo-spot : scripts/elev.py (enverrait des coordonnées à OpenTopoData, https://api.opentopodata.org) et scripts/osm.py (enverrait des requêtes de zone aux miroirs Overpass d'OpenStreetMap) sont seulement importés au démarrage de compile.py ; render.py contient aussi, pour le mode 3D que ce skill n'utilise jamais, un téléchargement unique de maplibre-gl.js depuis unpkg.com et des tuiles DEM depuis s3.amazonaws.com. Si j'utilise plus tard d'autres types de plans map-motion, ces envois peuvent arriver — ils ne font pas partie du flot de ce skill. (f) Téléchargements de première utilisation : les enrobages spot.sh et make.sh roulent Python via `uv run --with ...`, donc à la première utilisation uv télécharge certifi, pillow, pillow-heif / pillow / playwright depuis PyPI, et le Chromium de Playwright est téléchargé une fois — des téléchargements de paquets seulement, aucune donnée d'utilisateur. - Si ma photo n'a pas de GPS EXIF, SKILL.md interdit de deviner en silence : le lieu est estimé à partir de l'image, tu dois me montrer les meilleurs candidats et me les faire confirmer avant le rendu, et la livraison doit dire clairement quelles coordonnées viennent des EXIF, d'un POI Amap, de sources publiques ou d'une estimation (un point de prise de vue estimé peut être à des kilomètres), et quelles valeurs EXIF montrées dans le viseur sont des valeurs d'illustration. Les résultats POI d'Amap peuvent eux-mêmes être à des kilomètres pour les grands sommets — SKILL.md dit de préférer les coordonnées de sommet publiées dans ce cas. - Ne règle pas et ne demande pas AMAP_KEY pendant cette installation, n'exécute pas spot.py, make.sh, compile.py, render.py ni aucun autre script, ne roule ni uv ni playwright, et ne rends aucune vidéo : configurer la clé et les téléchargements de première utilisation est ma décision, plus tard, quand je demande vraiment une vidéo photo-spot. 3. Quand je dis « yes, install », installe-le comme des skills, en gardant la disposition du dépôt : copie les 21 fichiers du moteur dans un dossier nommé « map-motion » dans le répertoire des skills de l'agent (SKILL.md et LICENSE à sa racine, scripts/, assets/ et references/ en dessous, y compris les 7 fichiers du dossier photo-spot/ à l'intérieur, à map-motion/photo-spot/), et rends « photo-spot » disponible comme son propre skill dans un dossier nommé « photo-spot » à côté — la route de l'amont est un lien symbolique ~/.claude/skills/photo-spot pointant vers le dossier photo-spot à l'intérieur de map-motion ; une copie simple de ces mêmes 7 fichiers convient tout autant, tant que chaque fichier installé correspond à son empreinte. Toute autre route ne convient que si chaque fichier installé correspond à son empreinte. 4. Vérifie sans appels réseau : les deux frontmatters valides (name: map-motion dans le SKILL.md du moteur, name: photo-spot dans photo-spot/SKILL.md), les 28 fichiers en place avec des empreintes concordantes (les fichiers photo-spot comptés une fois, qu'on les atteigne par le dossier map-motion ou par le dossier/lien photo-spot). N'exécute aucun script pour vérifier. 5. Indique ce qui a été installé, où, et ce qu'il me reste à faire moi-même (par exemple : obtenir ma propre clé gratuite Amap « Web Service » et régler AMAP_KEY ou ~/.config/map-motion/amap_key moi-même ; m'assurer qu'uv et ffmpeg sont installés ; accepter qu'à la première utilisation réelle partent les téléchargements de paquets Python et du Chromium Playwright décrits au point 2 ; remettre le fichier photo d'origine — exporté sans modification, pour que son GPS EXIF survive — plutôt qu'un collage de clavardage ou une capture d'écran ; confirmer avec toi les lieux de l'appareil et du sujet avant tout rendu si la photo n'a pas de GPS ; 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 des cibles d'installation. Si quelque chose semble anormal, arrête-toi et demande-moi.

?

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.