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).

python3 -m pip install framecredit

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.1.tar.gz (36.0 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.1-py3-none-any.whl (29.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: framecredit-0.1.1.tar.gz
  • Upload date:
  • Size: 36.0 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.1.tar.gz
Algorithm Hash digest
SHA256 1cf36dc38b3364828fa2b8e5eb86d2a229036f09972c4825365ca63c7d4e2dc2
MD5 82da6af4a96c27d950895540eb2dc283
BLAKE2b-256 9fb8da0378abe477717e846f06ef89fec6f7508c40bf042168cbcbd45df59213

See more details on using hashes here.

File details

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

File metadata

  • Download URL: framecredit-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 29.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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f430175669044666f138f649d9cd61cda85548f4ab239af349f4f5d7a13e8368
MD5 31b1e8223cc280b78adf28a9a878ed2f
BLAKE2b-256 f95c6f391a93ccf3384106f234496985334a749765035c4066ec4986f03caaed

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