Uploading and downloading datasets to Hugging Face Hub#

This example demonstrates how to upload and download EEG datasets to/from the Hugging Face Hub using braindecode.

The Hub integration supports three dataset types:

  1. WindowsDataset - Epoched data (mne.Epochs-based)

  2. EEGWindowsDataset - Continuous raw data with windowing metadata

  3. RawDataset - Continuous raw data without windowing

The Hub integration allows you to:

  • Share datasets with the research community

  • Version control your datasets with git-like versioning

  • Collaborate on dataset curation and preprocessing

  • Access datasets from anywhere with automatic caching

We’ll use the braindecode.datasets.BNCI2014_001 dataset as an example.

# Authors: Kuntal Kokate
#
# License: BSD (3-clause)

import os

from huggingface_hub import login

from braindecode.datasets import BNCI2014_001, BaseConcatDataset
from braindecode.preprocessing import (
    create_windows_from_events,
)

# Login to Hugging Face Hub using token from environment variable
hf_token = os.environ.get("HUGGING_FACE_TOKEN")
if hf_token:
    login(token=hf_token)
else:
    print("Warning: HUGGING_FACE_TOKEN not set. Hub uploads will fail.")

Load and prepare datasets#

We’ll demonstrate all three supported dataset types.

print("Loading BNCI2014_001 dataset...")
# Load only subject 1 for this example
dataset = BNCI2014_001(subject_ids=[1])

print(f"  Number of recordings: {len(dataset.datasets)}")
print(f"  Channels: {len(dataset.datasets[0].raw.ch_names)}")
print(f"  Sampling frequency: {dataset.datasets[0].raw.info['sfreq']} Hz")
Loading BNCI2014_001 dataset...
  Number of recordings: 12
  Channels: 26
  Sampling frequency: 250.0 Hz

Example 1: WindowsDataset (Epoched data)#

Create epoched data using mne.Epochs (use_mne_epochs=True)

print("\n1. Creating WindowsDataset (epoched data)...")
windows_dataset = create_windows_from_events(
    concat_ds=BaseConcatDataset([dataset.datasets[0]]),
    trial_start_offset_samples=0,
    trial_stop_offset_samples=0,
    use_mne_epochs=True,  # Creates WindowsDataset with mne.Epochs
)

print(f"   Total windows: {len(windows_dataset)}")
print("   Dataset type: WindowsDataset (epoched)")
1. Creating WindowsDataset (epoched data)...
Using data from preloaded Raw for 48 events and 1000 original time points ...
0 bad epochs dropped
   Total windows: 48
   Dataset type: WindowsDataset (epoched)

Example 2: EEGWindowsDataset (Continuous with windowing)#

Create continuous raw data with windowing metadata (use_mne_epochs=False)

print("\n2. Creating EEGWindowsDataset (continuous with windowing)...")
eegwindows_dataset = create_windows_from_events(
    concat_ds=BaseConcatDataset([dataset.datasets[0]]),
    trial_start_offset_samples=0,
    trial_stop_offset_samples=0,
    use_mne_epochs=False,  # Creates EEGWindowsDataset with continuous raw
)

print(f"   Total windows: {len(eegwindows_dataset)}")
print("   Dataset type: EEGWindowsDataset (continuous)")
2. Creating EEGWindowsDataset (continuous with windowing)...
   Total windows: 48
   Dataset type: EEGWindowsDataset (continuous)

Example 3: RawDataset (Continuous without windowing)#

Use the original raw data without any windowing

print("\n3. Using RawDataset (continuous without windowing)...")
raw_dataset = BaseConcatDataset([dataset.datasets[0]])

print(f"   Number of recordings: {len(raw_dataset.datasets)}")
print("   Dataset type: RawDataset (continuous, no windows)")
3. Using RawDataset (continuous without windowing)...
   Number of recordings: 1
   Dataset type: RawDataset (continuous, no windows)

Upload datasets to Hugging Face Hub#

To upload a dataset, you need to:

  1. Create a Hugging Face account at https://huggingface.co

  2. Login using: huggingface-cli login

  3. Choose a repository name (e.g., “username/dataset-name”)

Note: This example shows the code but doesn’t actually upload. Uncomment the code below to perform an actual upload.

print("\n" + "=" * 70)
print("UPLOADING TO HUGGING FACE HUB")
print("=" * 70)

# Skip Hub operations if no token is available (e.g., during docs build)
if not hf_token:
    print("\n⚠️  Skipping Hub upload examples (no HUGGING_FACE_TOKEN set)")
    print("To run this example with actual uploads, set HUGGING_FACE_TOKEN")
