Skip to main content

Training Video Organizer

A CLI tool for organizing training videos, logging lift data, and sorting video files from the XTU S6 action camera.

Features

Lift & Session Management

  • Add individual lifts or bulk import sessions from JSON or CSV files
  • List, update, and delete logged entries
  • Filter by date, program, exercise, weight, RIR, etc.
  • Open video files to compare lift performance across various factors
  • Rich terminal output with tables and colors
  • Automatic calculation of estimated 1RM (Bryzycki method) and total set volume for each entry
  • Analyze progress across program iterations with built-in metrics comparison

Video File Organization & Playback

  • Process directories containing NORM-labeled video files
  • Automatically sort files by their NORM suffix in ascending order
  • Open filtered videos sequentially using VLC for side-by-side comparison
  • Dry-run mode to preview changes before applying them

Prerequisites

  • Python 3.10+
  • uv (recommended for dependency management)
  • VLC media player (for video playback feature; optional but recommended)

Installing VLC

Linux:

sudo apt install vlc        # Debian/Ubuntu
sudo dnf install vlc        # Fedora/RHEL
sudo pacman -S vlc          # Arch Linux

macOS: Download from VLC official site or use Homebrew:

brew install vlc

Windows: Download installer from VLC official site.

Installation

# Install dependencies
uv sync

Environment Variables

Set TVO_VIDEO_DIR to point to your video storage directory:

Linux/macOS:

export TVO_VIDEO_DIR="/videos"

Windows (PowerShell):

$env:TVO_VIDEO_DIR="C:\Videos"

This environment variable is used by the process command to locate and organize your NORM-labeled video files.

Quick Start

# Initialize the database
tvo init


# Add a single lift with video
tvo add lift --date 2026-09-30 --program "Push/Pull/Legs" \
             --iteration 1 --lift squat --weight 225 --reps 8 \
             --top-set -f /videos/squat_20260930.mp4

# List all lifts with calculated metrics
tvo list lifts

# Filter by program and iteration
tvo list lifts --program "Push/Pull/Legs" --iteration 1

# Analyze progress across iterations (est. 1RM comparison)
tvo analyze estimated_1rm

# Analyze total set volume progression
tvo analyze total_set_volume

# Open videos for top sets (sequentially with VLC)
tvo open --top-set -l 50

# Process NORM video files in a directory
tvo process /videos/NORM --dry-run          # Preview sorting without changes
tvo process /videos/NORM                    # Apply sorting after confirmation

# Update a lift entry (by ID)
tvo update 42 --weight 230

# Delete an entry
tvo delete 42 --force

CSV Import Format

Bulk import training sessions from a CSV file:

tvo add session -c data/sessions.csv

Required Columns

Column Type Description
date string Date in YYYY-MM-DD format
program string Program name (e.g., "Push/Pull/Legs")
program_iteration integer Iteration number of the program
lift string Exercise name (e.g., "squat", "bench press")
weight integer Weight lifted in lbs or kg
reps integer Number of repetitions

Optional Columns

Column Type Description
bodyweight float Body weight at time of lift
top_set boolean Mark as top set (true/false)
warm_up_set boolean Mark as warm-up set (true/false)
reps_in_reserve integer RIR value (e.g., 1, 2, 3)
filename string Path to video file for this lift

Example CSV

date,program,program_iteration,lift,weight,reps,bodyweight,top_set,reps_in_reserve,filename
2026-09-30,Push/Pull/Legs,1,squat,225,8,185,true,1,/videos/squat_20260930.mp4
2026-09-30,Push/Pull/Legs,1,bench press,135,10,185,false,2,/videos/bench_20260930.mp4

Calculated Views

Each lift entry automatically calculates two metrics:

Estimated 1RM (One Rep Max)

Uses the Bryzycki formula: weight × 36 / (37 - reps)

Example: A squat with 200 lbs for 5 reps → estimated 1RM of ~225 lbs.

View in list output as "est. 1RM" column, or analyze progression across iterations:

tvo analyze estimated_1rm

Total Set Volume

Measures work done: weight × reps

Example: A bench press set with 135 lbs for 8 reps → volume of 1080 lbs.

Useful for comparing program iterations and tracking overall workload:

tvo analyze total_set_volume

Video File Processing

note: this mainly exists because prior to 2026, the xtu go cam saved files in a format that was hard to sort from a file explorer-like gui.

The process command organizes NORM-labeled video files in a directory by sorting them based on their NORM suffix. This is useful when you have multiple videos from different sessions that need to be ordered chronologically or numerically.

How It Works

  1. Scans the target directory for files containing "NORM"
  2. Extracts the numeric value from each file's NORM suffix (e.g., NORM0042 → 42)
  3. Sorts files in ascending order by this numeric value
  4. Displays a preview of the sorted order

Usage

# Preview changes without modifying files
tvo process /videos/NORM --dry-run

# Apply changes after confirming with prompt
tvo process /videos/NORM

Example Output

Sorted order (NORM suffix):
   1. 229638144_NORM0012.MP4 → NORM0012_229638144.MP4 (NORM0012)
   2. 273678336_NORM0165.mp4 → NORM0165_273678336.mp4 (NORM0165)
   3. file_NORM9999.MP4 → NORM9999_file.MP4 (NORM9999)

Normalize 3 file(s) in '/videos/NORM'? [y/N]: y

Notes

  • Only files directly in the target directory are processed (no subdirectories)
  • Files must contain "NORM" and follow the expected naming convention
  • Invalid filenames are skipped with a warning message

Metadata

Release files for training-vid-organizer 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for training-vid-organizer 0.4.1
File Size Uploaded Provenance
training_vid_organizer-0.4.1.tar.gz 19.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for training-vid-organizer 0.4.1
File Interpreter ABI Platform
training_vid_organizer-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 42.2 kB

Release files / training_vid_organizer-0.4.1.tar.gz

Download URL training_vid_organizer-0.4.1.tar.gz
Size 19.3 kB
Tags Source
SHA-256 checksum
How to use checksums
f24eba2c96db6b898176a5ee0b7d7aea4370f78ad990a0d7da8c20455cf02e90
BLAKE2b-256 checksum
How to use checksums
41c37c07d916ea94c9f2e3988fefc713cb0f2cdd19ad8bc13c0831651af7f612
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / training_vid_organizer-0.4.1-py3-none-any.whl

Download URL training_vid_organizer-0.4.1-py3-none-any.whl
Size 22.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d76692a649cff343f853172c331ac1e62cdb415487def47841a6f0798ed3c1b
BLAKE2b-256 checksum
How to use checksums
dcd6cb05f8a6b56596a70545d1437e86a4ece15902ec4d0350c254eb53601fe0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for training-vid-organizer 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page