framewright
A drop-in replacement for cv::VideoCapture and cv::VideoWriter that gives you frame-precise seeking, color space control, HDR10 writing, and lossless encoding.
Available for C++, Python, and JavaScript — Node.js and browsers via WebAssembly (see wasm/README.md).
What framewright adds over OpenCV
Reading
| Feature | OpenCV | framewright |
|---|---|---|
| Frame-precise seeking | Forward only, not frame-accurate | Forward and backward, keyframe-accelerated |
| Color space control | Opaque, implementation-defined | Explicit BT.709/BT.601 selection, full/limited range override |
| Color metadata | Not exposed | getColorSpace(), getColorRange(), getPixelFormat(), getCodecID() |
| Zero-copy frames | No | readRef() avoids per-frame clone |
| Untagged content | Implementation-defined matrix | Sensible defaults (BT.709 for HD, BT.601 for SD) |
| HDR sources (PQ/HLG) | Washed-out colors, no warning | Opt-in tone mapping to SDR, or full-precision code values via read16() |
Writing
| Feature | OpenCV | framewright |
|---|---|---|
| HDR10 output | Not supported | HEVC 10-bit with BT.2020, PQ, mastering display metadata |
| Lossless encoding | Not supported | FFV1 (RGB, no YUV loss), H.264 qp=0 with 4:4:4 |
| 10-bit SDR | Not supported | HEVC Main10 with BT.709 for high-precision intermediates |
| Color space control | Opaque | Explicit BT.709/BT.2020, full/limited range |
| QuickTime compatibility | Varies | hvc1 codec tag for Safari/QuickTime HDR playback |
Verified accuracy
Measured by reading BT.709-tagged lossless test videos with both libraries (OpenCV 4.13.0 and framewright on macOS). Both produce identical pixel values when metadata is present — framewright adds control, not a different answer:
cmake -B build -DFRAMEWRIGHT_BUILD_EXAMPLES=ON && cmake --build build
./build/compare_readers your_video.mp4
Migrating from OpenCV
framewright is a drop-in replacement. The API follows the same conventions (BGR cv::Mat frames):
Reading
// OpenCV
cv::VideoCapture cap("video.mp4");
cv::Mat frame;
cap.read(frame);
// framewright — same API, more capabilities
framewright::VideoReader reader;
reader.open("video.mp4");
cv::Mat frame;
reader.read(frame);
// seek backward (not possible with cv::VideoCapture)
reader.seek(0);
reader.read(frame);
// inspect color metadata
std::cout << "Color space: " << reader.getColorSpace() << std::endl;
std::cout << "Pixel format: " << av_get_pix_fmt_name(reader.getPixelFormat()) << std::endl;
Writing
// OpenCV
cv::VideoWriter w("out.mp4",
cv::VideoWriter::fourcc('a','v','c','1'),
30, cv::Size(1920, 1080));
w.write(frame);
// framewright — same pattern, more control
framewright::VideoWriter w;
w.open("out.mp4", AV_CODEC_ID_H264, 1920, 1080, {30, 1});
w.write(frame);
w.release();
Property mapping
| OpenCV | framewright |
|---|---|
cap.get(CAP_PROP_FRAME_WIDTH) |
reader.getWidth() |
cap.get(CAP_PROP_FRAME_HEIGHT) |
reader.getHeight() |
cap.get(CAP_PROP_FPS) |
reader.getFPS() |
cap.get(CAP_PROP_FRAME_COUNT) |
reader.getFrameCount() |
cap.get(CAP_PROP_POS_FRAMES) |
reader.getCurrentFrameNumber() |
Quick start
C++
#include <framewright/framewright.h>
// Read with correct BT.709 color conversion
framewright::VideoReader reader;
reader.open("input.mp4", /*force_bt709=*/true);
cv::Mat frame;
while (reader.read(frame)) {
// frame is BGR cv::Mat with correct pixel values
}
// Write HDR10 HEVC
framewright::VideoWriterOptions opts;
opts.pix_fmt = AV_PIX_FMT_YUV420P10LE;
opts.is_10bit = true;
framewright::VideoWriter writer;
writer.open("output.mp4", AV_CODEC_ID_HEVC, 3840, 2160,
{60000, 1001}, opts); // 59.94 fps
writer.write(hdr_frame); // CV_16UC3 BGR
writer.release();
Python
import framewright
reader = framewright.VideoReader()
reader.open("input.mp4", force_bt709=True)
for frame in reader: # numpy (H, W, 3) uint8 BGR
print(frame.shape, frame.dtype)
writer = framewright.VideoWriter()
writer.open("output.mp4", codec="h264", width=1920, height=1080, fps=30)
writer.write(frame)
writer.release()
Reading HDR video
HDR sources (BT.2020 with PQ/SMPTE 2084 or HLG transfer) always get the correct BT.2020 color matrix. Beyond the matrix you have three choices:
// 1. Display-ready SDR: linearize PQ/HLG, tone map (peak from the source's
// mastering metadata when present, 1000 nits otherwise), convert BT.2020
// primaries to BT.709, encode with BT.709 gamma.
framewright::VideoReaderOptions opts;
opts.hdr_mode = framewright::HdrMode::ToneMapSDR;
reader.open("hdr10.mp4", opts);
reader.read(frame); // CV_8UC3, looks right on an SDR display
// 2. Full-precision code values for your own pipeline: the transfer function
// is NOT applied, so PQ/HLG data stays encoded, at 16-bit precision.
reader.open("hdr10.mp4");
reader.read16(frame); // CV_16UC3; pair with getColorTransfer()/getColorPrimaries()
// 2b. Linear light for image math: transfer function removed (PQ/HLG/SDR),
// float BGR normalized so 1.0 == SDR reference white (100 nits).
// HDR highlights exceed 1.0. Primaries unchanged.
reader.readLinear(frame); // CV_32FC3
// 3. Default read() is unchanged: matrix-only conversion. For HDR sources the
// result remains HDR-encoded (washed out as sRGB) and a warning is logged.
Python: reader.open("hdr10.mp4", tone_map_hdr=True), reader.read16(),
reader.read_linear().
New to color management? docs/COLOR.md explains matrices, range, primaries, transfer functions, linear light, and tone mapping — and which framewright call gives you which.
Only codec-level color metadata is honored. Frame-level dynamic metadata (HDR10+, Dolby Vision RPUs) is ignored: Dolby Vision profile 5 content (ICtCp) decodes with approximated colors and a warning.
Building
As a dependency (CMake FetchContent)
include(FetchContent)
FetchContent_Declare(
framewright
GIT_REPOSITORY https://github.com/kmatzen/framewright.git
GIT_TAG main
)
FetchContent_MakeAvailable(framewright)
target_link_libraries(your_target PRIVATE framewright::framewright)
Standalone
mkdir build && cd build
cmake .. -DFRAMEWRIGHT_BUILD_EXAMPLES=ON
make -j$(nproc)
Python
pip install framewright
Binary wheels (Linux x86_64, macOS arm64, Windows AMD64, CPython 3.9–3.13)
bundle a statically linked, LGPL FFmpeg and OpenCV core — no system
dependencies needed. One consequence of the LGPL build: the wheels contain
no x264/x265, so H.264/HEVC writing is unavailable in wheel installs
(open() returns false with "codec not found"); reading — including all
HDR paths — and FFV1 lossless writing are fully functional. For H.264/HEVC
writing, install from source against a system FFmpeg that includes them:
pip install framewright --no-binary framewright # needs OpenCV + FFmpeg dev packages
Requirements
- C++17 compiler
- OpenCV 4.0+
- FFmpeg 4.2+ (libavformat, libavcodec, libswscale, libavutil)
Windows
Dependency lookup no longer hard-requires pkg-config (Windows has none by
default): CMake tries pkg-config first, then falls back to a plain
find_library search. The easiest way to get both dependencies is
vcpkg in manifest mode, using the vcpkg.json in this
repo:
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
cmake -B build -G Ninja `
-DCMAKE_TOOLCHAIN_FILE=.\vcpkg\scripts\buildsystems\vcpkg.cmake `
-DVCPKG_TARGET_TRIPLET=x64-windows `
-DFRAMEWRIGHT_BUILD_TESTS=ON
cmake --build build
Windows support is a recent addition (#93) and covered by CI, but is newer
than the Linux/macOS builds -- report anything that looks platform-specific.
Binary wheels are available (pip install framewright also works on
Windows) — they're built the same LGPL-only, statically-linked way as the
Linux/macOS wheels, so the same H.264/HEVC-writing caveat above applies.
Logging
By default, framewright only logs errors. To see informational output:
framewright::setLogLevel(framewright::LogLevel::Info); // See everything
framewright::setLogLevel(framewright::LogLevel::Error); // Errors only (default)
framewright::setLogLevel(framewright::LogLevel::Quiet); // Silence all output
API
framewright::VideoReader
| Method | Description |
|---|---|
open(filename, force_bt709, force_full_range) |
Open a video file with optional color space overrides |
open(filename, options) |
Open with VideoReaderOptions (color overrides + HdrMode) |
read(frame) |
Read the next frame as BGR cv::Mat (cloned, always safe) |
readRef(frame) |
Read the next frame without copying (valid until next read) |
read16(frame) |
Read as CV_16UC3 with source code values preserved (no transfer applied) |
readLinear(frame) |
Read as CV_32FC3 linear light (1.0 = SDR white, source primaries) |
hasHDR10Metadata(), getHDR10Metadata() |
HDR10 static metadata from the source (drives the tone-map peak) |
seek(frame_number) |
Seek to a frame (forward and backward) |
getPixelFormat(), getCodecID() |
Source format info |
getColorSpace(), getColorRange() |
Color metadata |
getColorPrimaries(), getColorTransfer() |
HDR-relevant color metadata |
isToneMappingActive() |
Whether read() is tone mapping this source |
getFPS(), getWidth(), getHeight() |
Video properties |
framewright::VideoWriter
| Method | Description |
|---|---|
open(filename, codec_id, w, h, fps, opts) |
Open output with full codec control |
write(frame) |
Write a BGR frame (CV_8UC3 or CV_16UC3, display-encoded) |
writeLinear(frame) |
Write a CV_32FC3 linear-light frame (PQ-encoded in HDR mode, BT.709 in SDR) |
setHDR10Metadata(metadata) |
Set mastering display / content light level |
release() |
Flush and finalize the file |
framewright::VideoWriterOptions
| Field | Default | Description |
|---|---|---|
bitrate |
25000000 | Target bitrate in bits/sec |
pix_fmt |
YUV420P | Output pixel format |
is_10bit |
false | HDR10 mode (BT.2020 + PQ) |
full_range |
false | Full range (0-255) vs limited (16-235) |
use_444 |
false | 4:4:4 chroma (no subsampling) |
lossless |
false | Mathematically lossless encoding |
Supported codecs: H.264, H.265/HEVC (8-bit and 10-bit), FFV1 (lossless RGB).
License
MIT
Metadata
Release files for framewright 0.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| framewright-0.3.1.tar.gz | 95.1 kB | Details |
Built distributions (wheels)
Total release size: 127.2 MB
Release files / framewright-0.3.1.tar.gz
| Download URL | framewright-0.3.1.tar.gz |
|---|---|
| Size | 95.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9a092133af99839b3c1ce17980e3cf18b6d67c604fa52d8760a8d14d16cbfa24
|
|
BLAKE2b-256 checksum How to use checksums |
01e04001daa5660bb1d84f1c66052be96e8280f28cb5e08333885b6cd28752bd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp313-cp313-win_amd64.whl
| Download URL | framewright-0.3.1-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
e72fd530a0f179561fd21f642bf8fd185351dead8adda3a3757a8260aba0d18e
|
|
BLAKE2b-256 checksum How to use checksums |
e5dd6201011ca1d8009f3c8f264a9460e0d30bcd0847ee4d18f08373fab6cf20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | framewright-0.3.1-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.9 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
124c087a0b035a8439e0d7ba48c58b0af70e781a3bed20f95320c1ac8b30e187
|
|
BLAKE2b-256 checksum How to use checksums |
9125e7c25ad2bf6b18e447558cd79c0c07cbe288957efa0138a24d3fbebd90d9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp313-cp313-macosx_13_0_arm64.whl
| Download URL | framewright-0.3.1-cp313-cp313-macosx_13_0_arm64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | CPython 3.13 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
684ff356b0e6ebd47eb30847a509c61aeb000302d0df5e456e106f0285a4406d
|
|
BLAKE2b-256 checksum How to use checksums |
5c483ab564f39a74c3be0581eca9b88d611d8a43c6f0c14d74a79613845e22cd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp312-cp312-win_amd64.whl
| Download URL | framewright-0.3.1-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
65965c98cbb3c5a10e302862a830a126a87ec49a956b1a02983b348a0ef998ef
|
|
BLAKE2b-256 checksum How to use checksums |
195afad42a4f4df887da2d86eb7b870b5fa3829d871445d63b87c4112cea4be7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | framewright-0.3.1-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.9 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
45512862550ecad8c811399b4e630ff566dc12687b12919fa505b5c2d372ccbf
|
|
BLAKE2b-256 checksum How to use checksums |
3d73873ccad85f929c01b6a23a31668706bc28a6f867c537325b3fa9700e1674
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp312-cp312-macosx_13_0_arm64.whl
| Download URL | framewright-0.3.1-cp312-cp312-macosx_13_0_arm64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | CPython 3.12 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8a85707334182a8eb5386375e97d3c6f76ecf29ae56aa8c1882a96e813f9911e
|
|
BLAKE2b-256 checksum How to use checksums |
9c000d459a17ea577bc96d461d3bfa6b2be06f072ae3c1d681bd9e64ec0ec0cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp311-cp311-win_amd64.whl
| Download URL | framewright-0.3.1-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a915b063114588a179eda889c7875df5af286d9547b5a641e562a387437525ba
|
|
BLAKE2b-256 checksum How to use checksums |
efcb8b431f8594e20a1adcdd70fdfaddaaf4903a4c101cbaa223c717bbfdd8be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | framewright-0.3.1-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.9 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
babdd155ca971e40fe95d5ed3e506d7a8adc5911e468aa51230939f68b48d715
|
|
BLAKE2b-256 checksum How to use checksums |
c92c9f1847662508a1e116bb8502ef32046638c3a202601e9f7da0920f877007
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp311-cp311-macosx_13_0_arm64.whl
| Download URL | framewright-0.3.1-cp311-cp311-macosx_13_0_arm64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | CPython 3.11 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8fc1edba06cdd1a78a48616cf4a5db0efc3cda103739d37246b47a392be699ce
|
|
BLAKE2b-256 checksum How to use checksums |
c9aa11419d0090e8e87b2da3f2c7eb838525a7edbffd1f57997656c35d664dc5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp310-cp310-win_amd64.whl
| Download URL | framewright-0.3.1-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4d5110d2c4658314d1afef643525908a14a949a4806765cd49fda6d57d73f344
|
|
BLAKE2b-256 checksum How to use checksums |
2a1e3f9c4affb896f02f8b7fcaa207f580c159ca76b5ea2c0a434351416739e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | framewright-0.3.1-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.9 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f0a8739806156c7f8fd125e920286cabef106b7ee2ca0249cd06be9ddfd76750
|
|
BLAKE2b-256 checksum How to use checksums |
9af1dd7027723e79642f6d515f09290d9e953f0475be4d0ebeb66f31d7d5c6a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp310-cp310-macosx_13_0_arm64.whl
| Download URL | framewright-0.3.1-cp310-cp310-macosx_13_0_arm64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | CPython 3.10 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8da7c7f2488e2e0a45acd32fe0b12b7ef391fefcdb52bd23dcfd1a6841ebef5f
|
|
BLAKE2b-256 checksum How to use checksums |
7cdbe2c2d83a0a2299243d40292710e67962ed033c8e1364b7ad6714d2e214a8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp39-cp39-win_amd64.whl
| Download URL | framewright-0.3.1-cp39-cp39-win_amd64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | CPython 3.9 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
63441cc50bb2e9e36256a2d5e43a6deb1d6a3e56e1ad2a0d0b786075c177ed5f
|
|
BLAKE2b-256 checksum How to use checksums |
fe83c7685a2eb72038d48077cb1a73cbc9aab604713d00dd665667178fdd8afa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp39-cp39-manylinux_2_28_x86_64.whl
| Download URL | framewright-0.3.1-cp39-cp39-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 8.9 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
9019b0c7bf249c6c21f3d31f866c0257d1d7deb167d0875fa0752ea5ef21dd97
|
|
BLAKE2b-256 checksum How to use checksums |
38ab7159847ca8326efba9ad56242865c280ccffb8aa9c4bab2260281bc268eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency logRelease files / framewright-0.3.1-cp39-cp39-macosx_13_0_arm64.whl
| Download URL | framewright-0.3.1-cp39-cp39-macosx_13_0_arm64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | CPython 3.9 macOS 13.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
818135e7511607bd3ce42bdc113b8a50b680f23b8733febf3ac81c39dc228769
|
|
BLAKE2b-256 checksum How to use checksums |
e94551531b133575957414d8de15782734eff2fd35af6bb271325437348e6ca2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 21, 2026.
Transparency log