else:
    # Example 1: Upload WindowsDataset
    # ---------------------------------
    repo_id_windows = "braindecode/example_dataset-windows"

    print(f"\nUploading WindowsDataset to {repo_id_windows}...")
    url = windows_dataset.push_to_hub(
        repo_id=repo_id_windows,
        commit_message="Upload BNCI2014_001 WindowsDataset (epoched)",
        private=False,
    )
    print(f"✅ Uploaded to {url}!")

    # Example 2: Upload EEGWindowsDataset
    # ------------------------------------
    repo_id_eegwindows = "braindecode/example_dataset-eegwindows"

    print(f"\nUploading EEGWindowsDataset to {repo_id_eegwindows}...")
    url = eegwindows_dataset.push_to_hub(
        repo_id=repo_id_eegwindows,
        commit_message="Upload BNCI2014_001 EEGWindowsDataset (continuous)",
        private=False,
    )
    print(f"✅ Uploaded to {url}!")

    # Example 3: Upload RawDataset
    # -----------------------------
    repo_id_raw = "braindecode/example_dataset-raw"

    print(f"\nUploading RawDataset to {repo_id_raw}...")
    url = raw_dataset.push_to_hub(
        repo_id=repo_id_raw,
        commit_message="Upload BNCI2014_001 RawDataset",
        private=False,
    )
    print(f"✅ Uploaded to {url}!")

print("""
The example above demonstrates uploading to the Hugging Face Hub.
All datasets are converted to Zarr format (optimized for fast loading)
and uploaded with auto-generated dataset cards.

For your own datasets, replace the repo_id with your Hugging Face username.
""")
======================================================================
UPLOADING TO HUGGING FACE HUB
======================================================================

Uploading WindowsDataset to braindecode/example_dataset-windows...
Using data from preloaded Raw for 48 events and 1000 original time points ...
✅ Uploaded to https://huggingface.co/datasets/braindecode/example_dataset-windows/commit/4588da47cf3c18a841b9ff152dc1453ca81c998e!

Uploading EEGWindowsDataset to braindecode/example_dataset-eegwindows...

Processing Files (0 / 0)      : |          |  0.00B /  0.00B

New Data Upload               : |          |  0.00B /  0.00B


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB
Processing Files (9 / 9)      :  90%|████████▉ | 4.29MB / 4.78MB, 21.5MB/s


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB











  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB











  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB
Processing Files (10 / 10)    : 100%|██████████| 4.78MB / 4.78MB,  724kB/s


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB











  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB





  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB






  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB







  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB








  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB









  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB










  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB











  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB
Processing Files (10 / 10)    : 100%|██████████| 4.78MB / 4.78MB,  703kB/s

New Data Upload               : |          |  0.00B /  0.00B,  0.00B/s

  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB

  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB

  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB

  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB

  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB

  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB

  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB

  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB

  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB

  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB
✅ Uploaded to https://huggingface.co/datasets/braindecode/example_dataset-eegwindows/commit/80a155f01b21030828e4965e179e209e4992593a!

Uploading RawDataset to braindecode/example_dataset-raw...

Processing Files (0 / 0)      : |          |  0.00B /  0.00B

New Data Upload               : |          |  0.00B /  0.00B


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB





  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB






  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB







  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB








  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB









  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB










  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB











  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB





  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB






  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB







  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB








  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB









  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB










  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB











  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB
Processing Files (10 / 10)    : 100%|██████████| 4.78MB / 4.78MB,   ???B/s


  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB



  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB




  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB





  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB






  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB







  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB








  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB









  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB










  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB











  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB
Processing Files (10 / 10)    : 100%|██████████| 4.78MB / 4.78MB,  0.00B/s

New Data Upload               : |          |  0.00B /  0.00B,  0.00B/s

  ...rr/recording_0/data/c/0/6: 100%|██████████|  492kB /  492kB

  ...rr/recording_0/data/c/0/2: 100%|██████████|  488kB /  488kB

  ...rr/recording_0/data/c/0/0: 100%|██████████|  486kB /  486kB

  ...rr/recording_0/data/c/0/4: 100%|██████████|  497kB /  497kB

  ...rr/recording_0/data/c/0/9: 100%|██████████|  357kB /  357kB

  ...rr/recording_0/data/c/0/7: 100%|██████████|  492kB /  492kB

  ...rr/recording_0/data/c/0/3: 100%|██████████|  490kB /  490kB

  ...rr/recording_0/data/c/0/5: 100%|██████████|  491kB /  491kB

  ...rr/recording_0/data/c/0/1: 100%|██████████|  487kB /  487kB

  ...rr/recording_0/data/c/0/8: 100%|██████████|  496kB /  496kB
