Skip to main content

c2-overlay

Generate PM5-style overlays for rowing videos from Concept2 FIT files.

Creates accurate ASS subtitle overlays matching the Concept2 PM5 monitor display, synchronized with your workout video using metadata timestamps.

Features

  • PM5-style display: Shows time, split pace, stroke rate, distance, watts, and heart rate in a familiar layout
  • Automatic synchronization: Aligns workout data with video using creation timestamps
  • Interval workout support: Displays work/rest lap information with visual indicators
  • Rest overlay: Shows previous lap statistics during rest periods
  • Flexible output: Generate ASS subtitles or burn them directly into video

Installation

uvx c2-overlay video.mp4 workout.fit

Or install locally:

uv tool install c2-overlay

Usage

Basic usage (generates ASS subtitle file):

uvx c2-overlay video.mp4 workout.fit

Generate and lint the ASS output:

uvx c2-overlay video.mp4 workout.fit --lint

Lint an existing ASS file:

uvx c2-overlay-lint video.ass

Burn overlay into video:

uvx c2-overlay video.mp4 workout.fit --burn-in output.mp4

Adjust timing manually:

uvx c2-overlay video.mp4 workout.fit --offset 2.5

Override the video start timestamp (when metadata is missing/incorrect):

uvx c2-overlay video.mp4 workout.fit --video-start 2025-12-14T10:41:31Z

Options

  • -o, --out-ass PATH: Output .ass file path (default: same name as video)
  • --video-start ISO8601: Override video start timestamp (e.g. 2025-12-14T10:41:31Z)
  • --offset SECONDS: Manual offset adjustment in seconds (positive = later, negative = earlier)
  • --burn-in OUT_VIDEO: Burn overlay into video using ffmpeg
  • --label-font FONT: Font for labels (default: PragmataPro)
  • --value-font FONT: Font for values (default: PragmataPro Mono)
  • --fontsize SIZE: Value font size (default: scaled from resolution)
  • --left-margin PX: Left margin in pixels
  • --top-margin PX: Top margin (positions overlay from top)
  • --bottom-margin PX: Bottom margin (default positioning)
  • --box-alpha 0-255: Background transparency (0=opaque, 255=transparent, default: 112)
  • --no-interp: Disable per-second/per-meter interpolation (smaller ASS output)
  • --lint: Lint the generated ASS output and exit non-zero on errors
  • --lint-strict: Like --lint, but also fails on warnings
  • --crf VALUE: Video quality for burn-in (default: 18)
  • --preset PRESET: Encoding preset (default: veryfast)

Requirements

  • Python 3.12+
  • ffprobe (for video metadata)
  • ffmpeg (optional, for burn-in)

How it Works

  1. Extracts video creation timestamp from metadata
  2. Reads FIT file trackpoints with absolute timestamps
  3. Computes synchronization offset
  4. Generates ASS subtitle file with PM5-style overlay
  5. Optionally burns subtitles into video with ffmpeg

Display Layout

The overlay shows a bottom-left panel with two rows:

Row 1: TIME | SPLIT | S/M Row 2: METERS | WATTS | BPM

During rest intervals, the overlay displays:

  • Previous lap statistics
  • Rest countdown timer
  • Visual tinting and border highlighting

License

MIT

Metadata

Release files for c2-overlay 0.2.0

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

Source distribution (sdist)

Source distribution for c2-overlay 0.2.0
File Size Uploaded
c2_overlay-0.2.0.tar.gz 30.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for c2-overlay 0.2.0
File Interpreter ABI Platform
c2_overlay-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 55.0 kB

Release files / c2_overlay-0.2.0.tar.gz

Download URL c2_overlay-0.2.0.tar.gz
Size 30.4 kB
Tags Source
SHA-256 checksum
How to use checksums
9194a8ee4cd160124d0e385f1b51772be7535d4d9dc05f75045a4d8e3c5f9634
BLAKE2b-256 checksum
How to use checksums
cf90983a50e22ebcf71e210a05c61affb8d51fed12f13aca1fc749dfbc9dc280
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.3

Release files / c2_overlay-0.2.0-py3-none-any.whl

Download URL c2_overlay-0.2.0-py3-none-any.whl
Size 24.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e240d15785edce29519bbdfdf7460b8ac71db15c538ba5ab8ec7a89bfc8df612
BLAKE2b-256 checksum
How to use checksums
3b7d9b15b5ba059be4a00d4c1fcec90a81cb2a259a97d49f7110d393e5dd081d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.6.3

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.0

2 release files

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