Options
The following provides an overview of all options available via the built-in
pl_options
system.
Global preset
preset=<default|fast|high_quality>
Override all options from all sections by the values from the given preset. The following presets are available:
default
: Default settings, tuned to provide a balance of performance and quality. Should be fine on almost all systems.fast
: Disable all advanced rendering, equivalent to passingno
to every option. Increases performance on very slow / old integrated GPUs.high_quality
: Reset all structs to theirhigh_quality
presets (where available), set the upscaler toewa_lanczossharp
, and enabledeband=yes
. Suitable for use on machines with a discrete GPU.
Scaling
upscaler=<filter>
Sets the filter used for upscaling. Defaults to lanczos
. Pass upscaler=help
to see a full list of filters. The most relevant options, roughly ordered from
fastest to slowest:
none
: No filter, only use basic GPU texture samplingnearest
: Nearest-neighbour (box) sampling (very fast)bilinear
: Bilinear sampling (very fast)oversample
: Aspect-ratio preserving nearest neighbour sampling (very fast)bicubic
: Bicubic interpolation (fast)gaussian
: Gaussian smoothing (fast)catmull_rom
: Catmull-Rom cubic splinelanczos
: Lanczos reconstructionewa_lanczos
: EWA Lanczos ("Jinc") reconstruction (slow)ewa_lanczossharp
: Sharpened version ofewa_lanczos
(slow)ewa_lanczos4sharpest
: Very sharp version ofewa_lanczos
, with anti-ringing (very slow)
downscaler=<filter>
Sets the filter used for downscaling. Defaults to hermite
. Pass
downscaler=help
to see a full list of filters. The most relevant options,
roughly ordered from fastest to slowest:
none
: Use the same filter as specified forupscaler
box
: Box averaging (very fast)hermite
: Hermite-weighted averaging (fast)bilinear
: Bilinear (triangle) averaging (fast)bicubic
: Bicubic interpolation (fast)gaussian
: Gaussian smoothing (fast)catmull_rom
: Catmull-Rom cubic splinemitchell
: Mitchell-Netravalia cubic splinelanczos
: Lanczos reconstruction
plane_upscaler=<filter>
, plane_downscaler=<filter>
Override the filter used for upscaling/downscaling planes, e.g. chroma/alpha.
If set to none
, use the same setting as upscaler
and downscaler
,
respectively. Defaults to none
for both.
frame_mixer=<filter>
Sets the filter used for frame mixing (temporal interpolation). Defaults to
oversample
. Pass frame_mixer=help
to see a full list of filters. The most
relevant options, roughly ordered from fastest to slowest:
none
: Disable frame mixing, show nearest frame to target PTSoversample
: Oversampling, only mix "edge" frames while preserving FPShermite
: Hermite-weighted frame mixinglinear
: Linear frame mixingcubic
: Cubic B-spline frame mixing
antiringing_strength=<0.0..1.0>
Antiringing strength to use for all filters. A value of 0.0
disables
antiringing, and a value of 1.0
enables full-strength antiringing. Defaults
to 0.0
.
Note
Specific filter presets may override this option.
Custom scalers
Custom filter kernels can be created by setting the filter to custom
, in
addition to setting the respective options, replacing <scaler>
by the
corresponding scaler (upscaler
, downscaler
, etc.)
<scaler>_preset=<filter>
Overrides the value of all options in this section by their default values from the given filter preset.
<scaler>_kernel=<kernel>
, <scaler>_window=<kernel>
Choose the filter kernel and window function, rspectively. Pass help
to
get a full list of filter kernels. Defaults to none
.
<scaler>_radius=<0.0..16.0>
Override the filter kernel radius. Has no effect if the filter kernel
is not resizeable. Defaults to 0.0
, meaning "no override".
<scaler>_clamp=<0.0..1.0>
Represents an extra weighting/clamping coefficient for negative weights. A
value of 0.0
represents no clamping. A value of 1.0
represents full
clamping, i.e. all negative lobes will be removed. Defaults to 0.0
.
<scaler>_blur=<0.0..100.0>
Additional blur coefficient. This effectively stretches the kernel, without
changing the effective radius of the filter radius. Setting this to a value of
0.0
is equivalent to disabling it. Values significantly below 1.0
may
seriously degrade the visual output, and should be used with care. Defaults to
0.0
.
<scaler>_taper=<0.0..1.0>
Additional taper coefficient. This essentially flattens the function's center.
The values within [-taper, taper]
will return 1.0
, with the actual function
being squished into the remainder of [taper, radius]
. Defaults to 0.0
.
<scaler>_antiring=<0.0..1.0>
Antiringing override for this filter. Defaults to 0.0
, which infers the value
from antiringing_strength
.
<scaler>_param1
, <scaler>_param2
<scaler>_wparam1
, <scaler>_wparam2
Parameters for the respective filter function. Ignored if not tunable. Defaults
to 0.0
.
<scaler>_polar=<yes|no>
If true, this filter is a polar/2D filter (EWA), instead of a separable/1D
(orthogonal) filter. Defaults to no
.
Debanding
These options control the optional debanding step. Debanding can be used to reduce the prevalence of quantization artefacts in low quality sources, but can be heavy to compute on weaker devices.
Note
This can also be used as a pure grain generator, by setting
deband_iterations=0
.
deband=<yes|no>
Enables debanding. Defaults to no
.
deband_preset=<default>
Overrides the value of all options in this section by their default values from the given preset.
deband_iterations=<0..16>
The number of debanding steps to perform per sample. Each
step reduces a bit more banding, but takes time to compute.
Note that the strength of each step falls off very quickly,
so high numbers (>4) are practically useless. Defaults to 1
.
deband_threshold=<0.0..1000.0>
The debanding filter's cut-off threshold. Higher numbers
increase the debanding strength dramatically, but
progressively diminish image details. Defaults to 3.0
.
deband_radius=<0.0..1000.0>
The debanding filter's initial radius. The radius increases
linearly for each iteration. A higher radius will find more
gradients, but a lower radius will smooth more aggressively.
Defaults to 16.0
.
deband_grain=<0.0..1000.0>
Add some extra noise to the image. This significantly helps
cover up remaining quantization artifacts. Higher numbers add
more noise. Defaults to 4.0
, which is very mild.
deband_grain_neutral_r, deband_grain_neutral_g, deband_grain_neutral_b
'Neutral' grain value for each channel being debanded. Grain application will be modulated to avoid disturbing colors close to this value. Set this to a value corresponding to black in the relevant colorspace.
Note
This is done automatically by pl_renderer
and should not need to be
touched by the user. This is purely a debug option.
Sigmoidization
These options control the sigmoidization parameters. Sigmoidization is an optional step during upscaling which reduces the prominence of ringing artifacts.
sigmoid=<yes|no>
Enables sigmoidization. Defaults to yes
.
sigmoid_preset=<default>
Overrides the value of all options in this section by their default values from the given preset.
sigmoid_center=<0.0..1.0>
The center (bias) of the sigmoid curve. Defaults to 0.75
.
sigmoid_slope=<1.0..20.0>
The slope (steepness) of the sigmoid curve. Defaults to 6.5
.
Color adjustment
These options affect the decoding of the source color values, and can be used to subjectively alter the appearance of the video.
color_adjustment=<yes|no>
Enables color adjustment. Defaults to yes
.
color_adjustment_preset=<neutral>
Overrides the value of all options in this section by their default values from the given preset.
brightness=<-1.0..1.0>
Brightness boost. Adds a constant bias onto the source
luminance signal. 0.0
= neutral, 1.0
= solid white,
-1.0
= solid black. Defaults to 0.0
.
contrast=<0.0..100.0>
Contrast gain. Multiplies the source luminance signal by a
constant factor. 1.0
= neutral, 0.0
= solid black.
Defaults to 1.0
.
saturation=<0.0..100.0>
Saturation gain. Multiplies the source chromaticity signal by
a constant factor. 1.0
= neutral, 0.0
= grayscale.
Defaults to 1.0
.
hue=<angle>
Hue shift. Corresponds to a rotation of the UV subvector
around the neutral axis. Specified in radians. Defaults to
0.0
(neutral).
gamma=<0.0..100.0>
Gamma lift. Subjectively brightnes or darkens the scene while
preserving overall contrast. 1.0
= neutral, 0.0
= solid
black. Defaults to 1.0
.
temperature=<-1.143..5.286>
Color temperature shift. Relative to 6500 K, a value of 0.0
gives you 6500 K
(no change), a value of -1.0
gives you 3000 K, and a value of 1.0
gives you
10000 K. Defaults to 0.0
.
HDR peak detection
These options affect the HDR peak detection step. This can be used to greatly improve the HDR tone-mapping process in the absence of dynamic video metadata, but may be prohibitively slow on some devices (e.g. weaker integrated GPUs).
peak_detect=<yes|no>
Enables HDR peak detection. Defaults to yes
.
peak_detection_preset=<default|high_quality>
Overrides the value of all options in this section by their default values from
the given preset. high_quality
also enables frame histogram measurement.
peak_smoothing_period=<0.0..1000.0>
Smoothing coefficient for the detected values. This controls the time parameter
(tau) of an IIR low pass filter. In other words, it represent the cutoff period
(= 1 / cutoff frequency) in frames. Frequencies below this length will be
suppressed. This helps block out annoying "sparkling" or "flickering" due to
small variations in frame-to-frame brightness. If left as 0.0
, this smoothing
is completely disabled. Defaults to 20.0
.
scene_threshold_low=<0.0..100.0>
, scene_threshold_high=<0.0..100.0>
In order to avoid reacting sluggishly on scene changes as a result of the low-pass filter, we disable it when the difference between the current frame brightness and the average frame brightness exceeds a given threshold difference. But rather than a single hard cutoff, which would lead to weird discontinuities on fades, we gradually disable it over a small window of brightness ranges. These parameters control the lower and upper bounds of this window, in units of 1% PQ.
Setting either one of these to 0.0 disables this logic. Defaults to 1.0
and
3.0
, respectively.
peak_percentile=<0.0..100.0>
Which percentile of the input image brightness histogram to consider as the
true peak of the scene. If this is set to 100
(or 0
), the brightest pixel
is measured. Otherwise, the top of the frequency distribution is progressively
cut off. Setting this too low will cause clipping of very bright details, but
can improve the dynamic brightness range of scenes with very bright isolated
highlights.
Defaults to 100.0
. The high_quality
preset instead sets this to 99.995
,
which is very conservative and should cause no major issues in typical content.
black_cutoff=<0.0..100.0>
Black cutoff strength. To prevent unnatural pixel shimmer and excessive
darkness in mostly black scenes, as well as avoid black bars from affecting the
content, (smoothly) cut off any value below this (PQ%) threshold. Defaults to
1.0
, or 1% PQ.
Setting this to 0.0
(or a negative value) disables this functionality.
allow_delayed_peak=<yes|no>
Allows the peak detection result to be delayed by up to a single frame, which
can sometimes improve thoughput, at the cost of introducing the possibility of
1-frame flickers on transitions. Defaults to no
.
Color mapping
These options affect the way colors are transformed between color spaces, including tone- and gamut-mapping where needed.
color_map=<yes|no>
Enables the use of these color mapping settings. Defaults to yes
.
Note
Disabling this option does not disable color mapping, it just means "use the default options for everything".
color_map_preset=<default|high_quality>
Overrides the value of all options in this section by their default values from
the given preset. high_quality
also enables HDR contrast recovery.
gamut_mapping=<function>
Gamut mapping function to use to handle out-of-gamut colors, including colors
which are out-of-gamut as a consequence of tone mapping. Defaults to
perceptual
. The following options are available:
clip
: Performs no gamut-mapping, just hard clips out-of-range colors per-channel.perceptual
: Performs a perceptually balanced (saturation) gamut mapping, using a soft knee function to preserve in-gamut colors, followed by a final softclip operation. This works bidirectionally, meaning it can both compress and expand the gamut. Behaves similar to a blend ofsaturation
andsoftclip
.softclip
: Performs a perceptually balanced gamut mapping using a soft knee function to roll-off clipped regions, and a hue shifting function to preserve saturation.relative
: Performs relative colorimetric clipping, while maintaining an exponential relationship between brightness and chromaticity.saturation
: Performs simple RGB->RGB saturation mapping. The input R/G/B channels are mapped directly onto the output R/G/B channels. Will never clip, but will distort all hues and/or result in a faded look.absolute
: Performs absolute colorimetric clipping. Likerelative
, but does not adapt the white point.desaturate
: Performs constant-luminance colorimetric clipping, desaturing colors towards white until they're in-range.darken
: Uniformly darkens the input slightly to prevent clipping on blown-out highlights, then clamps colorimetrically to the input gamut boundary, biased slightly to preserve chromaticity over luminance.highlight
: Performs no gamut mapping, but simply highlights out-of-gamut pixels.linear
: Linearly/uniformly desaturates the image in order to bring the entire image into the target gamut.
Gamut mapping constants
These settings can be used to fine-tune the constants used for the various gamut mapping algorithms.
perceptual_deadzone=<0.0..1.0>
(Relative) chromaticity protection zone for perceptual
mapping. Defaults to
0.30
.
perceptual_strength=<0.0..1.0>
Strength of the perceptual
saturation mapping component. Defaults to 0.80
.
colorimetric_gamma=<0.0..10.0>
I vs C curve gamma to use for colorimetric clipping (relative
, absolute
and darken
). Defaults to 1.80
.
softclip_knee=<0.0..1.0>
Knee point to use for soft-clipping methods (perceptual
, softclip
).
Defaults to 0.70
.
softclip_desat=<0.0..1.0>
Desaturation strength for softclip
. Defaults to 0.35
.
lut3d_size_I=<0..1024>
, lut3d_size_C=<0..1024>
, lut3d_size_h=<0..1024>
Gamut mapping 3DLUT size. Setting a dimension to 0
picks the default value.
Defaults to 48
, 32
and 256
, respectively, for channels I
, C
and h
.
lut3d_tricubic=<yes|no>
Use higher quality, but slower, tricubic interpolation for gamut mapping
3DLUTs. May substantially improve the 3DLUT gamut mapping accuracy, in
particular at smaller 3DLUT sizes. Shouldn't have much effect at the default
size. Defaults to no
.
gamut_expansion=<yes|no>
If enabled, allows the gamut mapping function to expand the gamut, in cases
where the target gamut exceeds that of the source. If disabled, the source
gamut will never be enlarged, even when using a gamut mapping function capable
of bidirectional mapping. Defaults to no
.
tone_mapping=<function>
Tone mapping function to use for adapting between difference luminance ranges,
including black point adaptation. Defaults to spline
. The following functions
are available:
clip
: Performs no tone-mapping, just clips out-of-range colors. Retains perfect color accuracy for in-range colors but completely destroys out-of-range information. Does not perform any black point adaptation.spline
: Simple spline consisting of two polynomials, joined by a single pivot point, which is tuned based on the source scene average brightness (taking into account dynamic metadata if available). This function can be used for both forward and inverse tone mapping.st2094-40
: EETF from SMPTE ST 2094-40 Annex B, which uses the provided OOTF based on Bezier curves to perform tone-mapping. The OOTF used is adjusted based on the ratio between the targeted and actual display peak luminances. In the absence of HDR10+ metadata, falls back to a simple constant bezier curve.st2094-10
: EETF from SMPTE ST 2094-10 Annex B.2, which takes into account the input signal average luminance in addition to the maximum/minimum.
Warning
This does not currently include the subjective gain/offset/gamma controls defined in Annex B.3. (Open an issue with a valid sample file if you want such parameters to be respected.)
bt2390
: EETF from the ITU-R Report BT.2390, a hermite spline roll-off with linear segment.bt2446a
: EETF from ITU-R Report BT.2446, method A. Can be used for both forward and inverse tone mapping.reinhard:
Very simple non-linear curve. Named after Erik Reinhard.mobius
: Generalization of thereinhard
tone mapping algorithm to support an additional linear slope near black. The name is derived from its function shape(ax+b)/(cx+d)
, which is known as a Möbius transformation. This function is considered legacy/low-quality, and should not be used.hable
: Piece-wise, filmic tone-mapping algorithm developed by John Hable for use in Uncharted 2, inspired by a similar tone-mapping algorithm used by Kodak. Popularized by its use in video games with HDR rendering. Preserves both dark and bright details very well, but comes with the drawback of changing the average brightness quite significantly. This is sort of similar toreinhard
withreinhard_contrast=0.24
. This function is considered legacy/low-quality, and should not be used.gamma
: Fits a gamma (power) function to transfer between the source and target color spaces, effectively resulting in a perceptual hard-knee joining two roughly linear sections. This preserves details at all scales, but can result in an image with a muted or dull appearance. This function is considered legacy/low-quality and should not be used.linear
: Linearly stretches the input range to the output range, in PQ space. This will preserve all details accurately, but results in a significantly different average brightness. Can be used for inverse tone-mapping in addition to regular tone-mapping.linearlight
: Likelinear
, but in linear light (instead of PQ). Works well for small range adjustments but may cause severe darkening when downconverting from e.g. 10k nits to SDR.
Tone-mapping constants
These settings can be used to fine-tune the constants used for the various tone mapping algorithms.
knee_adaptation=<0.0..1.0>
Configures the knee point, as a ratio between the source average and target
average (in PQ space). An adaptation of 1.0
always adapts the source scene
average brightness to the (scaled) target average, while a value of 0.0
never
modifies scene brightness.
Affects all methods that use the ST2094 knee point determination (currently
spline
, st2094-40
and st2094-10
). Defaults to 0.4
.
knee_minimum=<0.0..0.5>
, knee_maximum=<0.5..1.0>
Configures the knee point minimum and maximum, respectively, as a percentage of
the PQ luminance range. Provides a hard limit on the knee point chosen by
knee_adaptation
. Defaults to 0.1
and 0.8
, respectively.
knee_default=<0.0..1.0>
Default knee point to use in the absence of source scene average metadata.
Normally, this is ignored in favor of picking the knee point as the (relative)
source scene average brightness level. Defaults to 0.4
.
knee_offset=<0.5..2.0>
Knee point offset (for bt2390
only). Note that a value of 0.5
is the
spec-defined default behavior, which differs from the libplacebo default of
1.0
.
slope_tuning=<0.0..10.0>
, slope_offset=<0.0..1.0>
For the single-pivot polynomial (spline) function, this controls the
coefficients used to tune the slope of the curve. This tuning is designed to
make the slope closer to 1.0
when the difference in peaks is low, and closer
to linear when the difference between peaks is high. Defaults to 1.5
, with
offset 0.2
.
spline_contrast=<0.0..1.5>
Contrast setting for the spline
function. Higher values make the curve
steeper (closer to clip
), preserving midtones at the cost of losing
shadow/highlight details, while lower values make the curve shallowed (closer
to linear
), preserving highlights at the cost of losing midtone contrast.
Values above 1.0
are possible, resulting in an output with more contrast than
the input. Defaults to 0.5
.
reinhard_contrast=<0.0..1.0>
For the reinhard
function, this specifies the local contrast coefficient at
the display peak. Essentially, a value of 0.5
implies that the reference
white will be about half as bright as when clipping. Defaults to 0.5
.
linear_knee=<0.0..1.0>
For legacy functions (mobius
, gamma
) which operate on linear light, this
directly sets the corresponding knee point. Defaults to 0.3
.
exposure=<0.0..10.0>
For linear methods (linear
, linearlight
), this controls the linear
exposure/gain applied to the image. Defaults to 1.0
.
inverse_tone_mapping=<yes|no>
If enabled, and supported by the given tone mapping function, will perform
inverse tone mapping to expand the dynamic range of a signal. libplacebo is not
liable for any HDR-induced eye damage. Defaults to no
.
tone_map_metadata=<any|none|hdr10|hdr10plus|cie_y>
Data source to use when tone-mapping. Setting this to a specific value allows
overriding the default metadata preference logic. Defaults to any
.
tone_lut_size=<0..4096>
Tone mapping LUT size. Setting 0
picks the default size. Defaults to 256
.
contrast_recovery=<0.0..2.0>
HDR contrast recovery strength. If set to a value above 0.0
, the source image
will be divided into high-frequency and low-frequency components, and a portion
of the high-frequency image is added back onto the tone-mapped output. May
cause excessive ringing artifacts for some HDR sources, but can improve the
subjective sharpness and detail left over in the image after tone-mapping.
Defaults to 0.0
. The high_quality
preset sets this to 0.3
, which is a
fairly conservativee value and should subtly enhance the image quality without
creating too many obvious artefacts.
contrast_smoothness=<1.0..32.0>
HDR contrast recovery lowpass kernel size. Increasing or decreasing this will
affect the visual appearance substantially. Defaults to 3.5
.
Debug options
Miscellaneous debugging and display options related to tone/gamut mapping.
force_tone_mapping_lut=<yes|no>
Force the use of a full tone-mapping LUT even for functions that have faster
pure GLSL replacements (e.g. clip
, linear
, saturation
). This is a debug
option. Defaults to no
.
visualize_lut=<yes|no>
Visualize the color mapping LUTs. Displays a (PQ-PQ) graph of the active
tone-mapping LUT. The X axis shows PQ input values, the Y axis shows PQ output
values. The tone-mapping curve is shown in green/yellow. Yellow means the
brightness has been boosted from the source, dark blue regions show where the
brightness has been reduced. The extra colored regions and lines indicate
various monitor limits, as well a reference diagonal (neutral tone-mapping) and
source scene average brightness information (if available). The background
behind this shows a visualization of the gamut mapping 3DLUT, in IPT space.
Iso-luminance, iso-chromaticity and iso-hue lines are highlighted (depending on
the exact value of visualize_theta
). Defaults to no
.
visualize_lut_x0
, visualize_lut_y0
, visualize_lut_x0
, visualize_lut_y1
Controls where to draw the LUt visualization, relative to the rendered video.
Defaults to 0.0
for x0
/y0
, and 1.0
for x1
/y1
.
visualize_hue=<angle>
, visualize_theta=<angle>
Controls the rotation of the gamut 3DLUT visualization. The hue
parameter
rotates the gamut through hue space (around the I
axis), while the theta
parameter vertically rotates the cross section (around the C
axis), in
radians. Defaults to 0.0
for both.
show_clipping=<yes|no>
Graphically highlight hard-clipped pixels during tone-mapping (i.e. pixels that
exceed the claimed source luminance range). Defaults to no
.
Dithering
These options affect the way colors are dithered before output. Dithering is always required to avoid introducing banding artefacts as a result of quantization to a lower bit depth output texture.
dither=<yes|no>
Enables dithering. Defaults to yes
.
dither_preset=<default>
Overrides the value of all options in this section by their default values from the given preset.
dither_method=<method>
Chooses the dithering method to use. Defaults to blue
. The following methods
are available:
blue
: Dither with blue noise. Very high quality, but requires the use of a LUT.
Warning
Computing a blue noise texture with a large size can be very slow, however
this only needs to be performed once. Even so, using this with a
dither_lut_size
greater than 6
is generally ill-advised.
ordered_lut
: Dither with an ordered (bayer) dither matrix, using a LUT. Low quality, and since this also uses a LUT, there's generally no advantage to picking this instead ofblue
. It's mainly there for testing.ordered
: The same asordered
, but uses fixed function math instead of a LUT. This is faster, but only supports a fixed dither matrix size of 16x16 (equivalent todither_lut_size=4
).white
: Dither with white noise. This does not require a LUT and is fairly cheap to compute. Unlike the other modes it doesn't show any repeating patterns either spatially or temporally, but the downside is that this is visually fairly jarring due to the presence of low frequencies in the noise spectrum.
dither_lut_size=<1..8>
For the dither methods which require the use of a LUT (blue
, ordered_lut
),
this controls the size of the LUT (base 2). Defaults to 6
.
dither_temporal=<yes|no>
Enables temporal dithering. This reduces the persistence of dithering artifacts
by perturbing the dithering matrix per frame. Defaults to no
.
Warning
This can cause nasty aliasing artifacts on some LCD screens.
Cone distortion
These options can be optionally used to modulate the signal in LMS space, in particular, to simulate color blindiness.
cone=<yes|no>
Enables cone distortion. Defaults to no
.
cone_preset=<preset>
Overrides the value of all options in this section by their default values from the given preset. The following presets are available:
normal
: No distortion (92% of population)protanomaly
: Red cone deficiency (0.66% of population)protanopia
: Red cone absence (0.59% of population)deuteranomaly
: Green cone deficiency (2.7% of population)deuteranopia
: Green cone absence (0.56% of population)tritanomaly
: Blue cone deficiency (0.01% of population)tritanopia
: Blue cone absence (0.016% of population)monochromacy
: Blue cones only (<0.001% of population)achromatopsia
: Rods only (<0.0001% of population)
cones=<none|l|m|s|lm|ms|ls|lms>
Choose the set of cones to modulate. Defaults to none
.
cone_strength=<gain>
Defect/gain coefficient to apply to these cones. 1.0
= unaffected, 0.0
=
full blindness. Defaults to 1.0
. Values above 1.0
can be used to instead
boost the signal going to this cone. For example, to partially counteract
deuteranomaly, you could set cones=m
, cone_strength=2.0
. Defaults to 0.0
.
Output blending
These options affect the way the image is blended onto the output framebuffer.
blend=<yes|no>
Enables output blending. Defaults to no
.
blend_preset=<alpha_overlay>
Overrides the value of all options in this section by their default values from
the given preset. Currently, the only preset is alpha_overlay
, which
corresponds to normal alpha blending.
blend_src_rgb
, blend_src_alpha
, blend_dst_rgb
, blend_dst_alpha
Choose the blending mode for each component. Defaults to zero
for all. The
following modes are available:
zero
: Component will be unused.one
: Component will be added at full strength.alpha
: Component will be multiplied by the source alpha value.one_minus_alpha
: Component will be multiplied by 1 minus the source alpha.
Deinterlacing
Configures the settings used to deinterlace frames, if required.
Note
The use of these options requires the caller to pass extra metadata to incoming frames to link them together / mark them as fields.
deinterlace=<yes|no>
Enables deinterlacing. Defaults to no
.
deinterlace_preset=<default>
Overrides the value of all options in this section by their default values from the given preset.
deinterlace_algo=<algorithm>
Chooses the algorithm to use for deinterlacing. Defaults to yadif
. The
following algorithms are available:
weave
: No-op deinterlacing, just sample the weaved frame un-touched.bob
: Naive bob deinterlacing. Doubles the field lines vertically.yadif
: "Yet another deinterlacing filter". Deinterlacer with temporal and spatial information. Based on FFmpeg's Yadif filter algorithm, but adapted slightly for the GPU.
deinterlace_skip_spatial=<yes|no>
Skip the spatial interlacing check for yadif
. Defaults to no
.
Distortion
The settings in this section can be used to distort/transform the output image.
distort=<yes|no>
Enables distortion. Defaults to no
.
distort_preset=<default>
Overrides the value of all options in this section by their default values from the given preset.
distort_scale_x
, distort_scale_y
Scale the image in the X/Y dimension by an arbitrary factor. Corresponds to the
main diagonal of the transformation matrix. Defaults to 1.0
for both.
distort_shear_x
, distort_shear_y
Adds the X/Y dimension onto the Y/X dimension (respectively), scaled by an
arbitrary amount. Corresponds to the anti-diagonal of the 2x2 transformation
matrix. Defaults to 0.0
for both.
distort_offset_x
, distort_offset_y
Offsets the X/Y dimensions by an arbitrary offset, relative to the image size.
Corresponds to the bottom row of a 3x3 affine transformation matrix. Defaults
to 0.0
for both.
distort_unscaled=<yes|no>
If enabled, the texture is placed inside the center of the canvas without
scaling. Otherwise, it is effectively stretched to the canvas size. Defaults
to no
.
Note
This option has no effect when using pl_renderer
.
distort_constrain=<yes|no>
If enabled, the transformation is automatically scaled down and shifted to
ensure that the resulting image fits inside the output canvas. Defaults to
no
.
distort_bicubic=<yes|no>
If enabled, use bicubic interpolation rather than faster bilinear
interpolation. Higher quality but slower. Defaults to no
.
distort_addreess_mode=<clamp|repeat|mirror>
Specifies the texture address mode to use when sampling out of bounds. Defaults
to clamp
.
distort_alpha_mode=<none|independent|premultiplied>
If set to something other than none
, all out-of-bounds accesses will instead
be treated as transparent, according to the given alpha mode.
Miscellaneous renderer settings
error_diffusion=<kernel>
Enables error diffusion dithering. Error diffusion is a very slow and memory
intensive method of dithering without the use of a fixed dither pattern. If
set, this will be used instead of dither_method
whenever possible. It's
highly recommended to use this only for still images, not moving video.
Defaults to none
. The following options are available:
simple
: Simple error diffusion (fast)false-fs
: False Floyd-Steinberg kernel (fast)sierra-lite
: Sierra Lite kernel (slow)floyd-steinberg
: Floyd-Steinberg kernel (slow)atkinson
: Atkinson kernel (slow)jarvis-judice-ninke
: Jarvis, Judice & Ninke kernel (very slow)stucki
: Stucki kernel (very slow)burkes
: Burkes kernel (very slow)sierra-2
: Two-row Sierra (very slow)sierra-3
: Three-row Sierra (very slow)
lut_type=<type>
Overrides the color mapping LUT type. Defaults to unknown
. The following
options are available:
unknown
: Unknown LUT type, try and guess from metadatanative
: LUT is applied to raw image contentsnormalized
: LUT is applied to normalized (HDR) RGB valuesconversion
: LUT fully replaces color conversion step
Note
There is no way to load LUTs via the options mechanism, so this option only has an effect if the LUT is loaded via external means.
background_r=<0.0..1.0>
, background_g=<0.0..1.0>
, background_b=<0.0..1.0>
If the image being rendered does not span the entire size of the target, it
will be cleared explicitly using this background color (RGB). Defaults to 0.0
for all.
background_transparency=<0.0..1.0>
The (inverted) alpha value of the background clear color. Defaults to 0.0
.
skip_target_clearing=<yes|no>
If set, skips clearing the background backbuffer entirely. Defaults to no
.
Note
This is automatically skipped if the image to be rendered would completely cover the backbuffer.
corner_rounding=<0.0..1.0>
If set to a value above 0.0
, the output will be rendered with rounded
corners, as if an alpha transparency mask had been applied. The value indicates
the relative fraction of the side length to round - a value of 1.0
rounds the
corners as much as possible. Defaults to 0.0
.
blend_against_tiles=<yes|no>
If true, then transparent images will made opaque by painting them against a
checkerboard pattern consisting of alternating colors. Defaults to no
.
tile_color_hi_r
, tile_color_hi_g
, tile_color_hi_b
, tile_color_lo_r
, tile_color_lo_g
, tile_color_l_b
The colors of the light/dark tiles used for blend_against_tiles
. Defaults to
0.93
for light R/G/B and 0.87
for dark R/G/B, respectively.
tile_size=<2..256>
The size, in output pixels, of the tiles used for blend_against_tiles
.
Defaults to 32
.
Performance / quality trade-offs
These should generally be left off where quality is desired, as they can degrade the result quite noticeably; but may be useful for older or slower hardware. Note that libplacebo will automatically disable advanced features on hardware where they are unsupported, regardless of these settings. So only enable them if you need a performance bump.
skip_anti_aliasing=<yes|no>
Disables anti-aliasing on downscaling. This will result in moiré artifacts and
nasty, jagged pixels when downscaling, except for some very limited special
cases (e.g. bilinear downsampling to exactly 0.5x). Significantly speeds up
downscaling with high downscaling ratios. Defaults to no
.
preserve_mixing_cache=<yes|no>
Normally, when the size of the target framebuffer changes, or the render
parameters are updated, the internal cache of mixed frames must be discarded in
order to re-render all required frames. Setting this option to yes
will skip
the cache invalidation and instead re-use the existing frames (with bilinear
scaling to the new size if necessary). This comes at a hefty quality loss
shortly after a resize, but should make it much more smooth. Defaults to no
.
Debugging, tuning and testing
These may affect performance or may make debugging problems easier, but shouldn't have any effect on the quality (except where otherwise noted).
skip_caching_single_frame=<yes|no>
Normally, single frames will also get pushed through the mixer cache, in order
to speed up re-draws. Enabling this option disables that logic, causing single
frames to bypass being written to the cache. Defaults to no
.
Note
If a frame is already cached, it will be re-used, regardless.
disable_linear_scaling=<yes|no>
Disables linearization / sigmoidization before scaling. This might be useful
when tracking down unexpected image artifacts or excessing ringing, but it
shouldn't normally be necessary. Defaults to no
.
disable_builtin_scalers=<yes|no>
Forces the use of the slower, "general" scaling algorithms even when faster
built-in replacements exist. Defaults to no
.
correct_subpixel_offsets=<yes|no>
Forces correction of subpixel offsets (using the configured upscaler
).
Defaults to no
.
Warning
Enabling this may cause such images to get noticeably blurrier, especially when using a polar scaler. It's not generally recommended to enable this.
force_dither=<yes|no>
Forces the use of dithering, even when rendering to 16-bit FBOs. This is
generally pretty pointless because most 16-bit FBOs have high enough depth that
rounding errors are below the human perception threshold, but this can be used
to test the dither code. Defaults to no
.
disable_dither_gamma_correction=<yes|no>
Disables the gamma-correct dithering logic which normally applies when
dithering to low bit depths. No real use, outside of testing. Defaults to no
.
disable_fbos=<yes|no>
Completely overrides the use of FBOs, as if there were no renderable texture
format available. This disables most features. Defaults to no
.
force_low_bit_depth_fbos=<yes|no>
Use only low-bit-depth FBOs (8 bits). Note that this also implies disabling
linear scaling and sigmoidization. Defaults to no
.
dynamic_constants=<yes|no>
If this is enabled, all shaders will be generated as "dynamic" shaders, with
any compile-time constants being replaced by runtime-adjustable values. This is
generally a performance loss, but has the advantage of being able to freely
change parameters without triggering shader recompilations. It's a good idea to
enable this if you will change these options very frequently, but it should be
disabled once those values are "dialed in". Defaults to no
.