✅ Uploaded to https://huggingface.co/datasets/braindecode/example_dataset-raw/commit/58f80b50261ca4cf9b4936bfe3ac4e3c655db3c9!

The example above demonstrates uploading to the Hugging Face Hub.
All datasets are converted to Zarr format (optimized for fast loading)
and uploaded with auto-generated dataset cards.

For your own datasets, replace the repo_id with your Hugging Face username.

Zarr Format#

Datasets are uploaded in Zarr format, which provides:

  • Fastest random access (0.010 ms - critical for PyTorch training)

  • Excellent compression with blosc

  • Cloud-native, chunked storage

  • Ideal for datasets of all sizes

  • Based on comprehensive benchmarking with 1000 subjects

The format parameters (compression, compression_level) are optimized by default but can be customized if needed.

Download datasets from Hugging Face Hub#

Loading datasets from the Hub is simple and automatic!

print("\n" + "=" * 70)
print("DOWNLOADING FROM HUGGING FACE HUB")
print("=" * 70)

# Skip Hub downloads if no token (docs build)
if not hf_token:
    print("\n⚠️  Skipping Hub download examples (no HUGGING_FACE_TOKEN set)")
    print("To run this example with actual downloads, set HUGGING_FACE_TOKEN")
else:
    # Example 1: Download WindowsDataset
    # -----------------------------------
    public_repo_windows = "braindecode/example_dataset-windows"

    print(f"\nDownloading WindowsDataset from {public_repo_windows}...")
    loaded_windows = BaseConcatDataset.pull_from_hub(
        public_repo_windows,
        preload=True,  # Load into memory (False for lazy loading)
    )
    print("✅ Loaded WindowsDataset!")
    print(f"   Number of windows: {len(loaded_windows)}")

    # Example 2: Download EEGWindowsDataset
    # --------------------------------------
    public_repo_eeg = "braindecode/example_dataset-eegwindows"

    print(f"\nDownloading EEGWindowsDataset from {public_repo_eeg}...")
    loaded_eeg = BaseConcatDataset.pull_from_hub(
        public_repo_eeg,
        preload=True,
    )
    print("✅ Loaded EEGWindowsDataset!")
    print(f"   Number of windows: {len(loaded_eeg)}")

    # Example 3: Download RawDataset
    # -------------------------------
    public_repo_raw = "braindecode/example_dataset-raw"

    print(f"\nDownloading RawDataset from {public_repo_raw}...")
    loaded_raw = BaseConcatDataset.pull_from_hub(
        public_repo_raw,
        preload=True,
    )
    print("✅ Loaded RawDataset!")
    print(f"   Number of recordings: {len(loaded_raw.datasets)}")

print("""
The example above demonstrates downloading datasets from the Hub.
Datasets are automatically downloaded and cached locally.
Subsequent loads use the cache for faster access.
""")
======================================================================
DOWNLOADING FROM HUGGING FACE HUB
======================================================================

Downloading WindowsDataset from braindecode/example_dataset-windows...

Fetching 107 files:   0%|          | 0/107 [00:00<?, ?it/s]
Fetching 107 files:   1%|          | 1/107 [00:00<00:26,  3.96it/s]
Fetching 107 files:   8%|▊         | 9/107 [00:00<00:04, 20.87it/s]
Fetching 107 files:  16%|█▌        | 17/107 [00:00<00:03, 25.36it/s]
Fetching 107 files:  23%|██▎       | 25/107 [00:01<00:02, 28.23it/s]
Fetching 107 files:  31%|███       | 33/107 [00:01<00:02, 29.35it/s]
Fetching 107 files:  38%|███▊      | 41/107 [00:01<00:02, 29.80it/s]
Fetching 107 files:  45%|████▍     | 48/107 [00:01<00:02, 29.47it/s]
Fetching 107 files:  52%|█████▏    | 56/107 [00:02<00:01, 30.07it/s]
Fetching 107 files:  60%|█████▉    | 64/107 [00:02<00:01, 30.12it/s]
Fetching 107 files:  67%|██████▋   | 72/107 [00:02<00:01, 27.10it/s]
Fetching 107 files:  75%|███████▍  | 80/107 [00:02<00:00, 32.04it/s]
Fetching 107 files:  80%|████████  | 86/107 [00:02<00:00, 36.17it/s]
Fetching 107 files:  85%|████████▌ | 91/107 [00:03<00:00, 34.08it/s]
Fetching 107 files:  90%|████████▉ | 96/107 [00:03<00:00, 30.14it/s]
Fetching 107 files:  93%|█████████▎| 100/107 [00:03<00:00, 31.82it/s]
Fetching 107 files:  97%|█████████▋| 104/107 [00:03<00:00, 30.01it/s]
Fetching 107 files: 100%|██████████| 107/107 [00:03<00:00, 29.93it/s]
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/zarr/core/group.py:579: ZarrUserWarning: Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at file:///home/runner/.cache/huggingface/hub/datasets--braindecode--example_dataset-windows/snapshots/4588da47cf3c18a841b9ff152dc1453ca81c998e/dataset.zarr. Zarr format 3 will be used.
  warnings.warn(msg, category=ZarrUserWarning, stacklevel=1)
