Pull Video is a cross-platform desktop utility for downloading the highest available video quality from an Instagram or TikTok post. It runs locally, opens its interface in the default browser, and saves to the user's Downloads folder. Only download media you own or have permission to use.
Download the latest Windows, macOS, or Linux build from GitHub Releases.
The current builds are unsigned. Windows SmartScreen or macOS Gatekeeper may display a warning until platform signing credentials are added.
Install uv, then run the Python application with isolated dependencies:
uv run --with yt-dlp --with imageio-ffmpeg python gui.pyThe interface opens automatically. It supports format inspection, live status, optional cookies from a locally installed browser, browser transfer of the finished file, and an in-app quit button. Premiere-compatible mode is enabled by default: non-H.264 video is converted to an H.264/AAC MP4 after download.
The earlier Bash downloader remains available as a command-line alternative:
./pull-instagram-video.sh 'https://www.instagram.com/ACCOUNT/reel/SHORTCODE/'For scripts and integrations, install the project and use the headless JSON CLI:
uv tool install .
pull-video 'https://www.tiktok.com/@ACCOUNT/video/ID' --output-dir ./downloadsThe CLI includes a yt-dlp-compatible browser impersonation dependency so sites such as TikTok can use the local browser-cookie flow reliably.
The final stdout line is a stable JSON object. Progress and actionable errors are written to stderr, so callers can parse stdout without filtering status messages.
PyInstaller must build on each target operating system; it does not produce Windows and macOS applications from Linux. On the target OS:
python -m pip install -r requirements-build.txt
python build.py
python package_release.pyThe native application is written to dist/, and a shareable ZIP or tarball is
written to release/. The folder-style bundle is deliberate: recipients must
keep the executable and its _internal directory together.
The application version is defined once in version.py. Update it before a
release and use the matching Git tag (for example, version 0.1.2 uses tag
v0.1.2). The GUI, --version output, and archive filenames all use this value.
.github/workflows/release.yml builds native Windows, macOS, and Linux artifacts. Run it manually for test artifacts, or create a tag such as:
git tag v0.1.0
git push origin v0.1.0A matching tag publishes the three archives as a GitHub Release. This requires
the changes to be committed and pushed first. The repository workflow has
contents: write permission only for creating that tagged release.
Current CI artifacts are unsigned development builds. Public distribution should add Windows Authenticode signing and macOS Developer ID signing plus notarization; those steps require operator-owned certificates and credentials.
The packaged app includes yt-dlp, imageio-ffmpeg, and an FFmpeg executable.
Review THIRD_PARTY_NOTICES.md before redistribution,
especially for public or commercial releases.