CoolFace
Datasetpublic

TornadoLabs/howto100m

HowTo100M 105,128 videos (11721.4 GB) with 104,584 subtitle files, downloaded at source quality and re-hosted for direct use — no more dead YouTube links, no more flaky downloader scripts. Coverage: 105,128 of the 1,238,911 source video IDs (8.5%). 19,160 source videos were unavailable at fetch time (private, removed, members-only or geo-blocked) and are excluded. The dataset is refreshed as more videos are delivered. What's inside metadata.jsonl — one row per… See the full description on the dataset page: https://huggingface.co/datasets/TornadoLabs/howto100m.

sourceHugging Faceotherupdated 3d agoView on Hugging Face
0likes174downloads
Dataset Card

HowTo100M

105,128 videos (11721.4 GB) with 104,584 subtitle files, downloaded at source quality and re-hosted for direct use — no more dead YouTube links, no more flaky downloader scripts.

Coverage: 105,128 of the 1,238,911 source video IDs (8.5%). 19,160 source videos were unavailable at fetch time (private, removed, members-only or geo-blocked) and are excluded. The dataset is refreshed as more videos are delivered.

What's inside

  • `metadata.jsonl` — one row per video: video_id, video_url (direct HTTPS download, CDN-backed), subtitle_url, youtube_url, size_bytes
  • The 105,128 MP4s (11721.4 GB) and 104,584 subtitle files are hosted on Hugging Face storage and served via the video_url column
  • `captions.parquet` — 1,238,911 academic annotations (source: annotations.csv)

Quick start

python
from datasets import load_dataset

# videos (default config): one row per video with its direct download URL
ds = load_dataset("TornadoLabs/howto100m", "videos", split="train")
print(ds[0])

# download one video
import requests
r = requests.get(ds[0]["video_url"])
open(f"{ds[0]['video_id']}.mp4", "wb").write(r.content)

# academic annotations
ann = load_dataset("TornadoLabs/howto100m", "annotations", split="train")

How this dataset was built

Every video was fetched through the Tornado API bulk pipeline and delivered straight into Hugging Face storage via its S3-compatible gateway — the exact workflow documented here.

Of the original ID list, only videos still publicly available on YouTube are included (dead/private videos are listed upstream and excluded here).

Provenance & citation

  • Original dataset: https://www.di.ens.fr/willow/research/howto100m/
  • Paper: Miech et al., ICCV 2019 — HowTo100M: Learning a Text-Video Embedding by Watching Hundred Million Narrated Video Clips
  • 1.2M vidéos instructionnelles.

The video files remain the property of their respective YouTube uploaders. The annotations belong to the original dataset authors — cite their paper if you use them. This re-hosting is provided for reproducible research; if you are a rights holder and want content removed, open a discussion on this repo.

Build your own video dataset

Need a custom corpus (different IDs, other platforms, higher volume)? [Tornado API](https://tornadoapi.io?ref=hf-howto100m-cta) downloads YouTube at scale — bulk endpoints, S3/R2/HF delivery, subtitles and metadata included.

![Powered by Tornado API](https://tornadoapi.io?ref=hf-howto100m-badge)