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 · 简体中文

Quick start

Requires Python 3.11+ and ffmpeg/ffprobe on PATH (brew install ffmpeg / apt install ffmpeg).

git clone https://github.com/huaruic/framecredit.git
cd framecredit
python3 -m pip install -e .

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.0.tar.gz (35.6 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.0-py3-none-any.whl (29.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: framecredit-0.1.0.tar.gz
  • Upload date:
  • Size: 35.6 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.0.tar.gz
Algorithm Hash digest
SHA256 2a147af382573f3e60528a87af90bbdca18909c2279fe3a9233a003ada9abe7f
MD5 aabfe83ad9566b89c9ad9446db8cffca
BLAKE2b-256 62655e13e6f8f3c59172435e860dd152339c1ca10e0a099cec1ceb9f213d5d46

See more details on using hashes here.

File details

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

File metadata

  • Download URL: framecredit-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 29.0 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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 93fb533452f0cf4354f69095dee643e33db325a821bdf1e6b2b5e2e64efa243d
MD5 372c266d4a37a80a37f64af48facd235
BLAKE2b-256 d54ff52c5c23fced96cccd7827149899dca8ff830d0b04bd9147492c1d17be57

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