Adding metadata with 4 columns
48 matching events found
No baseline correction applied
0 projection items activated
✅ Loaded WindowsDataset!
   Number of windows: 48

Downloading EEGWindowsDataset from braindecode/example_dataset-eegwindows...

Fetching 31 files:   0%|          | 0/31 [00:00<?, ?it/s]
Fetching 31 files:   3%|▎         | 1/31 [00:00<00:11,  2.59it/s]
Fetching 31 files:  26%|██▌       | 8/31 [00:00<00:01, 19.96it/s]
Fetching 31 files:  39%|███▊      | 12/31 [00:00<00:01, 17.12it/s]
Fetching 31 files:  55%|█████▍    | 17/31 [00:00<00:00, 22.26it/s]
Fetching 31 files:  71%|███████   | 22/31 [00:01<00:00, 27.79it/s]
Fetching 31 files:  84%|████████▍ | 26/31 [00:01<00:00, 22.08it/s]
Fetching 31 files: 100%|██████████| 31/31 [00:01<00:00, 22.76it/s]
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/zarr/core/group.py:579: ZarrUserWarning: Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at file:///home/runner/.cache/huggingface/hub/datasets--braindecode--example_dataset-eegwindows/snapshots/80a155f01b21030828e4965e179e209e4992593a/dataset.zarr. Zarr format 3 will be used.
  warnings.warn(msg, category=ZarrUserWarning, stacklevel=1)
Creating RawArray with float64 data, n_channels=26, n_times=96735
    Range : 0 ... 96734 =      0.000 ...   386.936 secs
Ready.
✅ Loaded EEGWindowsDataset!
   Number of windows: 48

Downloading RawDataset from braindecode/example_dataset-raw...

Fetching 31 files:   0%|          | 0/31 [00:00<?, ?it/s]
Fetching 31 files:   3%|▎         | 1/31 [00:00<00:08,  3.62it/s]
Fetching 31 files:  26%|██▌       | 8/31 [00:00<00:01, 15.12it/s]
Fetching 31 files:  52%|█████▏    | 16/31 [00:00<00:00, 18.11it/s]
Fetching 31 files:  77%|███████▋  | 24/31 [00:01<00:00, 26.25it/s]
Fetching 31 files:  97%|█████████▋| 30/31 [00:01<00:00, 31.29it/s]
Fetching 31 files: 100%|██████████| 31/31 [00:01<00:00, 24.77it/s]
/opt/hostedtoolcache/Python/3.12.12/x64/lib/python3.12/site-packages/zarr/core/group.py:579: ZarrUserWarning: Both zarr.json (Zarr format 3) and .zgroup (Zarr format 2) metadata objects exist at file:///home/runner/.cache/huggingface/hub/datasets--braindecode--example_dataset-raw/snapshots/58f80b50261ca4cf9b4936bfe3ac4e3c655db3c9/dataset.zarr. Zarr format 3 will be used.
  warnings.warn(msg, category=ZarrUserWarning, stacklevel=1)
Creating RawArray with float64 data, n_channels=26, n_times=96735
    Range : 0 ... 96734 =      0.000 ...   386.936 secs
Ready.
✅ Loaded RawDataset!
   Number of recordings: 1

The example above demonstrates downloading datasets from the Hub.
Datasets are automatically downloaded and cached locally.
Subsequent loads use the cache for faster access.

Using datasets with PyTorch DataLoader#

Datasets loaded from the Hub work seamlessly with PyTorch.

print("\n" + "=" * 70)
print("USING WITH PYTORCH DATALOADER")
print("=" * 70)

from torch.utils.data import DataLoader

