Skip to main content

GPL H.264 encoder worker for Spiral production video transcoding

Project description

spiral-h264

spiral-h264 is the GPL encoder worker for Spiral video transcoding. It uses the patched x264 fork as a git submodule and exposes a narrow CLI that accepts raw Y4M frames plus a JSON encode schedule, then emits an Annex B H.264 stream and JSONL sample metadata.

The user-facing APIs, frame graph selection, ffmpeg orchestration, MP4 muxing/packing, indexing, and Spiral expressions live in pyspiral / SpiralDB. This package should stay limited to the x264 encode boundary.

It deliberately does not demux source containers, run ffmpeg, mux MP4, pack prefix-readable artifacts, or build Spiral indexes. Those steps stay in the permissive SpiralDB/pyspiral codebase.

CLI

spiral-h264 encode-y4m \
  --config encode.json \
  --annex-b out.h264 \
  --metadata samples.jsonl \
  < input.y4m

--input-y4m path may be used instead of stdin.

The config JSON is intentionally small and mirrors x264 encoder controls plus the scheduled frame IR:

{
  "frame_ir": "schedule.json",
  "keyint": 120,
  "keyint_min": 120,
  "bframes": 15,
  "crf": 25,
  "preset": "medium",
  "scenecut": 0,
  "b_adapt": 0,
  "b_pyramid": "normal",
  "open_gop": false,
  "rc_lookahead": 40,
  "threads": 4,
  "x264_extra_params": "weightp=0:mbtree=0",
  "x264_layer_qps": "0=22,1=23,2=24,3=30,4=34"
}

samples.jsonl starts with one stream record, followed by one record per sample:

{"type":"stream","width":1280,"height":720,"fps_num":30,"fps_den":1}
{"type":"sample","sample_index":0,"byte_offset":693,"byte_len":1312,"pts":0,"dts":0,"duration":1,"is_keyframe":true,"picture_type":1,"display_frame":0,"decode_order":0,"temporal_layer":0,"max_ref_layer":0,"frame_id":0}

Development

git submodule update --init --recursive
cargo test
cargo run -- encode-y4m --help
maturin build --features python
python scripts/check_cargo_licenses.py

ffmpeg is not bundled. SpiralDB/pyspiral is responsible for invoking system ffmpeg to produce Y4M input.

Publishing

Cargo.toml is the single source of truth for the package version. The Python package version is dynamic in pyproject.toml, and maturin derives it from the Cargo package metadata.

PyPI publishing uses GitHub Actions Trusted Publishing / OIDC. No PyPI API token is stored in GitHub. Publishing runs from .github/workflows/publish.yml when a GitHub release is published, or manually through workflow_dispatch.

Configure the PyPI project trusted publisher with:

  • PyPI project: spiral-h264
  • Owner: spiraldb
  • Repository: spiral-h264
  • Workflow: publish.yml
  • Environment: pypi

Release process:

  1. Bump version in Cargo.toml.
  2. Merge the release change after CI is green.
  3. Create and publish a GitHub release tagged vX.Y.Z, matching the Cargo.toml version exactly.
  4. The publish workflow validates the tag/version match, builds macOS plus x86_64 and ARM64 manylinux wheels, builds an sdist that includes the x264 submodule source, then publishes with pypa/gh-action-pypi-publish using job-level id-token: write.

Manual workflow_dispatch is intended only for dry-run validation of the build graph; normal PyPI releases should go through a GitHub release tag.

License

This repository is GPL-2.0-or-later because it statically links the patched x264 source under third_party/x264.

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

spiral_h264-0.1.4.tar.gz (1.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_x86_64.whl (1.2 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ x86-64

spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_aarch64.whl (660.0 kB view details)

Uploaded CPython 3.11+manylinux: glibc 2.28+ ARM64

spiral_h264-0.1.4-cp311-abi3-macosx_11_0_arm64.whl (951.1 kB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

File details

Details for the file spiral_h264-0.1.4.tar.gz.

File metadata

  • Download URL: spiral_h264-0.1.4.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for spiral_h264-0.1.4.tar.gz
Algorithm Hash digest
SHA256 a573c42a46377083b606843f2c659e640123d0adef40afedbb190ef980d8f351
MD5 681af5ef53deec354c928da04436f017
BLAKE2b-256 f78643dc99b2d9d52715f4fc6ac3c2b391c6f815246087f55cf3ffa77337bf9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for spiral_h264-0.1.4.tar.gz:

Publisher: publish.yml on spiraldb/spiral-h264

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4b8951ab8e563994994eb6e825345af9069a6b87ff5924844468873b5ce09f96
MD5 32bdb78c78eedb2e8e2ecf52b6e71f3c
BLAKE2b-256 8a85ac75dd784e623b572f349e8d056cd9717f4adc3a3a23209aab3f2c8dee3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on spiraldb/spiral-h264

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 c307c15378addd8a3031e796301341bdaa76d6f8a885a52d1c710502bc24d356
MD5 9f93c35ad5feda127ac44f38b593d47f
BLAKE2b-256 e26cb6742d342c6248854fbded91867c5ace96085d796b6ab6365fc107106663

See more details on using hashes here.

Provenance

The following attestation bundles were made for spiral_h264-0.1.4-cp311-abi3-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on spiraldb/spiral-h264

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spiral_h264-0.1.4-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spiral_h264-0.1.4-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 70ceb0e0bc5e0fd6aa9dd25d15f3130dc87d7270f6e2b0133ed6ed40b7b28d8a
MD5 7f47bfdc682446ed29a943007ae0ce36
BLAKE2b-256 6b7811ebd278e598d98da732bdc51eed37ea7989e955c324ef3011e99406b878

See more details on using hashes here.

Provenance

The following attestation bundles were made for spiral_h264-0.1.4-cp311-abi3-macosx_11_0_arm64.whl:

Publisher: publish.yml on spiraldb/spiral-h264

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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