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      # upgrade later with: pip install -U 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.2.tar.gz (36.1 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.2-py3-none-any.whl (29.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: framecredit-0.1.2.tar.gz
  • Upload date:
  • Size: 36.1 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.2.tar.gz
Algorithm Hash digest
SHA256 c31d7a714aa2e2cc10fce6b426ca059b0efe327b4e341983fc35b2b220893bc7
MD5 ac2c995b77953da42fdbe02b3c89ad04
BLAKE2b-256 5a0c7aa705ced61fc19377f33a2285ab33869680984479569506e61173483e1e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: framecredit-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 29.3 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 201e132a4b17ea9a0de3d0a9b9dd5024deb7644722feadb96f9ebc00d9be469e
MD5 d389f1208fd2f41fae727578eeb1192d
BLAKE2b-256 879517de5fe38f2bb6eee11dda45f2d084d5dd2a31c96c41461bad1b1b09335f

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