bayerlink
Raw sensor data over an HDMI/DVI link.
FPGA boards rarely have camera connectors; nearly everything has HDMI. The bayerlink protocol treats a display link's active area as a byte container: packed raw Bayer samples, one camera line per display line, self-described by a 48-byte header (magic, version, V4L2 fourcc, geometry, frame counter, stripe and source identity for multi-link use, CRC). Real sensor data into any board with HDMI-in — no MIPI hardware, no deserialisers, no per-sensor bring-up on the receiver.
New here? GUIDE.md routes by what is on your desk — a Pi, an FPGA board, a $10 capture stick, a sensor that is not 12-bit.
PROTOCOL.md is the specification. This package is its
reference implementation, and vectors/ pins the exact bytes, so a
conforming implementation in any language never has to run this one.
Independent implementations are unrestricted and encouraged; say "speaks bayerlink v2" and you are conforming, not licensing. See TRADEMARK.md for the one thing the name asks of you.
The package
import bayerlink
frame = bayerlink.encode_frame(raw, "RGGB", frame_seq=7) # (H, W, 3) uint8 out
header, raw = bayerlink.decode_frame(captured) # and back
header.bayer_order, header.width, header.frame_seq
It runs on both ends: encoders build containers with it, and a receiver's host software decodes captured frames with the same module — one implementation to disagree with the spec, which is the fewest possible.
bayerlink.pattern carries the link-proving test patterns (counting,
gradient, checker, corners) every encoder and receiver bring-up uses;
checker and corners pin 0 and full scale, the first casualties of a
limited-range link.
Implementations
The registry lives at the end of PROTOCOL.md. Reference encoder: picam2hdmi (Raspberry Pi, every libcamera sensor). To be listed: implement the spec, pass the vectors, open an issue.
Funding
Developed independently; recurring support via
github.com/sponsors/lanserge, or write
first: s.rabykin@gmail.com. Sponsorable capability targets carry the
sponsorable label on the issue tracker
— currently the PiSP compressed payload family and the laptop replay
player. Scope is agreed in writing before work
starts; sponsored work lands in the open tree immediately, licensed like
everything else — sponsorship buys ordering and named credit, not
exclusivity. The person behind it:
serge.rabyking.com.
Licence
Apache-2.0 — chosen over MIT for two of its clauses, not for anything this project owns. Section 3 means every contributor grants implementers a licence to any patent claims their contribution would infringe: no such patents are known or claimed, and the clause is insurance FOR implementers, not an assertion by this project. Section 6 makes explicit that the licence covers the text and code, never the name (see TRADEMARK.md). A protocol meant for many independent implementers benefits from both being written down.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bayerlink-0.4.0.tar.gz.
File metadata
- Download URL: bayerlink-0.4.0.tar.gz
- Upload date:
- Size: 28.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
388462830648293100b393947f75ecf35c6e1339c93ef2c4505e70505cb577ea
|
|
| MD5 |
c1e9ade41261c51f334193feb3929709
|
|
| BLAKE2b-256 |
c9ce519ea80159db2af242dc3e443303d2d69c85dd0c6f209afb613e2106f218
|
Provenance
The following attestation bundles were made for bayerlink-0.4.0.tar.gz:
Publisher:
publish.yml on bayerlink/bayerlink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bayerlink-0.4.0.tar.gz -
Subject digest:
388462830648293100b393947f75ecf35c6e1339c93ef2c4505e70505cb577ea - Sigstore transparency entry: 2479576454
- Sigstore integration time:
-
Permalink:
bayerlink/bayerlink@8379c1060df080ff3fd657fe68ec45ab7b2910b1 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/bayerlink
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8379c1060df080ff3fd657fe68ec45ab7b2910b1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file bayerlink-0.4.0-py3-none-any.whl.
File metadata
- Download URL: bayerlink-0.4.0-py3-none-any.whl
- Upload date:
- Size: 22.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
235937a8d387b26eaa9e6adc2e3fbddf6e4c3f862061730d5c1f605fb1f3c192
|
|
| MD5 |
3136509c36a4d4431c2e9416e16bd5f6
|
|
| BLAKE2b-256 |
6818ec8de0b4a030949f533d6c291f7b8ecba07a848b1a7fb620821cf5ee4491
|
Provenance
The following attestation bundles were made for bayerlink-0.4.0-py3-none-any.whl:
Publisher:
publish.yml on bayerlink/bayerlink
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bayerlink-0.4.0-py3-none-any.whl -
Subject digest:
235937a8d387b26eaa9e6adc2e3fbddf6e4c3f862061730d5c1f605fb1f3c192 - Sigstore transparency entry: 2479576502
- Sigstore integration time:
-
Permalink:
bayerlink/bayerlink@8379c1060df080ff3fd657fe68ec45ab7b2910b1 -
Branch / Tag:
refs/tags/v0.4.0 - Owner: https://github.com/bayerlink
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8379c1060df080ff3fd657fe68ec45ab7b2910b1 -
Trigger Event:
release
-
Statement type: