Skip to main content

VapourSynth expr plugin built on top of Cranelift.

Project description

cranexpr

cranexpr is like std.Expr but built on top of Cranelift. It's a VapourSynth plugin that allows one to evaluate an expression per pixel.

Examples

Median of 3 clips:

core.cranexpr.Expr([x, y, z], "x y min x y max z min max")

Flip a clip horizontally:

core.cranexpr.Expr([x], "width X - 1 - Y x[]")

3x3 box blur:

core.cranexpr.Expr([x], "x[-1,-1] x[0,-1] x[1,-1] x[-1,0] x x[1,0] x[-1,1] x[0,1] x[1,1] + + + + + + + + 9 /")

Features

  • Arithmetic: +, -, *, /, %, pow, exp, log, sqrt.
  • Trigonometry: sin, cos, tan, atan2.
  • Comparison: >, <, =, >=, <=.
  • Logical: and, or, xor, not.
  • Bitwise: bitand, bitor, bitxor, bitnot.
  • Clamping: min, max, clip (alias: clamp).
  • Rounding: floor, round, trunc.
  • Ternary (if/else): ?.
  • sgn: Returns the sign of a value (-1 if negative, 1 if positive, 0 if zero).
  • Constants:
    • width: Width of the plane.
    • height: Height of the plane.
    • N: Current frame number.
    • pi: π.
  • Stack manipulation:
    • dropN, drop: drops the top N values from the stack. drop is equivalent to drop1.
    • dupN, dup: allows a value N steps up in the stack to be duplicated. The top value of the stack has index 0 meaning that dup is equivalent to dup0.
    • swapN, swap: allows a value N steps up in the stack to be swapped. The top value of the stack has index 0 meaning that swap is equivalent to swap1. This is because swapN always swaps with the topmost value at index 0.
  • Variables:
    • var!: Pops the top value from the stack and stores it in a variable named var.
    • var@: Pushes the value of the variable var onto the stack.
  • Frame property access: clip.PropertyName.
    • Accesses a numeric frame property from the given clip.
    • If the property is missing, its value will be NaN.
    • If the property is not a numeric frame property, its value will be the first byte.
  • Relative pixel access: clip[relX, relY]:[mode].
    • Accesses a pixel relative to the current coordinate (X, Y). relX and relY must be integer constants.
    • If no suffix is provided, the edge behavior is determined by the filter's boundary parameter.
      • :c: Forces clamped boundary.
      • :m: Forces mirrored boundary.
  • Absolute pixel access: absX absY clip[]:[mode].
    • Accesses a pixel at an absolute coordinate. It pops absY then absX from the stack. These coordinates can be computed by expressions.
    • If the coordinates are not integers, they will be rounded half to even.
    • Example: X 2 / Y x[] reads the pixel at half the current X coordinate from the first clip, using the default clamp mode.
    • Boundary Suffixes:
      • :c: Forces clamped boundary.
      • :m: Forces mirrored boundary.
  • Supports any number of input clips. srcN may be used to access the N-th input clip. Shorthand aliases x, y, z, a, b, c, etc. map to src0, src1, src2, src3, src4, src5, etc., up to w being src25. Beyond that, use srcN.

Install

pip install vapoursynth-cranexpr

API

cranexpr.Expr(
  clips: vs.VideoNode | Sequence[vs.VideoNode],
  expr: str | list[str],
  format: int | None = None,
  boundary: Literal[0, 1] = 0,
) -> vs.VideoNode
  • clips — Input video nodes.
  • expr — Reverse Polish Notation (RPN) expression(s) for each plane. The expression given for the previous plane is used if the list contains fewer expressions than the input clip has planes. This means that a single expression will be applied to all planes by default.
  • format — By default the output format is the same as the first input clip's format. This can be overridden by setting this parameter.
  • boundary — Boundary mode. 0 for clamping, 1 for mirroring.

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

vapoursynth_cranexpr-0.7.0.tar.gz (94.5 kB view details)

Uploaded Source

Built Distributions

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

vapoursynth_cranexpr-0.7.0-py3-none-win_amd64.whl (4.7 MB view details)

Uploaded Python 3Windows x86-64

vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_x86_64.whl (5.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_aarch64.whl (1.1 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

vapoursynth_cranexpr-0.7.0-py3-none-macosx_13_0_arm64.whl (1.0 MB view details)

Uploaded Python 3macOS 13.0+ ARM64

File details

Details for the file vapoursynth_cranexpr-0.7.0.tar.gz.

File metadata

  • Download URL: vapoursynth_cranexpr-0.7.0.tar.gz
  • Upload date:
  • Size: 94.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for vapoursynth_cranexpr-0.7.0.tar.gz
Algorithm Hash digest
SHA256 8d03944d46bedcae703034e1fb3b3f1a60fc791342998559323b52b5a1708d7c
MD5 e808d8da09c990c8c971983e890c0b43
BLAKE2b-256 ac54fabf2c022fc0a5e9713cf831483fb1a41d1de6cc42b395a379ee8b25cb96

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.7.0.tar.gz:

Publisher: publish.yml on sgt0/cranexpr

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

File details

Details for the file vapoursynth_cranexpr-0.7.0-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.7.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 56ce00979faf998d16cab6c856821e5407ac206816fe05dbb88add023bee7108
MD5 39d9e1aaf9606ff9e12892034fd54d41
BLAKE2b-256 492ab80b3fe597f0726d51ede36cf16e491fe67d0c11ab11e48dd342bc804946

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.7.0-py3-none-win_amd64.whl:

Publisher: publish.yml on sgt0/cranexpr

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

File details

Details for the file vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e120436419f8b23195fa34fca8b4f5ba90a1124c2eddad532fe93b51410f3ac1
MD5 35da2f713001fe03200d0ce4ea68e5af
BLAKE2b-256 3fcec0589f6ad7e9f653f677ca6013a76f9b46bb944d35d8a4e7eb2fac5a9b71

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_x86_64.whl:

Publisher: publish.yml on sgt0/cranexpr

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

File details

Details for the file vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 487b5b06fde7643d62b1667aa0c65932ea70fa065cb77fc0eb9c95a1f1714573
MD5 e62a9cee4a9179228cd7c20529fe9d68
BLAKE2b-256 706a69bfc3501a67b8b7bdf62900215f272652c0b21dcb1efb9d4bf08f728414

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.7.0-py3-none-manylinux_2_28_aarch64.whl:

Publisher: publish.yml on sgt0/cranexpr

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

File details

Details for the file vapoursynth_cranexpr-0.7.0-py3-none-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.7.0-py3-none-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 0a68be5cf42e65f9ce8554576e339e75951c55d503f7702f1673dc8f26f61006
MD5 bd3ea01cc38d9500ee2c9bd91590417e
BLAKE2b-256 f7581771a09c4eea6743a67641e5d2c0e5267a07755eac38d3c48bf7ad521a80

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.7.0-py3-none-macosx_13_0_arm64.whl:

Publisher: publish.yml on sgt0/cranexpr

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