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 :
- Ouvre la leçon du cours Skool dans ton navigateur (Chrome de préférence).
- Appuie sur
F12
pour ouvrir la console développeur. - 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.
- 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