Skip to main content

Burn your X handle into your videos before you publish, so reposted copies still credit you. Local-only video attribution.

Project description

FrameCredit

Burn your X handle into every frame of your video before you publish, so reposted copies still credit you.

ci License: AGPL-3.0 Python 3.11+

When your video gets downloaded and re-uploaded on X (Twitter), the repost usually keeps everything except one thing: you. FrameCredit renders a compact, outlined X · @yourhandle Creator Marker into the video pixels themselves. Unlike metadata or a static logo in one corner, the marker survives re-encoding and travels with every copy, and it alternates between the two top corners every 30 seconds so no part of your content is permanently covered.

Everything runs on your own machine. No accounts, no uploads, no cloud.

FrameCredit local app with a Source Video loaded and the Creator Marker preview visible

Website · FAQ · Changelog · 简体中文

Install

FrameCredit needs ffmpeg/ffprobe on PATH. The uv route below also manages Python for you; if you already have Python 3.11+, plain pip works too.

macOS

brew install uv ffmpeg
uv tool install framecredit

Windows (PowerShell)

winget install astral-sh.uv
winget install --id Gyan.FFmpeg.Essentials -e --source winget
uv tool install framecredit

Debian/Ubuntu

sudo apt update && sudo apt install ffmpeg
curl -LsSf https://astral.sh/uv/install.sh | sh
uv tool install framecredit

With an existing Python 3.11+

python3 -m pip install framecredit

Open a new terminal, then confirm everything is ready:

framecredit --version && ffmpeg -version && ffprobe -version

Upgrade later with uv tool upgrade framecredit or python3 -m pip install -U framecredit.

Quick start

Command line - one video in, one Attributed Export out:

framecredit process input.mp4 --x-handle "@yourhandle" --output attributed.mp4

Local app - save your handle once, then drag and drop:

framecredit app

The app opens in your browser, previews the real marker on the first frame of your video, and writes Attributed Exports to ~/Movies/FrameCredit. It listens only on 127.0.0.1; your footage never leaves the machine. Keep the terminal running while you use it; Ctrl+C stops it.

What you get

  • A compact one-line X · @handle marker in transparent outlined text, readable on both light and dark footage, with no opaque panel behind it.
  • Deterministic placement: top-left for 0-30 seconds, top-right for 30-60, repeating. Nothing to configure per video.
  • Standard output: H.264 video + AAC audio MP4 that keeps the source dimensions, audio track, and duration (within 150 milliseconds), ready to upload anywhere.
  • Guardrails: still images and unreadable files fail with clear messages, existing outputs are never silently overwritten, and failed encodes never leave partial files behind.

What FrameCredit does not promise

FrameCredit is honest about its scope: the goal is Attribution Survival, not theft prevention.

  • Burned-in pixels cannot be a clickable link or a QR code.
  • A determined editor can crop, cover, or paint over any visible marker.
  • What it does do: after an ordinary repost (re-encode, light crop, added captions), viewers can still read your handle and search for you.

Contributing

Issues and pull requests welcome - see CONTRIBUTING.md. The project vocabulary lives in CONTEXT.md; architectural decisions in docs/adr/.

License

AGPL-3.0-or-later. You can use, modify, and redistribute FrameCredit freely; if you run a modified version as a network service, you must offer its source to your users under the same license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

framecredit-0.1.3.tar.gz (37.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

framecredit-0.1.3-py3-none-any.whl (30.1 kB view details)

Uploaded Python 3

File details

Details for the file framecredit-0.1.3.tar.gz.

File metadata

  • Download URL: framecredit-0.1.3.tar.gz
  • Upload date:
  • Size: 37.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for framecredit-0.1.3.tar.gz
Algorithm Hash digest
SHA256 898f998703b9e5758e74c58061a5060fff1e5048fef37558ab65a0192c7d06c5
MD5 7096d17d8973e6c11f186856c335af2c
BLAKE2b-256 07dfff328bfed0bcf171a3f6dbeb584350c918cdaad11c46870a30e15b31206e

See more details on using hashes here.

File details

Details for the file framecredit-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: framecredit-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 30.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for framecredit-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3828236e8acd021b82abc8f96886f41cc9af9ca69dbcab29328d353cd6279d1f
MD5 20772c9bc05fbb4ce50935424a3a4770
BLAKE2b-256 fb58368ba65560d78e1318ed69569f66a2efee4de4abc095d146939faabb7704

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page