# Create DataLoader
train_loader = DataLoader(
    windows_dataset,
    batch_size=32,
    shuffle=True,
    num_workers=0,  # Set to > 0 for parallel loading
)

print("\nDataLoader created:")
print("  Batch size: 32")
print(f"  Total batches: {len(train_loader)}")

# Iterate over a few batches
print("\n  Sample batches:")
for i, batch_data in enumerate(train_loader):
    if i >= 3:  # Show only 3 batches
        break
    # Handle both 2-tuple (X, y) and 3-tuple (X, y, inds) returns
    if len(batch_data) == 3:
        X_batch, y_batch, _ = batch_data
    else:
        X_batch, y_batch = batch_data
    print(
        f"    Batch {i + 1}: X shape={tuple(X_batch.shape)}, "
        f"y shape={tuple(y_batch.shape)}"
    )

print("""
This works the same way for datasets loaded from the Hub!
The Hub integration is fully compatible with PyTorch's training pipeline.
""")
======================================================================
USING WITH PYTORCH DATALOADER
======================================================================

DataLoader created:
  Batch size: 32
  Total batches: 2

  Sample batches:
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
    Batch 1: X shape=(32, 26, 1000), y shape=(32,)
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
Using data from preloaded Raw for 1 events and 1000 original time points ...
    Batch 2: X shape=(16, 26, 1000), y shape=(16,)

This works the same way for datasets loaded from the Hub!
The Hub integration is fully compatible with PyTorch's training pipeline.

Advanced: Version control and collaboration#

The Hub provides powerful features for dataset management:

Versioning

Every upload creates a new commit, allowing you to track changes:

# Upload updated version
dataset.push_to_hub(
    repo_id="username/dataset-name",
    commit_message="Fixed label for subject 5"
)

Private datasets

For sensitive data or work-in-progress:

dataset.push_to_hub(
    repo_id="username/private-dataset",
    private=True
)

Pull requests

Propose changes without directly modifying the dataset:

dataset.push_to_hub(
    repo_id="username/dataset-name",
    create_pr=True,
    commit_message="Propose additional preprocessing"
)

Best practices#

When sharing datasets on the Hub:

  1. Include good documentation - The dataset card (README.md) is auto- generated but you can edit it on the Hub to add details about:

    • Data collection methodology

    • Preprocessing steps applied

    • Known issues or limitations

    • Citation information

  2. Optimize compression if needed - The default blosc compression (level 5) provides an optimal balance. For very large datasets, experiment with compression_level parameter (0-9) to find the best trade-off between size and speed for your use case.

  3. Test before sharing - Always test that your uploaded dataset can be downloaded and used correctly:

    # Upload
    dataset.push_to_hub("braindecode/example_dataset")
    
    # Test download
    test_dataset = BaseConcatDataset.pull_from_hub("braindecode/example_dataset")
    assert len(test_dataset) == len(dataset)
    
  4. Consider privacy - Ensure you have permission to share the data and that personal information has been properly anonymized.

print("\n" + "=" * 70)
print("SUMMARY")
print("=" * 70)
print("""
Hugging Face Hub integration supports three dataset types:

✓ WindowsDataset - Epoched data (mne.Epochs)
✓ EEGWindowsDataset - Continuous with windowing metadata
✓ RawDataset - Continuous without windowing

Benefits:
✓ Share datasets with the research community
✓ Version control with git-like versioning
✓ Collaborate on dataset curation
✓ Access datasets from anywhere
✓ Automatic caching for faster repeated loads
✓ Optimized Zarr format for fast training

For more information:
- Hugging Face Hub: https://huggingface.co
- Braindecode docs: https://braindecode.org
- Hub docs: https://huggingface.co/docs/hub
""")
======================================================================
SUMMARY
======================================================================

Hugging Face Hub integration supports three dataset types:

✓ WindowsDataset - Epoched data (mne.Epochs)
✓ EEGWindowsDataset - Continuous with windowing metadata
✓ RawDataset - Continuous without windowing

Benefits:
✓ Share datasets with the research community
✓ Version control with git-like versioning
✓ Collaborate on dataset curation
✓ Access datasets from anywhere
✓ Automatic caching for faster repeated loads
✓ Optimized Zarr format for fast training

For more information:
- Hugging Face Hub: https://huggingface.co
- Braindecode docs: https://braindecode.org
- Hub docs: https://huggingface.co/docs/hub

Total running time of the script: (0 minutes 23.296 seconds)

Estimated memory usage: 1373 MB

Gallery generated by Sphinx-Gallery