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.

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.6.0.tar.gz (93.8 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.6.0-py3-none-win_amd64.whl (4.7 MB view details)

Uploaded Python 3Windows x86-64

vapoursynth_cranexpr-0.6.0-py3-none-manylinux_2_28_x86_64.whl (5.0 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

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

Uploaded Python 3manylinux: glibc 2.28+ ARM64

vapoursynth_cranexpr-0.6.0-py3-none-macosx_11_0_arm64.whl (1.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: vapoursynth_cranexpr-0.6.0.tar.gz
  • Upload date:
  • Size: 93.8 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.6.0.tar.gz
Algorithm Hash digest
SHA256 ccbddb7ad49cfc39bb4cab4ed2996bca575d81dfd50d87058211df1ca823576c
MD5 45706553b500af9505176239eb38de75
BLAKE2b-256 6a50cbeeb8b52f981d3f8e2f3cea1f05ef2e28bb1f7a5c2a46415e7e4dbb90f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.6.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.6.0-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.6.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 adb00d766fd859da70a2c72742bbf127c1407ddf98a56c599addabd1fe7a5b70
MD5 52dffb6c9413cde03a8b6614571a7431
BLAKE2b-256 fc1464ac2994f9af39d65732dbd81807830b02e129f0acd7f599edb9952d3f93

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.6.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.6.0-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.6.0-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a6f08c04f74218e7aa6250a7c179e8de5b8edd24bf94d12895eeb222b2fed7fa
MD5 e9630af1117add42578169ba4df2b63a
BLAKE2b-256 8dcd7259f06d5e83e840f507d21e274cba1c7ef2471c2c687fa19e8e8c5805c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.6.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.6.0-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.6.0-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 90de353e1562ed093fdc1bc5bdee60749acf0165d9df194a2a093d9b60b6fc21
MD5 1d7363be7ec048f7dd18bd15304eacdf
BLAKE2b-256 4716a7d69c2728717bb03f3f7ad8bc7842937455dd1ed3a7333f24eb360e5da2

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.6.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.6.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for vapoursynth_cranexpr-0.6.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eed15edb29fc6f0ca3f44c5b47e19ebe58dce24357b56675f6df64a934373b6d
MD5 e524ed70cea3f9eaba67a1afb7c74982
BLAKE2b-256 644c1eabbaf20ef1a9ff227c17ff85f65077d1981acf00ca91e55c0b14f3054d

See more details on using hashes here.

Provenance

The following attestation bundles were made for vapoursynth_cranexpr-0.6.0-py3-none-macosx_11_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