Comment télécharger une vidéo d’un cours Skool (facile et rapide)

Skool est une plateforme de formation en ligne très populaire, utilisée par de nombreux créateurs.
Cependant, les vidéos hébergées (souvent via Loom) ne sont pas directement téléchargeables.
Télécharger tes cours présente plusieurs avantages :

  • Les regarder hors ligne, sans connexion internet
  • Les conserver en backup sur ton disque dur
  • Les revoir à ton rythme, sans dépendre de la plateforme

⚠️ Attention : ce tutoriel est destiné uniquement à un usage personnel. Tu ne dois pas redistribuer ni revendre les contenus sans l’autorisation du formateur.

Étape 1 : Récupérer l’URL Loom de la vidéo Skool

Les vidéos Skool sont généralement intégrées via Loom.
Pour trouver l’URL réelle :

  1. Ouvre la leçon du cours Skool dans ton navigateur (Chrome de préférence).
  2. Appuie sur F12 pour ouvrir la console développeur.
  3. Copie-colle le script suivant dans la console puis appuie sur Entrée :
const iframe = document.querySelector("iframe[src*='loom.com/embed']");
if (iframe) {
  const src = iframe.getAttribute("src");
  const id = src.match(/embed\/([a-z0-9]+)\?/i)?.[1];
  console.log("ID vidéo Loom :", id);
  console.log("👉 URL share :", "https://www.loom.com/share/" + id);
}

Résultat : tu obtiendras l’URL Loom de la vidéo, par exemple :

https://www.loom.com/share/cbe929710d734f808469d792333333

Étape 2 : Télécharger la vidéo Loom avec Python

Maintenant que tu as l’URL Loom, tu peux la télécharger avec ton script Python basé sur yt-dlp.

  1. Installe yt-dlp si ce n’est pas déjà fait :
pip install yt-dlp

Crée un fichier skool_dl.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys, re, unicodedata
from contextlib import suppress

# --- GUI facultative (fallback console si pas dispo) ---
gui_ok = True
with suppress(Exception):
    import tkinter as tk
    from tkinter import simpledialog, messagebox
try:
    _ = tk.Tk  # quick check
except Exception:
    gui_ok = False

# --- yt-dlp (pip install yt-dlp) ---
try:
    import yt_dlp
except ImportError:
    print("❌ yt-dlp n'est pas installé. Fais:  pip install -U yt-dlp")
    sys.exit(1)

def to_share_url(url: str) -> str:
    """Convertit /embed/<id>... en /share/<id> ; sinon renvoie tel quel."""
    m = re.search(r"loom\.com/(embed|share)/([a-z0-9]+)", url, re.I)
    if not m:
        return url
    vid = m.group(2)
    return f"https://www.loom.com/share/{vid}"

def slugify(text: str) -> str:
    text = unicodedata.normalize('NFKD', text)
    text = text.encode('ascii', 'ignore').decode('ascii')
    text = re.sub(r'[^a-zA-Z0-9]+', '-', text).strip('-').lower()
    return text or "loom-video"

def prompt_gui(title: str, initial: str) -> str:
    """Demande une chaîne via GUI; lève si GUI off."""
    root = tk.Tk()
    root.withdraw()
    val = simpledialog.askstring("Loom Downloader", title, initialvalue=initial)
    root.destroy()
    return val

def main():
    # 1) Récupérer l'URL (GUI ou console)
    if len(sys.argv) >= 2:
        url = sys.argv[1].strip()
    else:
        if gui_ok:
            with suppress(Exception):
                url = prompt_gui("Colle l'URL Loom (embed ou share)", "")
            if not url:
                print("❌ Aucune URL fournie.")
                return
        else:
            url = input("Colle l'URL Loom (embed/share): ").strip()

    if not url.startswith("http"):
        print("❌ URL invalide. Exemple: https://www.loom.com/share/VIDEO_ID")
        return

    share_url = to_share_url(url)

    # 2) Extraire le titre pour construire un nom par défaut
    ydl_probe_opts = {
        "quiet": True,
        "skip_download": True,
        "no_warnings": True,
    }
    try:
        with yt_dlp.YoutubeDL(ydl_probe_opts) as y:
            info = y.extract_info(share_url, download=False)
        title = info.get("title") or "loom-video"
    except Exception as e:
        title = "loom-video"

    default_name = slugify(title) + ".mp4"

    # 3) Demander/Confirmer le nom de fichier (GUI ou console)
    if len(sys.argv) >= 3:
        out = sys.argv[2].strip()
    else:
        if gui_ok:
            with suppress(Exception):
                suggested = prompt_gui("Nom du fichier de sortie (.mp4)", default_name)
            out = suggested or default_name
        else:
            ans = input(f"Nom du fichier (Entrée pour '{default_name}'): ").strip()
            out = ans or default_name

    # 4) Télécharger en flux combiné (pas besoin de ffmpeg)
    ydl_opts = {
        "format": "best[ext=mp4]/best",
        "outtmpl": out,
        "merge_output_format": None,   # pas de merge → pas besoin de ffmpeg
        "noprogress": False,
    }

    print(f"→ URL: {share_url}")
    print(f"→ Fichier: {out}")
    try:
        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            ydl.download([share_url])
        if gui_ok:
            with suppress(Exception):
                tk.Tk().withdraw()
                messagebox.showinfo("Loom Downloader", f"Téléchargement terminé ✅\n\nFichier: {out}")
        print("✅ Téléchargement terminé.")
    except Exception as e:
        if gui_ok:
            with suppress(Exception):
                tk.Tk().withdraw()
                messagebox.showerror("Loom Downloader", f"Erreur: {e}")
        print(f"❌ Erreur: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()

Lance ton script en ligne de commande :

python skool_dl.py

Une petite boîte de dialogue te demandera de coller l’URL Loom.
Le script téléchargera automatiquement la vidéo en .mp4, en renommant le fichier avec un titre propre (slug).

Étape 3 : Profiter de tes vidéos hors ligne

Une fois le téléchargement terminé, tu retrouveras ta vidéo :

  • en format MP4
  • avec un nom optimisé (plus simple à ranger dans tes dossiers)
  • directement lisible sur ton PC ou ton smartphone.

Conclusion

Grâce à ces deux scripts simples (JavaScript + Python), tu peux sauvegarder facilement tous tes cours Skool pour un usage personnel.

  • Le JavaScript sert uniquement à extraire l’URL Loom cachée dans la page.
  • Le Python télécharge proprement la vidéo en local.

⚠️ Encore une fois, respecte les droits d’auteur : garde ces vidéos pour ton apprentissage personnel.

BONUS :

Il y a aussi ce script python qui fonctionne pour télécharger les vidéos complète sur Loom mais ça demande des compétences en DEV

https://github.com/Ecno92/loom-dl

Alexandre - Expert WordPress/ Elementor & SEO

Autodidacte, entrepreneur et ingénieur passionné, je suis constamment à l’affût de nouvelles informations. Je m’efforce de comprendre en profondeur chaque projet que j’entreprends, en scrutant chaque détail pour atteindre la perfection

Partager