Contributing to TorchCodec

March 10, 2026 ยท View on GitHub

You can contribute to this project by writing code, fixing issues or simply by using the library and reporting your feedback.

Below are instructions to build TorchCodec from source, as well as the usual contribution guidelines (code formatting, testing, etc). To submit a PR, please follow the official GitHub guidelines.

Building TorchCodec from source

Installing dependencies

The instructions below assume you are using a conda environment, but the steps are easily adaptable to other kind of virtual environments. To build, run and test locally you will need the following dependencies:

  • A C++ compiler+linker. This is typically available on a baseline Linux installation already.
  • cmake
  • pkg-config
  • pybind11
  • FFmpeg
  • PyTorch nightly

Start by installing the nightly build of PyTorch following the official instructions.

Then, the easiest way to install the rest of the dependencies is to run:

conda install cmake pkg-config pybind11 "ffmpeg" -c conda-forge

Clone and build

To clone and install the repo, run:

git clone git@github.com:pytorch/torchcodec.git
# Or, using https instead of ssh: git clone https://github.com/pytorch/torchcodec.git
cd torchcodec

# Optional, but recommended: define a persistent build directory which speeds-up
# subsequent builds.
export TORCHCODEC_CMAKE_BUILD_DIR="${PWD}/build"

pip install -e ".[dev]" --no-build-isolation -vv
# Or, for cuda support: ENABLE_CUDA=1 pip install -e ".[dev]" --no-build-isolation -vv

Running unit tests

To run python tests run:

pytest

Some tests are marked as 'slow' and aren't run by default. You can use pytest -m slow to run those, or pytest -m "" to run all tests, slow or not.

To run the C++ tests run:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_TESTS=1 -DCMAKE_PREFIX_PATH=$(python3 -c 'import torch;print(torch.utils.cmake_prefix_path)') ..
cmake --build . -- VERBOSE=1
ctest --rerun-failed --output-on-failure

Code formatting and type checking

We use pre-commit to enforce code formatting and mypy for type checking. Install both with

pip install pre-commit mypy

To run pre-commit hooks before each commit, run pre-commit install. You may prefer to run these checks manually, in which case you can just use pre-commit run --all-files.

For mypy we recommend the following command:

mypy --install-types --non-interactive --config-file mypy.ini

Building the docs

First install from source, then install the doc dependencies:

cd docs
pip install -r requirements.txt

Then, still from within the docs directory:

make html

The built docs will be in build/html. Open in your browser to view them.

To avoid building the examples (which execute python code and can take time) you can use make html-noplot. To build a subset of specific examples instead of all of them, you can use a regex like EXAMPLES_PATTERN="plot_the_best_example*" make html.

Run make clean from time to time if you encounter issues.

Serving docs locally (if building from a GPU env)

If you're developing locally, you can just open the generated index.htmlfile in your browser.

If instead you're using a remote machine, you can use a combination of a simple python HTTP server and port forwarding to serve the docs locally. This allows you to iterate on the documentation much more quickly than relying on PR previews.

To do so, after following the above doc build steps, run the following from the docs/build/html folder:

python -m http.server 8000 # or any free port

This will open up a simple HTTP server serving the files in the build directory. If this is done on a remote machine, you can set up port forwarding from your local machine to access the server, for example:

ssh -L 9000:localhost:8000 $REMOTE_DEV_HOST

Now, you can navigate to localhost:9000 on your local machine to view the rendered documentation.

License

By contributing to TorchCodec, you agree that your contributions will be licensed under the LICENSE file in the root directory of this source tree.

Contributors are also required to sign our Contributor License Agreement.