{"product_id":"camlink","title":"CAMLINK","description":"\u003cstyle\u003e\n.camlink-pd p:empty { display: none !important; }\n.camlink-pd p:has(\u003e br:only-child) { display: none !important; }\n.camlink-pd h2 { margin: 1.6rem 0 0.8rem !important; line-height: 1.15 !important; }\n.camlink-pd h3 { margin: 2.4rem 0 0.9rem !important; line-height: 1.2 !important; }\n.camlink-pd p  { margin: 0 0 0.9rem !important; }\n.camlink-pd ul { margin: 0 0 1rem !important; }\n.camlink-pd li { margin: 0 0 0.4rem !important; }\n.camlink-pd details summary::-webkit-details-marker { display: none; }\n.camlink-pd details summary::marker { display: none; }\n.camlink-pd details summary::after { content: \"+\"; font-weight: 300 !important; font-size: 1.5em !important; margin-left: auto !important; }\n.camlink-pd details[open] summary::after { content: \"−\"; }\n.camlink-pd video, .camlink-pd .pd-img { width: 100% !important; display: block !important; border-radius: 8px !important; }\n.camlink-pd video { background: #000 !important; }\n.camlink-pd .spec-row { display: flex; align-items: center; padding: 16px; background: #f9f9f9; border-radius: 8px; margin-bottom: 8px; color: #111; }\n.camlink-pd .spec-row img { margin-right: 16px; flex: 0 0 40px; }\n.camlink-pd .spec-label { font-weight: 600; }\n.camlink-pd .spec-value { color: #666; font-size: 14px; }\n.camlink-pd .cl-check { margin: 1.5rem 0 !important; padding: 1.25rem !important; background: #f9f9f9 !important; color: #111 !important; border: 1px solid #e0e0e0 !important; border-radius: 8px !important; }\n.camlink-pd .cl-check label { display: block !important; font-weight: 600 !important; margin-bottom: 0.6rem !important; color: #111 !important; }\n.camlink-pd .cl-check select { width: 100% !important; padding: 12px 14px !important; font-size: 16px !important; font-family: inherit !important; color: #111 !important; background: #fff !important; border: 1px solid #ccc !important; border-radius: 6px !important; }\n.camlink-pd .cl-out { margin-top: 1rem !important; line-height: 1.7 !important; color: #111 !important; }\n.camlink-pd .cl-status { font-weight: 600 !important; display: block !important; margin-bottom: 0.35rem !important; }\n.camlink-pd .cl-osd { margin: 1.1rem 0 0 !important; padding: 16px 18px !important; background: #000 !important; color: #fff !important; border-radius: 8px !important; font-family: ui-monospace, SFMono-Regular, Consolas, Menlo, monospace !important; font-size: 15px !important; letter-spacing: 0.14em !important; line-height: 1.85 !important; text-shadow: 0 0 6px rgba(255,255,255,0.35) !important; }\n.camlink-pd .cl-osd span { display: block !important; white-space: pre !important; min-height: 1.85em !important; }\n.camlink-pd .cl-cap { margin: 10px 2px 0 !important; font-size: 15px !important; color: #555 !important; line-height: 1.6 !important; }\n.camlink-pd .cl-tok { margin: 1rem 0 0 !important; }\n.camlink-pd .cl-tok \u003e div { display: grid !important; grid-template-columns: 112px 1fr 62px !important; gap: 10px !important; align-items: baseline !important; padding: 7px 0 !important; border-top: 1px solid #ececec !important; font-size: 14px !important; line-height: 1.45 !important; }\n.camlink-pd .cl-tok .cl-name { font-weight: 600 !important; }\n.camlink-pd .cl-tok .cl-what { color: #444 !important; }\n.camlink-pd .cl-tok .cl-eg { font-size: 12.5px !important; color: #888 !important; text-align: right !important; }\n.camlink-pd .cl-tok .cl-off { opacity: 0.4 !important; }\n.camlink-pd .cl-tok .cl-note { display: block !important; padding-top: 12px !important; color: #444 !important; font-size: 14px !important; line-height: 1.6 !important; }\n.camlink-pd .guide-box { display: flex !important; align-items: center !important; gap: 14px !important; margin: 2.5rem 0 1rem 0 !important; padding: 1.25rem 1.5rem !important; background: #f9f9f9 !important; border: 1px solid #e0e0e0 !important; border-radius: 8px !important; text-decoration: none !important; color: #111 !important; }\n.camlink-pd .guide-box:link, .camlink-pd .guide-box:visited, .camlink-pd .guide-box:hover, .camlink-pd .guide-box:focus { color: #111 !important; text-decoration: none !important; }\n.camlink-pd .guide-box .arrow { margin-left: auto !important; flex: 0 0 auto !important; color: #666 !important; font-size: 1.3em !important; }\n.camlink-pd .dl-box { margin: 0 0 0.75rem 0 !important; background: #f9f9f9 !important; color: #111 !important; border-radius: 8px !important; border: 1px solid #e0e0e0 !important; }\n.camlink-pd .dl-box \u003e summary { padding: 1.25rem 1.5rem !important; cursor: pointer !important; display: flex !important; align-items: center !important; gap: 14px !important; font-size: 1em !important; list-style: none !important; }\n.camlink-pd .dl-title { display: block !important; font-weight: 600 !important; }\n.camlink-pd .dl-sub { display: block !important; color: #666 !important; font-size: 14px !important; line-height: 1.4 !important; font-weight: 400 !important; }\n.camlink-pd .fw-rel { display: flex !important; align-items: baseline !important; gap: 12px !important; padding: 1.1rem 0 0.1rem !important; }\n.camlink-pd .fw-rel + .fw-rel { border-top: 1px solid #ececec !important; }\n.camlink-pd .fw-ver { font-weight: 600 !important; }\n.camlink-pd .fw-date { color: #888 !important; font-size: 14px !important; }\n.camlink-pd .fw-dl { margin-left: auto !important; flex: 0 0 auto !important; color: #999 !important; font-size: 15px !important; }\n.camlink-pd a.fw-dl { color: #111 !important; font-weight: 600 !important; text-decoration: underline !important; }\n\u003c\/style\u003e\n\u003cdiv class=\"camlink-pd\"\u003e\n\u003cdetails style=\"margin: 0 0 2rem 0 !important; background: #fff3cd !important; border-radius: 8px !important; color: #000 !important; border: 1px solid #ffc107 !important;\"\u003e\n\u003csummary style=\"padding: 1rem 1.5rem !important; cursor: pointer !important; font-weight: 600 !important; font-size: 1em !important; display: flex !important; justify-content: space-between !important; align-items: center !important; color: #664d03 !important; list-style: none !important;\"\u003eÇa tourne sur ton quad ? Vérifie d'abord\u003c\/summary\u003e\n\u003cdiv style=\"padding: 0 1.5rem 1.25rem 1.5rem !important; border-top: 1px solid #ffc107 !important;\"\u003e\n\u003cp style=\"margin-top: 1rem !important; color: #664d03 !important; line-height: 1.8 !important;\"\u003e\u003cstrong\u003eBetaflight 2025.12 ou plus récent.\u003c\/strong\u003e Les 4.x et 4.5 ne marchent pas, et il n'y a pas d'INAV, de KISS ni d'autre firmware.\u003c\/p\u003e\n\u003cp style=\"margin-top: 0.5rem !important; color: #664d03 !important; line-height: 1.8 !important;\"\u003e\u003cstrong\u003eUn UART libre et un fer à souder.\u003c\/strong\u003e 5 V et GND depuis la FC, TX et RX croisés, masse commune. Si tous les UART sont pris, CAMLINK n'a nulle part où aller.\u003c\/p\u003e\n\u003cp style=\"margin-top: 0.5rem !important; color: #664d03 !important; line-height: 1.8 !important;\"\u003e\u003cstrong\u003eTa caméra, par modèle.\u003c\/strong\u003e Le support se joue par modèle, pas par marque. Certains boîtiers d'une marque supportée devraient marcher sans avoir été vérifiés, et quelques-uns ne sont pas testés. Le sélecteur plus bas nomme la tienne, et une caméra absente du sélecteur n'est pas supportée.\u003c\/p\u003e\n\u003cp style=\"margin-top: 0.5rem !important; color: #664d03 !important; line-height: 1.8 !important;\"\u003e\u003cstrong\u003ePas étanche.\u003c\/strong\u003e Aucun indice IP.\u003c\/p\u003e\n\u003chr style=\"border: none !important; border-top: 1px solid #ffe69c !important; margin: 1rem 0 !important;\"\u003e\n\u003cp style=\"margin-top: 0.75rem !important; color: #664d03 !important; line-height: 1.8 !important;\"\u003e\u003cstrong\u003eUS :\u003c\/strong\u003e pas disponible pour le moment.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003ch2\u003eLa télémétrie de ton action cam dans ton OSD Betaflight\u003c\/h2\u003e\n\u003cdiv style=\"margin: 1.5rem 0 !important; overflow: hidden !important; border-radius: 8px !important;\"\u003e\n\u003cvideo muted loop playsinline preload=\"none\" poster=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/preview_images\/OSD_Preview_Still.jpg?v=1786361473\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/vp\/afc26286d5ae4e12b04a25c7abb259f8\/afc26286d5ae4e12b04a25c7abb259f8.HD-720p-1.6Mbps-91216557.mp4\"\u003e\u003c\/video\u003e\n\u003c\/div\u003e\n\u003cp style=\"color: #666 !important; font-size: 0.9rem !important; margin: 8px 0 1.5rem 0 !important;\"\u003eEn direct dans ton OSD Betaflight. GoPro, DJI, Sony, Blackmagic. Chaque caméra envoie plus ou moins de valeurs, le sélecteur plus bas montre la tienne.\u003c\/p\u003e\n\u003cp\u003eLa caméra sait qu'elle a arrêté d'enregistrer. Toi, tu l'apprends à l'atterrissage.\u003c\/p\u003e\n\u003cp\u003eCAMLINK est une carte qui se soude sur un UART libre de ta FC. En Bluetooth, elle met le statut de la caméra elle-même dans tes goggles : tu la vois enregistrer, tu vois le clip tourner, tu vois la batterie et la carte avant qu'elles soient vides.\u003c\/p\u003e\n\u003cp\u003eAnalogique, HDZero, Walksnail, DJI : le lien vidéo n'a aucune importance. Betaflight 2025.12 ou plus récent, si.\u003c\/p\u003e\n\u003ch3\u003eTu armes, la caméra enregistre. Tu désarmes, elle s'arrête.\u003c\/h3\u003e\n\u003cdiv style=\"margin: 1.5rem 0 !important; overflow: hidden !important; border-radius: 8px !important;\"\u003e\n\u003cvideo muted loop playsinline preload=\"none\" poster=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/preview_images\/Record_on_Arming_Still.jpg?v=1786361697\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/vp\/03bdb57087cc49589c81a4a2a32bdcb9\/03bdb57087cc49589c81a4a2a32bdcb9.HD-720p-2.1Mbps-91211008.mp4\"\u003e\u003c\/video\u003e\n\u003c\/div\u003e\n\u003cp style=\"color: #666 !important; font-size: 0.9rem !important; margin: 8px 0 1rem 0 !important;\"\u003eLe bouton record de ta caméra devient optionnel.\u003c\/p\u003e\n\u003cp\u003eRecord à l'armement, c'est le mode par défaut, pas le seul : l'enregistrement peut vivre sur un switch ou un bouton de ta radio. Combi superpose le bouton à l'automatisme, et c'est comme ça qu'on vole : l'armement lance le clip, un take raté se coupe et se relance au bouton.\u003c\/p\u003e\n\u003cp\u003eRègle l'expo une fois, et le rituel d'après-atterrissage, vérifier le clip, la batterie, la carte, s'est déjà joué dans tes goggles sur le chemin du retour. Le temps au spot part dans le vol.\u003c\/p\u003e\n\u003cp\u003eC'est un passager : CAMLINK reste en dehors des moteurs, des PID et de la RC, il n'a aucun moyen de commander le quad. S'il perd la caméra ou plante, ton vol continue comme si de rien n'était.\u003c\/p\u003e\n\u003ch3\u003eChange de preset GoPro en plein vol\u003c\/h3\u003e\n\u003cp\u003eJusqu'à trois presets GoPro sur un canal AUX. Tu cruises en 25 fps cinématique, tu passes à 200 pour le trick, tu reviens. Sans atterrir.\u003c\/p\u003e\n\u003cdiv style=\"margin: 1.5rem 0 !important; overflow: hidden !important; border-radius: 8px !important;\"\u003e\n\u003cvideo muted loop playsinline preload=\"none\" poster=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/preview_images\/Preset_Switch_Still.jpg?v=1786361426\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/vp\/e04e371662e741e4b3ad09e557ec7459\/e04e371662e741e4b3ad09e557ec7459.HD-720p-1.6Mbps-91216555.mp4\"\u003e\u003c\/video\u003e\n\u003c\/div\u003e\n\u003cp style=\"color: #666 !important; font-size: 0.9rem !important; margin: 8px 0 0 0 !important;\"\u003eMission 1 Pro en PAL : 4K 200 fps cinématique vers 1080p 800 fps burst, en plein passage.\u003c\/p\u003e\n\u003cp style=\"margin-top: 1rem !important;\"\u003eLes modes burst étaient inutilisables sur un quad jusqu'ici. La fenêtre de capture fait 7 à 15 secondes, le clip était donc fini avant même d'atteindre la ligne : filmer en 800 fps, c'était appuyer sur record avec le sujet déjà devant l'objectif. Maintenant tu sors en preset normal et tu bascules en burst au moment où le passage commence.\u003c\/p\u003e\n\u003cp\u003eLe changement de preset, c'est GoPro uniquement.\u003c\/p\u003e\n\u003ch3\u003eLes GoPro arrêtent d'oublier la date\u003c\/h3\u003e\n\u003cp\u003eUne GoPro naked perd son horloge à chaque retrait de batterie, et ton footage finit daté 2016-01-01. Active-le une fois dans le Setup, et sur les quads avec GPS, CAMLINK règle l'horloge de la caméra sur l'heure GPS de la FC après connexion. Pas de QR code, pas de téléphone, pas d'app Quik. GoPro uniquement.\u003c\/p\u003e\n\u003ch3\u003eAppairage en quelques secondes. Changement de caméra aussi vite.\u003c\/h3\u003e\n\u003cp\u003eCAMLINK tient une caméra à la fois, et la marque lui est égale. GoPro sur le quad long range ce week-end, DJI sur le même quad la semaine d'après, rien à recâbler, rien à reconfigurer dans Betaflight.\u003c\/p\u003e\n\u003cdiv style=\"margin: 1.5rem 0 !important; overflow: hidden !important; border-radius: 8px !important;\"\u003e\n\u003cvideo muted loop playsinline preload=\"none\" poster=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/preview_images\/Bind_Process_Still.jpg?v=1786361787\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/vp\/f938028e9ffb43b3bac2dc114ede365d\/f938028e9ffb43b3bac2dc114ede365d.HD-720p-1.6Mbps-91216970.mp4\"\u003e\u003c\/video\u003e\n\u003c\/div\u003e\n\u003cp style=\"color: #666 !important; font-size: 0.9rem !important; margin: 8px 0 0 0 !important;\"\u003eMission 1 Pro appairée, puis une Osmo Action 6. Même module, rien recâblé.\u003c\/p\u003e\n\u003ch3\u003eCe que ta caméra met dans tes goggles\u003c\/h3\u003e\n\u003cdiv style=\"margin: 2rem 0 1.5rem 0 !important; overflow: hidden !important; border-radius: 8px !important;\"\u003e\n\u003cimg class=\"pd-img\" loading=\"lazy\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/topdown-CAMLINK.jpg?v=1786379362\" alt=\"Toutes les familles de caméras supportées autour d'un module CAMLINK\"\u003e\n\u003c\/div\u003e\n\u003cp\u003eChaque caméra donne le même socle : ce qu'elle fait, depuis combien de temps, la batterie, et le temps d'enregistrement restant. Après, elles divergent, et la différence vient de la caméra, pas de nous. Choisis la tienne et regarde l'écran que tu aurais vraiment.\u003c\/p\u003e\n\u003cdiv class=\"cl-check\" data-cl-check\u003e\n\u003clabel\u003eTa caméra\n\u003cselect data-cl-sel\u003e\n\u003coption value=\"\"\u003eChoisis ta caméra\u003c\/option\u003e\n\u003c\/select\u003e\n\u003c\/label\u003e\n\u003cdiv class=\"cl-out\" data-cl-out\u003eChoisis ta caméra pour voir son statut, l'écran qu'elle produit et chaque valeur qu'elle peut envoyer.\u003c\/div\u003e\n\u003cdiv data-cl-panel hidden\u003e\n\u003cdiv class=\"cl-osd\" data-cl-osd role=\"img\" aria-hidden=\"true\"\u003e\u003c\/div\u003e\n\u003cp class=\"cl-cap\" data-cl-cap\u003e\u003c\/p\u003e\n\u003cdiv class=\"cl-tok\" data-cl-tok\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cp style=\"margin-top: 1.25rem !important;\"\u003e\u003cstrong\u003eSi ta caméra n'est pas dans la liste, CAMLINK ne la supporte pas.\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003eLes lignes grisées sont voulues. CAMLINK n'affiche que ce que la caméra a vraiment rapporté : une valeur qu'il ne peut pas confirmer reste vide, parce qu'une lecture fausse est pire que pas de lecture. Et si la caméra arrête de répondre, il le dit. Sur un long range par grand froid, c'est la différence entre le savoir à la minute dix et le découvrir à la maison.\u003c\/p\u003e\n\u003cp\u003eLes marques changent leur comportement Bluetooth sans prévenir personne. Ce que tu achètes, c'est la liste testée d'aujourd'hui. Les nouvelles caméras arrivent ici quand on les fait marcher, et le module prend les mises à jour firmware.\u003c\/p\u003e\n\u003ch3\u003eTrois quads, trois modules\u003c\/h3\u003e\n\u003cp\u003eOn ne vole presque jamais avec un seul quad. CAMLINK se soude à demeure, il vit sur le frame où tu le mets. Chaque quad du sac affiche les quatre mêmes lignes, au même endroit. Trois pour 149,99 €.\u003c\/p\u003e\n\u003ch3\u003eL'installation : environ 30 minutes\u003c\/h3\u003e\n\u003cp\u003eQuatre fils, un UART libre. Si t'as déjà soudé un VTX, t'as fait plus dur. Dans Betaflight tu actives MSP sur cet UART et tu allumes les Custom Message 1 à 4. Où ces quatre lignes se posent, c'est toi qui choisis : un tap dans le Setup les met en haut ou en bas à gauche, ou tu les places à la main dans l'onglet OSD de Betaflight.\u003c\/p\u003e\n\u003cp\u003eDeux façons de le monter. Tu le shrinks direct dans le frame et il disparaît, mais les boutons du module deviennent durs à atteindre. Ou tu prends le case, ce qu'on ferait : un mount se clipse sur un Camera Cage it's FPV, l'autre prend un standoff rond de 5 mm, et les deux mounts sont inclus. Le cage lui-même non. Dans tous les cas, le plus près possible de la caméra.\u003c\/p\u003e\n\u003ch3\u003eAppaire et vole. Le reste est optionnel.\u003c\/h3\u003e\n\u003cp\u003eL'appairage, c'est une pression sur le bouton du module. Pas de téléphone, pas d'app, pas de page, rien à taper. Chaque démarrage suivant retrouve la même caméra tout seul.\u003c\/p\u003e\n\u003cp\u003eLes quatre lignes arrivent avec l'essentiel dessus : ce que fait la caméra et depuis combien de temps, la batterie, le temps d'enregistrement restant, la résolution et le frame rate. Le record à l'armement est déjà actif. Tu peux t'arrêter là et aller voler.\u003c\/p\u003e\n\u003cp\u003eLe Setup Mode, c'est pour quand tu veux plus, pas parce qu'il manque quelque chose. CAMLINK héberge sa propre page : maintiens le deuxième bouton, il ouvre un réseau Wi-Fi, connecte ton téléphone, tape 10.0.0.1 dans le navigateur.\u003c\/p\u003e\n\u003cp\u003eTout le reste vit là. Glisse les valeurs OSD où tu veux, mets les presets GoPro ou les HiLight tags sur un switch, active la synchro horloge GPS, choisis les avertissements que tu veux voir. Trois layouts prêts si tu ne veux pas décider, et un éditeur complet si tu veux.\u003c\/p\u003e\n\u003cdiv style=\"margin: 1.5rem 0 !important; overflow: hidden !important; border-radius: 8px !important;\"\u003e\n\u003cvideo muted loop playsinline preload=\"none\" poster=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/preview_images\/preview-CAMLINK-setup-mode.jpg?v=1786655979\" src=\"https:\/\/cdn.shopify.com\/videos\/c\/vp\/26707362603549dfab5e88bbfd9bdd9e\/26707362603549dfab5e88bbfd9bdd9e.HD-720p-1.6Mbps-91550302.mp4\"\u003e\u003c\/video\u003e\n\u003c\/div\u003e\n\u003cp style=\"color: #666 !important; font-size: 0.9rem !important; margin: 8px 0 0 0 !important;\"\u003ePas d'app, pas de câble, pas de compte. Une page que le module sert lui-même.\u003c\/p\u003e\n\u003ch3\u003eN'en achète pas encore si\u003c\/h3\u003e\n\u003cul\u003e\n\u003cli\u003eTous les UART de ta FC sont pris.\u003c\/li\u003e\n\u003cli\u003eTu ne veux pas souder.\u003c\/li\u003e\n\u003cli\u003eT'es sur Betaflight 4.5 et tu y restes.\u003c\/li\u003e\n\u003cli\u003eLe sélecteur au-dessus montre ta caméra comme non testée et il te faut une garantie.\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cdetails style=\"margin: 2rem 0 0.5rem 0 !important; background: #f9f9f9 !important; color: #111 !important; border-radius: 8px !important; border: 1px solid #e0e0e0 !important;\"\u003e\n\u003csummary style=\"padding: 1.25rem 1.5rem !important; cursor: pointer !important; font-weight: 600 !important; font-size: 1.15em !important; display: flex !important; align-items: center !important; list-style: none !important;\"\u003e\u003cimg style=\"margin-right: 12px !important;\" height=\"32\" width=\"32\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/icon-08-delivery.svg?v=1770140419\"\u003e Inclus\u003c\/summary\u003e\n\u003cdiv style=\"padding: 0 1.5rem 1.5rem 1.5rem !important; border-top: 1px solid #e0e0e0 !important;\"\u003e\n\u003cul style=\"margin: 1rem 0 0 0 !important;\"\u003e\n\u003cli\u003eCarte CAMLINK avec case en polypropylène moulé par injection, dans la couleur que tu as choisie\u003c\/li\u003e\n\u003cli\u003eGaine thermo transparente prédécoupée, si tu préfères la gaine au case\u003c\/li\u003e\n\u003cli\u003eNappe silicone 4 fils (5 V, GND, TX, RX)\u003c\/li\u003e\n\u003cli\u003eMount pour Camera Cage et mount pour standoff\u003c\/li\u003e\n\u003cli\u003eVis M2\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003ch3\u003eCaractéristiques\u003c\/h3\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/icon-12.svg?v=1713179153\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003ePoids\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003e0,88 g, carte nue\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-dimensions.svg?v=1784988083\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eDimensions\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003e19,7 × 12,55 × 3,3 mm, carte nue\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-uart.svg?v=1784988083\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eConnexion FC\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003eUn UART libre | MSP, API 1.47 ou plus récent | 5 V et GND\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-bluetooth.svg?v=1784988083\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eLien caméra\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003eBluetooth | Une caméra appairée à la fois\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-firmware.svg?v=1784988084\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eFirmware requis\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003eBetaflight 2025.12 ou plus récent | 4.x et 4.5 non supportés\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-osd-telemetry.svg?v=1784988084\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eOSD\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003eUtilise les 4 slots Custom Message de Betaflight | Analogique, HDZero, Walksnail, DJI\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-wifi.svg?v=1784988083\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eSetup\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003ePage web hébergée sur le module | Connecte ton téléphone à son Wi-Fi | Au sol uniquement\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003cdiv class=\"spec-row\"\u003e\n\u003cimg height=\"40\" width=\"40\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/icon-05-timer.svg?v=1770140420\"\u003e\n\u003cdiv\u003e\n\u003cdiv class=\"spec-label\"\u003eTemps d'installation\u003c\/div\u003e\n\u003cdiv class=\"spec-value\"\u003eEnviron 30 minutes si Betaflight est déjà en 2025.12 ou plus récent\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003ch3\u003eGuides et téléchargements\u003c\/h3\u003e\n\u003ca class=\"guide-box\" style=\"margin: 0 0 0.75rem 0 !important;\" href=\"\/fr-de\/pages\/camlink-quickstart\"\u003e\n\u003cimg height=\"34\" width=\"34\" style=\"flex: 0 0 34px;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/icon-04-setup-guide.svg?v=1770140420\"\u003e\n\u003cspan\u003e\n\u003cspan style=\"display: block; font-weight: 600;\"\u003eCAMLINK Quickstart\u003c\/span\u003e\n\u003cspan style=\"display: block; color: #666; font-size: 14px; line-height: 1.4;\"\u003eCâblage, setup Betaflight, layout OSD, appairage par famille de caméras, Link Pause, la liste complète des tokens. Tout ce qui ne tient pas sur cette page.\u003c\/span\u003e\n\u003c\/span\u003e\n\u003cspan class=\"arrow\"\u003e→\u003c\/span\u003e\n\u003c\/a\u003e\n\u003cdetails class=\"dl-box\"\u003e\n\u003csummary\u003e\n\u003cimg height=\"34\" width=\"34\" style=\"flex: 0 0 34px;\" src=\"https:\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/camlink-firmware.svg?v=1784988084\"\u003e\n\u003cspan\u003e\n\u003cspan class=\"dl-title\"\u003eTéléchargements firmware\u003c\/span\u003e\n\u003cspan class=\"dl-sub\"\u003eDernière version : CAMLINK 1.0 | date de sortie avec le premier batch retail\u003c\/span\u003e\n\u003c\/span\u003e\n\u003c\/summary\u003e\n\u003cdiv style=\"padding: 0 1.5rem 1.25rem 1.5rem !important; border-top: 1px solid #e0e0e0 !important;\"\u003e\n\u003cdiv class=\"fw-rel\"\u003e\n\u003cspan class=\"fw-ver\"\u003e1.0\u003c\/span\u003e\n\u003cspan class=\"fw-date\"\u003epremière sortie retail\u003c\/span\u003e\n\u003cspan class=\"fw-dl\"\u003eTélécharger\u003c\/span\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails style=\"margin: 1.5rem 0 0.5rem 0 !important; background: #f9f9f9 !important; color: #111 !important; border-radius: 8px !important; border: 1px solid #e0e0e0 !important;\"\u003e\n\u003csummary style=\"padding: 1rem 1.5rem !important; cursor: pointer !important; font-weight: 600 !important; font-size: 1em !important; display: flex !important; justify-content: space-between !important; align-items: center !important; list-style: none !important;\"\u003eLivraison et disponibilité\u003c\/summary\u003e\n\u003cdiv style=\"padding: 0 1.5rem 1.25rem 1.5rem !important; border-top: 1px solid #e0e0e0 !important;\"\u003e\n\u003cp style=\"margin-top: 1rem !important;\"\u003e\u003cstrong\u003eUE :\u003c\/strong\u003e tarifs d'expédition standard. TVA incluse dans le prix.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eHors UE :\u003c\/strong\u003e pas de TVA au checkout. Selon ton pays, des droits d'import et des taxes locales peuvent s'ajouter à la livraison. On expédie en DDP quand c'est possible, sinon en DAP.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails style=\"margin: 0.5rem 0 !important; background: #f9f9f9 !important; color: #111 !important; border-radius: 8px !important; border: 1px solid #e0e0e0 !important;\"\u003e\n\u003csummary style=\"padding: 1rem 1.5rem !important; cursor: pointer !important; font-weight: 600 !important; font-size: 1em !important; display: flex !important; justify-content: space-between !important; align-items: center !important; list-style: none !important;\"\u003eSupport\u003c\/summary\u003e\n\u003cdiv style=\"padding: 0 1.5rem 1.25rem 1.5rem !important; border-top: 1px solid #e0e0e0 !important;\"\u003e\n\u003cp style=\"margin-top: 1rem !important;\"\u003eEmail : \u003ca href=\"mailto:info@itsfpv.net\"\u003einfo@itsfpv.net\u003c\/a\u003e. Réponse typique : 24 à 48 heures (lun-ven). On aide sur le câblage, les Custom Messages Betaflight, la config UART MSP et l'appairage Bluetooth.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cdetails style=\"margin: 0.5rem 0 !important; background: #f9f9f9 !important; color: #111 !important; border-radius: 8px !important; border: 1px solid #e0e0e0 !important;\"\u003e\n\u003csummary style=\"padding: 1rem 1.5rem !important; cursor: pointer !important; font-weight: 600 !important; font-size: 1em !important; display: flex !important; justify-content: space-between !important; align-items: center !important; list-style: none !important;\"\u003eGarantie et retours\u003c\/summary\u003e\n\u003cdiv style=\"padding: 0 1.5rem 1.25rem 1.5rem !important; border-top: 1px solid #e0e0e0 !important;\"\u003e\n\u003cp style=\"margin-top: 1rem !important;\"\u003e\u003cstrong\u003eDroit de rétractation UE :\u003c\/strong\u003e 14 jours à compter de la livraison. Frais de retour à votre charge. Vous pouvez l'allumer, entrer en Setup Mode, regarder l'interface web. Si vous volez avec, ou si vous le manipulez au-delà de ce qui est nécessaire pour vérifier sa nature, ses caractéristiques et son fonctionnement, la perte de valeur qui en résulte peut être déduite.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eCasse pendant le transport :\u003c\/strong\u003e signalez-la sous 7 jours avec des photos de l'emballage et du module, nous gérons le litige transporteur pour vous. Vos droits légaux restent inchangés.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eDéfectueux à l'arrivée :\u003c\/strong\u003e ne démarre pas, aucune LED, ou le Setup Mode ne se lance pas et son réseau Wi-Fi n'apparaît jamais après la demande. Contactez-nous. Défaut confirmé : retour à nos frais, réparation ou remplacement.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eGarantie :\u003c\/strong\u003e la garantie légale allemande s'applique (gesetzliche Gewährleistung) : deux ans à compter de la livraison pour les défauts présents à la livraison. Les dommages dus à un câblage incorrect, aux crashs, à l'eau ou aux modifications du module ne sont pas couverts. Pour les consommateurs (B2C) : un défaut qui apparaît dans les 12 mois suivant la livraison est présumé présent à la livraison, sauf preuve contraire.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/details\u003e\n\u003cscript\u003e\n(function () {\n  function bind(root) {\n    if (root.__clVideoBound) return;\n    root.__clVideoBound = true;\n    var vids = root.querySelectorAll('video');\n    if (!vids.length) return;\n    function fallback(v) { v.controls = true; }\n    if (!('IntersectionObserver' in window)) {\n      Array.prototype.forEach.call(vids, function (v) {\n        v.play().catch(function () { fallback(v); });\n      });\n      return;\n    }\n    var io = new IntersectionObserver(function (entries) {\n      entries.forEach(function (e) {\n        var v = e.target;\n        if (e.isIntersecting) {\n          try { v.currentTime = 0; } catch (err) {}\n          v.play().catch(function () { fallback(v); });\n        } else {\n          v.pause();\n          try { v.currentTime = 0; } catch (err) {}\n        }\n      });\n    }, { threshold: 0.4 });\n    Array.prototype.forEach.call(vids, function (v) { io.observe(v); });\n  }\n  function init() {\n    var roots = document.querySelectorAll('.camlink-pd');\n    Array.prototype.forEach.call(roots, bind);\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n\u003c\/script\u003e\n\u003cscript\u003e\n(function () {\n  var D = \/*CL-COMPAT-BEGIN*\/\n{\n  \"v\": \"1.0 \/ 02d5a6b9\",\n  \"t\": [\n    [\"STATE\",\"State\",\"Connection or recording state\",\"REC\"],\n    [\"REC_TIME\",\"Timer\",\"Recording duration\",\"3:24\"],\n    [\"BATTERY\",\"Battery\",\"Battery percentage\",\"85%\"],\n    [\"REMAINING\",\"Time left\",\"Remaining recording time\",\"1H50M\"],\n    [\"CAM\",\"Camera\",\"Camera model short tag\",\"GP13\"],\n    [\"RES\",\"Resolution\",\"Video resolution\",\"5.3K\"],\n    [\"FPS\",\"Frame rate\",\"Frame rate\",\"25\"],\n    [\"ASPECT\",\"Aspect ratio\",\"Aspect ratio\",\"8:7\"],\n    [\"SD\",\"SD free\",\"SD card free space\",\"108G\"],\n    [\"PROFILE\",\"Profile\",\"Color profile\",\"LOG\"],\n    [\"PRESET\",\"Preset\",\"Live GoPro preset name. Blank until the camera reports it.\",\"FPV\"],\n    [\"TC\",\"Clock sync\",\"GoPro clock set from GPS and confirmed\",\"TC\"],\n    [\"BUSY\",\"Busy\",\"Camera busy indicator\",\"BUSY\"],\n    [\"ISO\",\"ISO\",\"Sensor sensitivity\",\"ISO800\"],\n    [\"SHUT_ANG\",\"Shutter angle\",\"Shutter angle in degrees\",\"180D\"],\n    [\"SHUT_SPD\",\"Shutter speed\",\"Shutter speed as a fraction\",\"1\/50\"],\n    [\"WB\",\"White balance\",\"Color temperature\",\"5600K\"],\n    [\"IRIS\",\"Iris\",\"Lens aperture\",\"F2.8\"],\n    [\"CODEC\",\"Codec\",\"Recording codec family\",\"BRAW\"]\n  ],\n  \"w\": [\n    \"!LOW BAT\",\n    \"!SD FULL\",\n    \"!SD LOW\",\n    \"!NO SD\",\n    \"!WRONG MODE\",\n    \"!HOT\",\n    \"!SD ERROR\",\n    \"!COLD\",\n    \"!WAIT GPS FIX\",\n    \"!REC UNCONFIRMED\",\n    \"!CHECK CAM MENU\",\n    \"!REC STATE?\"\n  ],\n  \"n\": [\n    \"Same camera control as the tested Mission 1 Pro.\",\n    \"Same camera control as the tested Hero 13 and Hero 11.\",\n    \"Same camera control as the tested Action 6.\",\n    \"No Action 3 has ever been tested with CAMLINK.\",\n    \"No Osmo 360 has ever been tested with CAMLINK.\",\n    \"Same camera control as the tested Pocket 6K and Pocket 4K. Needs camera firmware 8.1 or newer.\",\n    \"Same Bluetooth remote control as the tested ZV-E10 II and ZV-E1.\"\n  ],\n  \"b\": [\n    \"GoPro\",\n    \"DJI\",\n    \"Blackmagic\",\n    \"Sony\"\n  ],\n  \"m\": [\n    [\"Mission 1 Pro\",\"M1P\",\"v\",7679,-1,0],\n    [\"Mission 1\",\"M1\",\"e\",7679,0,0],\n    [\"Mission 1 ILS\",\"M1\",\"e\",7679,0,0],\n    [\"MAX 2\",\"MAX2\",\"v\",8191,-1,0],\n    [\"Hero 13\",\"GP13\",\"v\",8191,-1,0],\n    [\"Hero 12\",\"GP12\",\"e\",8191,1,0],\n    [\"Hero 11\",\"GP11\",\"v\",8191,-1,0],\n    [\"Hero 10\",\"GP10\",\"e\",8191,1,0],\n    [\"Hero 9\",\"GP9\",\"e\",8191,1,0],\n    [\"Osmo Nano\",\"NANO\",\"v\",511,-1,1],\n    [\"Osmo Action 6\",\"OA6\",\"v\",511,-1,1],\n    [\"Osmo Action 5 Pro\",\"OA5P\",\"e\",511,2,1],\n    [\"Osmo Action 4\",\"OA4\",\"e\",511,2,1],\n    [\"Osmo Action 3\",\"OA3\",\"u\",0,3,1],\n    [\"Osmo Action 2\",\"OA2\",\"v\",511,-1,1],\n    [\"Osmo 360\",\"DJI\",\"u\",0,4,1],\n    [\"Pocket Cinema Camera 6K Pro\",\"BM6KP\",\"e\",516351,5,2],\n    [\"Pocket Cinema Camera 6K G2\",\"BM6K\",\"e\",516351,5,2],\n    [\"Pocket Cinema Camera 6K\",\"BM6K\",\"v\",516351,-1,2],\n    [\"Pocket Cinema Camera 4K\",\"BM4K\",\"v\",516351,-1,2],\n    [\"A1 II\",\"A1M2\",\"e\",31,6,3],\n    [\"A1\",\"A1\",\"e\",31,6,3],\n    [\"A9 III\",\"A9M3\",\"e\",31,6,3],\n    [\"A9 II\",\"A9M2\",\"e\",31,6,3],\n    [\"A9\",\"A9\",\"e\",31,6,3],\n    [\"A7 V\",\"A7M5\",\"e\",31,6,3],\n    [\"A7 IV\",\"A7M4\",\"e\",31,6,3],\n    [\"A7 III\",\"A7M3\",\"e\",31,6,3],\n    [\"A7S III\",\"A7S3\",\"e\",31,6,3],\n    [\"A7R V\",\"A7R5\",\"e\",31,6,3],\n    [\"A7R IVA\",\"A7R4A\",\"e\",31,6,3],\n    [\"A7R IV\",\"A7R4\",\"e\",31,6,3],\n    [\"A7R IIIA\",\"A7R3A\",\"e\",31,6,3],\n    [\"A7R III\",\"A7R3\",\"e\",31,6,3],\n    [\"A7CR\",\"A7CR\",\"e\",31,6,3],\n    [\"A7C II\",\"A7CM2\",\"e\",31,6,3],\n    [\"A7C\",\"A7C\",\"e\",31,6,3],\n    [\"A6700\",\"A6700\",\"e\",31,6,3],\n    [\"A6600\",\"A6600\",\"e\",31,6,3],\n    [\"A6400\",\"A6400\",\"e\",31,6,3],\n    [\"A6100\",\"A6100\",\"e\",31,6,3],\n    [\"ZV-E10 II\",\"ZVE10M2\",\"v\",31,-1,3],\n    [\"ZV-E10\",\"ZVE10\",\"e\",31,6,3],\n    [\"ZV-E1\",\"ZVE1\",\"v\",31,-1,3],\n    [\"ZV-1 II\",\"ZV1M2\",\"e\",31,6,3],\n    [\"ZV-1F\",\"ZV1F\",\"e\",31,6,3],\n    [\"ZV-1A\",\"ZV1A\",\"e\",31,6,3],\n    [\"ZV-1\",\"ZV1\",\"e\",31,6,3],\n    [\"FX30\",\"FX30\",\"e\",31,6,3],\n    [\"FX3A\",\"FX3A\",\"e\",31,6,3],\n    [\"FX3\",\"FX3\",\"e\",31,6,3],\n    [\"FX2\",\"FX2\",\"e\",31,6,3],\n    [\"RX1R III\",\"RX1R3\",\"e\",31,6,3],\n    [\"RX100 VIIA\",\"RX100M7\",\"e\",31,6,3],\n    [\"RX100 VII\",\"RX100M7\",\"e\",31,6,3],\n    [\"RX0 II\",\"RX0M2\",\"e\",31,6,3],\n    [\"ILX-LR1\",\"ILXLR1\",\"e\",31,6,3]\n  ]\n}\n\/*CL-COMPAT-END*\/;\n  var TI = {};\n  for (var ti = 0; ti \u003c D.t.length; ti++) TI[D.t[ti][0]] = ti;\n  function sends(m, name) { return (m[3] \u0026 (1 \u003c\u003c TI[name])) !== 0; }\n  function eg(name) { return D.t[TI[name]][3]; }\n  function osdLines(m) {\n    var l3 = m[1], l4 = '';\n    if (sends(m, 'RES')) {\n      l3 = eg('RES') + ' ' + eg('FPS');\n      if (sends(m, 'PROFILE')) l3 += ' ' + eg('PROFILE');\n      else if (sends(m, 'CODEC')) l3 += ' ' + eg('CODEC');\n      l4 = m[1];\n      if (sends(m, 'ASPECT')) l4 += ' ' + eg('ASPECT');\n      else if (sends(m, 'ISO')) l4 += ' ' + eg('ISO');\n    }\n    return [\n      eg('STATE') + ' ' + eg('REC_TIME'),\n      eg('BATTERY') + ' ' + eg('REMAINING'),\n      l3,\n      l4\n    ];\n  }\n  var TD = {\n    \"STATE\": \"État de connexion ou d'enregistrement\",\n    \"REC_TIME\": \"Durée d'enregistrement\",\n    \"BATTERY\": \"Niveau de batterie en pourcentage\",\n    \"REMAINING\": \"Temps d'enregistrement restant\",\n    \"CAM\": \"Code court du modèle de caméra\",\n    \"RES\": \"Résolution vidéo\",\n    \"FPS\": \"Images par seconde\",\n    \"ASPECT\": \"Format d'image\",\n    \"SD\": \"Espace libre sur la carte SD\",\n    \"PROFILE\": \"Profil colorimétrique\",\n    \"PRESET\": \"Nom du preset GoPro en cours. Vide tant que la caméra ne l'a pas rapporté.\",\n    \"TC\": \"Horloge GoPro réglée par GPS et confirmée\",\n    \"BUSY\": \"La caméra est occupée\",\n    \"ISO\": \"Sensibilité du capteur\",\n    \"SHUT_ANG\": \"Angle d'obturation en degrés\",\n    \"SHUT_SPD\": \"Vitesse d'obturation en fraction\",\n    \"WB\": \"Température de couleur\",\n    \"IRIS\": \"Ouverture de l'objectif\",\n    \"CODEC\": \"Famille de codec d'enregistrement\"\n  };\n  var TN = [\n    \"Même contrôle caméra que la Mission 1 Pro testée.\",\n    \"Même contrôle caméra que les Hero 13 et Hero 11 testées.\",\n    \"Même contrôle caméra que l'Action 6 testée.\",\n    \"Aucune Action 3 n'a jamais été testée avec CAMLINK.\",\n    \"Aucune Osmo 360 n'a jamais été testée avec CAMLINK.\",\n    \"Même contrôle caméra que les Pocket 6K et Pocket 4K testées. Il faut le firmware caméra 8.1 ou plus récent.\",\n    \"Même télécommande Bluetooth que les ZV-E10 II et ZV-E1 testées.\"\n  ];\n  var STATUS = { v: \"Vérifié sur du vrai matériel.\", e: \"Devrait marcher.\", u: \"Non testé.\" };\n  var LEAD_V = \"Record auto à l'armement, stop au désarmement, et tout ce qui suit est en direct dans tes goggles.\";\n  var CAP = \"Un exemple de ce que ça donne dans tes goggles. Chaque valeur ci-dessous est à toi : place-les où tu veux, et laisse de côté celles dont tu n'as pas besoin.\";\n  var NUM_WORDS = { 2: 'Deux', 3: 'Trois', 4: 'Quatre', 5: 'Cinq', 6: 'Six', 7: 'Sept', 8: 'Huit', 9: 'Neuf', 10: 'Dix', 11: 'Onze', 12: 'Douze', 13: 'Treize', 14: 'Quatorze', 15: 'Quinze', 16: 'Seize' };\n  function joinAnd(items) {\n    if (items.length === 1) return items[0];\n    return items.slice(0, -1).join(', ') + ' et ' + items[items.length - 1];\n  }\n  function defaultText() {\n    var total = 0;\n    var parts = [];\n    for (var bi = 0; bi \u003c D.b.length; bi++) {\n      var names = [];\n      for (var i = 0; i \u003c D.m.length; i++) {\n        if (D.m[i][5] === bi \u0026\u0026 D.m[i][2] === 'v') names.push(D.m[i][0]);\n      }\n      if (names.length) {\n        total += names.length;\n        parts.push(D.b[bi] + ' ' + joinAnd(names) + '.');\n      }\n    }\n    var word = NUM_WORDS[total] || String(total);\n    return word + \" modèles vérifiés sur du vrai matériel. Choisis le tien pour voir son statut, l'écran qu'il produit et chaque valeur qu'il peut envoyer. \" + parts.join(' ') + \" Tout le reste devrait marcher ou n'est pas testé, et le sélecteur te dit lequel.\";\n  }\n  function buildSelect(sel) {\n    for (var bi = 0; bi \u003c D.b.length; bi++) {\n      var og = document.createElement('optgroup');\n      og.label = D.b[bi];\n      for (var i = 0; i \u003c D.m.length; i++) {\n        if (D.m[i][5] !== bi) continue;\n        var opt = document.createElement('option');\n        opt.value = String(i);\n        opt.textContent = D.m[i][0];\n        og.appendChild(opt);\n      }\n      sel.appendChild(og);\n    }\n  }\n  function row(label, desc, example, on) {\n    var d = document.createElement('div');\n    if (!on) d.className = 'cl-off';\n    var c = document.createElement('span');\n    c.className = 'cl-name';\n    c.textContent = label;\n    var w = document.createElement('span');\n    w.className = 'cl-what';\n    w.textContent = desc;\n    var e = document.createElement('span');\n    e.className = 'cl-eg';\n    e.textContent = on ? example : '–';\n    d.appendChild(c); d.appendChild(w); d.appendChild(e);\n    return d;\n  }\n  function bind(box) {\n    if (box.__clBound) return;\n    var sel = box.querySelector('[data-cl-sel]');\n    var out = box.querySelector('[data-cl-out]');\n    var panel = box.querySelector('[data-cl-panel]');\n    var osd = box.querySelector('[data-cl-osd]');\n    var cap = box.querySelector('[data-cl-cap]');\n    var tok = box.querySelector('[data-cl-tok]');\n    if (!sel || !out || !panel || !osd || !cap || !tok) return;\n    box.__clBound = true;\n    buildSelect(sel);\n    var DEFAULT_TEXT = defaultText();\n    function render() {\n      var m = D.m[parseInt(sel.value, 10)];\n      if (!m || !STATUS[m[2]]) { out.textContent = DEFAULT_TEXT; panel.hidden = true; return; }\n      var note = m[4] \u003e= 0 ? (TN[m[4]] || D.n[m[4]]) : '';\n      out.textContent = '';\n      var h = document.createElement('span');\n      h.className = 'cl-status';\n      h.textContent = m[0] + ': ' + STATUS[m[2]];\n      out.appendChild(h);\n      if (m[2] === 'u') {\n        out.appendChild(document.createTextNode(note));\n        panel.hidden = true;\n        return;\n      }\n      out.appendChild(document.createTextNode(m[2] === 'v' ? LEAD_V : note));\n      var lines = osdLines(m);\n      osd.textContent = '';\n      for (var i = 0; i \u003c 4; i++) {\n        var s = document.createElement('span');\n        s.textContent = lines[i] || '';\n        osd.appendChild(s);\n      }\n      osd.setAttribute('aria-hidden', 'false');\n      osd.setAttribute('aria-label', 'Exemple des quatre lignes OSD sur une ' + m[0] + '. Tag caméra ' + m[1] + '.');\n      cap.textContent = CAP;\n      tok.textContent = '';\n      for (var j = 0; j \u003c D.t.length; j++) {\n        var t = D.t[j];\n        var on = sends(m, t[0]);\n        var desc = TD[t[0]] || t[2];\n        if (desc === t[1]) desc = '';\n        tok.appendChild(row(t[1], desc, t[0] === 'CAM' ? m[1] : t[3], on));\n      }\n      var b = document.createElement('div');\n      b.className = 'cl-note';\n      b.textContent = 'Les lignes grisées restent vides sur cette caméra : elle ne les rapporte pas, et CAMLINK ne devine jamais une valeur. Données : ' + D.v + '.';\n      tok.appendChild(b);\n      panel.hidden = false;\n    }\n    sel.addEventListener('change', render);\n    render();\n  }\n  function init() {\n    var boxes = document.querySelectorAll('[data-cl-check]');\n    Array.prototype.forEach.call(boxes, bind);\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n\u003c\/script\u003e\n\u003c\/div\u003e","brand":"it's FPV","offers":[{"title":"Transparent \/ À l'unité","offer_id":53934906409297,"sku":"CL1","price":59.99,"currency_code":"EUR","in_stock":false},{"title":"Transparent \/ Pack de 3","offer_id":53934906442065,"sku":"CL1-3PK","price":149.99,"currency_code":"EUR","in_stock":false},{"title":"Noir \/ À l'unité","offer_id":54614820159825,"sku":"CL1-B","price":59.99,"currency_code":"EUR","in_stock":false},{"title":"Noir \/ Pack de 3","offer_id":54614820192593,"sku":"CL1-B-3PK","price":149.99,"currency_code":"EUR","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0729\/3521\/1345\/files\/CAMLINK-pcb.jpg?v=1786377232","url":"https:\/\/itsfpv.de\/fr-de\/products\/camlink","provider":"it's FPV","version":"1.0","type":"link"}