A field-dependent cinematic-optics system with sampled aperture bokeh, depth-aware focus, stray light, diffraction, measured calibration, selective masking and spectral lens character to debase perfectly good optics in post.
Why? Because all cameras are good now. Too good. Perfect modern optics is for OnlyFans - not for ABSOLUTE CINEMA!
This thing here should help make even footage shot with a phone look more vintage & cinematic. Possibly. Maybe.
Latest release: 5.36.0 BETA published on 2026.08.30
What's new: Removed bug preventing presets from doing their thing correctly, new presets, even more things actually working overall. Legacy original presets removed, can be downloaded HERE.
DaVinci ResolveApple SiliconOpenFXBETAProvided as-isFree as in beer, not speech (for now)MAY EXPLODE YOUR 'PUTERDaVinci Wide Gamut / IntermediateARRI LogC3+C4ACES AP1Some Assembly Required
Pre-Ramble
I made the original "Lens Debaser" for myself as a Power Grade some years ago because I love me some exotic dirty vintage optics. However, as an amateur hobbyist digital cinematographer & color grader I just couldn't keep justifying (to my wife, mostly) spending a fortune on more and more old glass, so I made myself a digital power grade that simulates a few of my favorite vintage optical "cine" kinks.
Now my old power grade still works, but it's quite limited. So this new thing here came to be as I was thinking about how I could turn my old jury-rigged "Lens Debaser" Power Grade into something with a bit more features - like into a single plug-in or something.
But I'm too old & lazy to start learning new SDK tricks just to program a little plugin for Resolve myself, so one night I happended to casually ask the energy-hungry Golden Calf if it could explain how the physics of chromatic aberration in vintage cinema optics work to me and it proceeded to seduced me with the virtues of it learning the OpenFX SDK for me. Next thing I knew, we were knee-deep in the science of MTF, tokens started flying - and things got seriously out of hand from there.
WARNING - Highly experimental software developed in no small part by AI: It might be full of lies, stolen IP, and broken dreams. It may explode your computer, ruin your projects, and wear your underwear when you're not at home. DOWNLOAD AND USE AT YOUR OWN RISK! No warranties, liabilities, nor support whatsoever provided. You have been warned.
Oh, and if you came here to gripe about AI stealing your job, I hear you and I get you. Can't say I disagree with you. Probably. However, this is the new lay of Darwin's land - isn't it? Insert some "always has been..." meme image here. At least I'm not pretending it's something I came up with all on my own - I'm not claiming it's something other than frivolous slop (that might actually work). If you think Sam-the-IP-Vampire-Altman's creepy crawlers stole your code for this, I want to hear from you, though.
***WARNING*** THE EXAMPLE RENDERS ON THIS PAGE MAY DIFFER FROM THE RENDERS OF THE CURRENT ACTUAL RELEASE - ONLY INCLUDED AS CREATIVE EXAMPLES, NOT REFERENCE FOR ACTUAL RELEASE ***WARNING*** (I cannot be bothered to render new previews for each incremental release...)
FAQ
Yes, this thing has waaay too many controls. Yes, the UI sucks. It's more of an escape room experience than an actual production tool. But hey, this is just the first version; It's as bad as it's ever going to be, right? Right?
Yes, the source code may probably be released at some point. Yes I'm too stupid and lazy to build and test any other versions than for Apple Silicon - for now. Sorry, maybe. This may work on other platforms - very likely not at all. You probably shouldn't even try.
Yes, I'm also too dumb and lazy to verify if the physics really maths. Does it matter? No. Yes, I'm assuming the AI is lying to me. Yes, it may very well be that I too have been (finally) dunning-krugered by Altman's Mechanical Doomsday Turk; It may all be a bunch of lies neatly designed to look and sound clever to complete fools like myself and I might have finally found my own Cottingley Fairies (maybe I should rename this to Fairies OFX?), but hey - I'm just trying to make the image look more interesting here - not trying to win a science competition.
Yes, there is no support whatsoever for this right now.
Yes, I've only tested this thing in DaVinci Resolve 21-something on MacOS / Apple Silcon. It's made and tested for Apple Metal only. For now.
Yes, you probably shouldn't use the "Molasses" output quality (unless you're on a render rig that hasn't been invented yet or you're the kind of person who enjoys watching bones petrify).
Yes, you might currently have to change to a higher-than-fast output quality setting for some of the effects to be of usable quality (e.g. too stair-steppy with some blur effects). Yes, it might be too slow to actually use in production. Yes, this thing may be based on Metal, but it hasn't been optimised. Yet.
Yes, you might have to manually crop-in on the image to remove unwanted edge defects (like "holes") depending on the amount of effects applied.
Yes, there might be undocumented features in this here thing at this stage, mostly for debugging and development purposes.
Yes, the install process for the beta is stupid. Later releases (after beta) will (probably) include dev signed binaries (need to activate my old Apple Dev ID or create a new one first) and an automated installer. For now, you have to put in a little work to make it happen. You can handle it.
Feedback
For now, I just want your feedback on what is sort of working, what sucks the most, which idiotic features that should be nixed, what's missing, what needs to be redesigned in the UI for the whole thing to actually make any kind of sense. If you give me feedback, I'll give you new updates for free.
Optical processing order
Lens Debaser currently forms a single lens image in a fixed order. The UI follows a practical workflow, while the renderer resolves the controls into these optical stages:
1Lens axis and state: Optical centre, shift, focal length, focus distance, T-stop and sensor width establish the effective lens geometry.
2Ray mapping: Lens distortion and wavelength-dependent red/blue displacement map output rays into the source image.
3Focus and pupil: Global/channel defocus, tilt or mapped focus, field curvature, aperture shape, wavefront character and MTF form the field-dependent spectral point-spread function.
4Transmission: Natural/mechanical vignetting and spectral lens shading attenuate the already mapped lens rays.
5Stray light: Bloom, ghosts, veiling glare, anamorphic streaks and diffraction are formed from scene-linear image energy.
6Global blend: Blend dissolves between the untouched source and the complete simulated lens image.
7Global mask: When enabled, the power window limits that completed result by blending it back against the untouched source.
8Output contract: Alpha/negative-value handling and outside-image sampling determine how the result is returned to Resolve in the selected working color space.
Linear, radial, elliptical, curved, dual-band and map-driven focus are defocus sources inside the lens PSF, not final gradient blurs. Lens shift changes the optical relationships used by the simulation; it does not simply translate the finished frame.
Suggested workflow: choose delivery and working-space settings; position Optical Centre; establish distortion and vignetting; choose optical character and chromatic displacement; shape focus, aperture and MTF; add extended behaviour and stray light; use Global mask and Global blend if you will; save your own settings as a preset.
How the UI is organized
The control panels are arranged for a practical workflow: Presets; Output quality with working color space and advanced quality; then the twelve numbered image-forming groups: Optical centre, Lens distortion, Vignetting, Optical character, Chromatic displacement, Focus/bokeh/blur character, MTF/contrast transfer, Extended lens behaviour, Flare/glare/diffraction, Global mask, Image handling and Global blend. Edges follows, and Estimated frame render time is last.
Subgroups keep related controls together: Focus contains Global defocus and channel spread, Aperture shape, and Blur character/wavefront. Extended lens behaviour contains the focus plane and lens shift, depth blur, lens state, field curvature and spectral lens shading. Flare separates its recipe/colour, bloom, ghosts, veil, streak and diffraction modules.
Greyed-out / whosted controls are intentionally unavailable. Duh. Enable an effects control group by selecting a ready-made recipe or "custom" from the pull-down menu. Named recipes populate their directly related controls and leave those values editable. Editing a populated value changes that group's recipe to Custom without discarding the look.
Preset loading expands groups used by the recipe and leaves unused groups contracted. Lens Debaser also supplies plain-language OFX hints (tool-tips) for controls and group headers.
Working color space == linear / log
Working color space must match the gamut and transfer function entering the Lens Debaser node. Version 5.31.0 supports DaVinci Wide Gamut / Intermediate, ARRI Wide Gamut 3 / LogC3 at EI 800, ARRI Wide Gamut 4 / LogC4, and ACES AP1 / ACEScct. DaVinci Wide Gamut / Intermediate is the default.
Lens Debaser decodes the selected transfer function, performs energy-changing optics in scene-linear RGB using the corresponding working gamut, and encodes the result back into the same transfer function. It never converts the output to Rec.709 or another display space; Resolve remains responsible for timeline and output colour management.
A mismatch will probably produce unwanted results. Select the actual color space entering the node with this OFX applied.
Bloom, glare and diffraction derive a single gamut-correct linear-luminance highlight mask and carry the source RGB proportions through it, avoiding separate per-channel thresholding and the associated artificial wide-gamut colour shifts.
Controls / Effects
Controls are evaluated in optical order. Geometry determines where each RGB proxy wavelength lands; the spectral PSF (Point Spread Function) determines how energy spreads around that location; Blend is applied only after the simulated lens image has been formed.
Portable preset files
Preset
Shows Custom until a preset has been loaded or saved. After Lens Debaser learns a preset folder, the menu lists every .ldpreset in that folder. Selecting a name loads that file immediately. If the current settings no longer matches that of the loaded preset, the menu returns to custom.
Load preset…
Opens a native file browser immediately. Select an existing .ldpreset and click Load. Lens Debaser applies every eligible optical, color-contract, sampling, edge, mask-shape and measured-data-path setting, remembers that folder, and populates the Preset menu with its other preset files. The many control changes are applied as one render batch, so Resolve should calculate one completed look rather than queueing an intermediate frame for every changed control.
Save preset…
Opens a native save browser immediately. Enter a name and select the destination folder; .ldpreset is appended automatically. The file is written atomically so an interrupted write cannot leave a partial preset. The saved look becomes active and its folder populates the Preset menu.
30 included ready-made presets
Included preset catalog
Just some random-ass presets to get you started and kinda showcase how things work together to get you started. Remember to save your own presets once you've arrived at an effect you are particularly pleased about - you're never going to be able to remember all these settings.
Restrained starting points: presets 01–10 combine modest optical character with a usable focus region.
Creative vintage interpretations: presets 11–20 push curved fields, anamorphic behavior, coating faults, decentering and flare while retaining intentional focus.
Additional specialty behavior: presets 21–30 explore projector, reflex, early Tessar-style, hazed cement, retrofocus, oval, stopped-iris, reverse-field and rehoused-lens impressions.
These are just some artistic approximations of optical behaviors, not based on scientific measurements of actual lenses. Every supplied preset uses field-dependent optics or selective focus where blur is required. All in-use control groups open / expand after loading a preset.
***WARNING*** THE EXAMPLES RENDERED BELOW MAY DIFFER FROM THE RENDERS OF THE CURRENT ACTUAL RELEASE - ONLY INCLUDED AS CREATIVE EXAMPLES, NOT REFERENCE FOR ACTUAL RELEASE ***WARNING*** (I cannot be bothered to render new previews for each incremental release...)
Each example image below is rendered from the complete preset file using the default Faster quality output setting.
The complete control / effects reference
The following order and nesting mirror the Lens Debaser UI, moving from top to bottom when building a debased optical look.
Output quality
Sets delivery sampling and tells Lens Debaser how to interpret the colour-managed image entering the node.
Delivery quality
Faster / Medium / MolassesDefault Faster
Chooses the pupil and wavelength sampling used for settled full-resolution renders and exports. Interactive and host-draft requests use the responsive preview path, aka preview uses a fast mode even if you set delivery quality to insanely high. The delivery quality setting only applies to the delivered / rendered image.
Working color space
Should match the gamut and transfer function entering this OFX node: DaVinci Wide Gamut / Intermediate, ARRI Wide Gamut 3 / LogC3, ARRI Wide Gamut 4 / LogC4, or ACES AP1 / ACEScct. Lens Debaser performs its tricks in linear and returns the same selected space without a display conversion to say rec709.
Advanced quality
Minimum spectral samples
Automatic follows Delivery quality: Faster uses at least 3, Medium at least 7 and Molasses 11 wavelength samples. A manual 3, 7 or 11 raises the minimum without changing the selected Delivery quality. Interactive adjustment remains optimized for responsiveness.
1 · Optical centre
Positions the common optical axis used by radial distortion, chromatic displacement, field falloff and other lens-centred behaviour.
Optical centre X / Y
Default 0.5 / 0.5Range 0…1 normalized
Defines the zero-displacement point and center of the field model. X runs from left to right; Y runs from bottom to top. At the optical centre, lateral color displacement and field-dependent MTF loss are minimal.
Visible result: moving the centre shifts the cleanest part of the image and makes opposite frame edges behave differently. Small offsets suggest mechanical decentering; extreme values place the implied lens axis outside the recorded frame.
2 · Lens distortion
Changes image geometry before the lens blur and transmission stages are formed.
Lens distortion
Default None6 choices
Selects the geometric mapping model. None leaves image geometry unchanged. Barrel bends straight lines away from the frame centre and compresses peripheral magnification. Pincushion bends them inward and increases peripheral magnification. Moustache / Wave combines opposing low- and high-order radial terms so curvature can reverse between the middle field and corners. Anamorphic Barrel supplies a barrel-dominant model with a small asymmetric component. Custom enables the four coefficient controls below.
Illustration: the example selects Moustache / Wave so the change in curvature is legible in both architecture and the chart. Named choices are modeled creative profiles, not measurements of specific lenses.
Distortion strength
Default 1Range 0…2
Multiplies every coefficient supplied by the selected preset or Custom controls. Zero is geometrically neutral, one applies the coefficients as defined, and two doubles them. It does not scale chromatic displacement, blur, MTF, or wavefront terms.
Illustration: Barrel is shown at 50% strength. Use this control to retain a model's characteristic shape while reducing or exaggerating its overall geometric displacement.
Radial distortion K1
Custom default 0Range −1…1Editable when active
Controls the primary radial term, whose displacement grows with squared normalized distance from Optical Centre. Positive values produce the plug-in's barrel mapping; negative values produce pincushion mapping. K1 normally establishes the dominant direction and strength of curvature.
Interaction: Optical Centre X/Y positions the symmetry axis. Pixel aspect and render scale normalize the field before K1 is evaluated.
Radial distortion K2
Custom default 0Range −1…1Editable when active
Controls the higher-order radial term, whose influence grows with the fourth power of radius. It is comparatively quiet near the centre and increasingly dominant near the corners. Combining K2 with an opposing K1 produces moustache or wave distortion with a curvature reversal.
Illustration: K2 is isolated so its corner-weighted response can be distinguished from K1.
Vertical decentering P1
Custom default 0Range −0.25…0.25Editable when active
Adds the vertically oriented tangential component of the Brown–Conrady-style mapping. It breaks perfect radial symmetry and can suggest vertical element decentering or tilt. Reversing the sign reverses the dominant vertical skew.
Starting guidance: physical-looking decentering is usually subtle. The illustration deliberately uses +0.12 so the direction is easy to identify.
Horizontal decentering P2
Custom default 0Range −0.25…0.25Editable when active
Adds the horizontally oriented tangential component. It is mathematically paired with P1 but rotates the dominant asymmetry by ninety degrees. P1 and P2 may be combined to place decentering along an arbitrary direction.
Edges and alpha: distortion can map samples outside the source. Clamp repeats border pixels; Transparent returns empty samples. The main Blend blends both RGB and the distorted alpha against the original.
3 · Vignetting
Models natural transmission falloff and mechanical edge obstruction around the optical axis.
Vignetting
Default None6 choices
Selects the transmission model. None is neutral. Natural cos⁴ approximates illumination loss caused by oblique rays. Mechanical models a soft aperture or barrel obstruction near the field edge. Vintage Combined layers moderate natural and mechanical losses. Anamorphic uses an elliptical mechanical field. Custom reads the five controls below.
Illustration: Vintage Combined reveals the difference between gradual natural shading and the stronger outer-field mechanical component.
Vignette strength
Default 1Range 0…2
Scales the selected preset or Custom loss. Zero restores uniform transmission; one uses the defined model; two doubles the natural exponent and mechanical loss in stops. Elliptical squeeze also interpolates from a circular field as strength increases.
Important: this is not the final Blend. Strength changes the transmission model itself, while Blend dissolves the fully processed image against the original.
Natural falloff
Custom default 0Range 0…2Editable when active
Controls a cos⁴-style field illumination law. Zero disables natural shading. One applies the nominal model; values above one strengthen its exponent. The response begins gently near the optical axis and grows continuously toward the corners without a discrete cutoff.
Visible result: a smooth, lens-like exposure gradient with no hard boundary. Optical Centre relocates its brightest axis.
Mechanical edge loss
Custom default 0 stopsRange 0…6 stopsEditable when active
Sets the maximum attenuation beyond the soft mechanical field stop. Because it is measured in exposure stops, 1 stop transmits one half, 2 stops one quarter, and 3 stops one eighth at full obstruction. Zero disables the mechanical component.
Interaction: Clear Field Radius decides where the obstruction begins and Edge Softness controls how gradually it reaches this maximum loss.
Clear field radius
Custom default 1Range 0.1…1.5Editable when active
Defines the normalized radius inside which the mechanical component remains clear. Lower values bring shading farther into the frame; values above one can push most or all of the transition beyond the recorded corners. It does not change natural cos⁴ falloff.
Visible result: reducing Radius changes the extent of the vignette rather than merely making the same edge darker.
Edge softness
Custom default 0.25Range 0.01…1Editable when active
Controls the radial width of the mechanical transition. Small values resemble a sharply clipped image circle; large values spread the loss broadly across the field. It has no effect when Mechanical Edge Loss is zero.
Starting guidance: broad transitions usually feel photographic. Very low softness is useful for damaged optics, extreme matte-box obstruction, or a visible image-circle edge.
Vignette squeeze
Custom default 1Range 0.5…2.5Editable when active
Changes the vignette field from circular to elliptical. One is spherical. Values above one make horizontal distance contribute more strongly, producing an aperture that closes sooner toward the left and right; values below one favor top and bottom loss.
Distinction: this shapes transmission only. Anamorphic Squeeze in Optical Character shapes chromatic and PSF field geometry, and does not automatically alter the vignette.
4 · Optical character
Coordinates anamorphic proportion, tangential dispersion and asymmetric field behaviour.
Optical character
Default Neutral5 profiles
Selects a coordinated field-geometry model:
Neutral: circular, symmetric radial dispersion.
Vintage Spherical: mild ellipticity, subtle tangential color, and an uneven field response oriented off-axis.
Anamorphic: strongly elliptical field geometry with restrained tangential separation.
Custom: identifies a profile whose individual character controls have been edited.
Editable recipe: selecting a named profile fills the controls below. You can adjust them immediately; the profile then changes to Custom without resetting your edit. Character Strength still scales the group.
Character strength
Default 1Range 0…1
Interpolates the selected character toward a neutral spherical field. Zero disables the profile's geometry without changing the profile selection; one applies its complete settings.
Workflow: choose a profile at full strength to understand its shape, then reduce Strength until the effect sits naturally in the shot.
Anamorphic squeeze
Default 1Range 0.5…2.5Editable when active
Changes the field metric from circular to elliptical before radial distance and PSF orientation are calculated. A value of 1 is spherical. Values above 1 make horizontal image displacement contribute more strongly to field height; values below 1 reduce it.
Visible result: color separation and field softness stop following perfect circles. This is not an image squeeze and does not change the frame's aspect ratio.
Tangential dispersion
Default 0Range −1…1Editable when active
Rotates wavelength displacement away from the radial field direction toward the local tangential direction. Zero is purely radial. Positive and negative settings rotate in opposite directions.
Visible result: fringes begin to curl around the optical centre. High values intentionally resemble swirl or severe asymmetric optical correction rather than ordinary lateral CA.
Field asymmetry
Default 0Range 0…0.95Editable when active
Applies an angular modulation to chromatic displacement. Zero gives equal behavior around the field. Higher values strengthen one side and weaken the opposite side, approximating decentering or uneven correction.
Interaction: Optical Centre moves the axis itself; Field Asymmetry changes response around that axis. They model related but distinct defects and can compound quickly.
Asymmetry orientation
Default 0°Range −180°…180°Editable when active
Rotates the strongest lobe of Field Asymmetry around the optical centre. It has no visible effect while Field Asymmetry is zero.
Character / wavefront influence
Character / wavefront field influence
Uniform / Radial / Linear
Limits only the character / wavefront group inside the optical model. Amount sets that group's contribution. Start and Fall-off position and soften the transition. Invert exchanges the affected and restrained sides.
Position: Use Optical Centre attaches the influence to the shared lens axis. Turn it off to use this group's independent centre and angle.
5 · Chromatic displacement
Moves the red and blue proxy wavelengths relative to green as distance from the optical centre increases.
Red edge shift
Default 1.5 pxRange −20…20 px
Sets the red channel's maximum displacement at the most distant image corner. The displacement approaches zero at the optical centre and grows according to Radial Curvature. Positive values move the sampled red image outward along the local field direction; negative values move it inward.
Visible result: opposite sides of a high-contrast edge gain red/cyan separation toward the frame perimeter. Reversing the sign exchanges the colored sides. This is lateral chromatic aberration, not blur.
Interaction: Anamorphic Squeeze changes the direction and rate of field growth; Tangential Dispersion rotates the shift away from purely radial; Blend scales the final composite, not this coordinate directly.
Blue edge shift
Default −1.5 pxRange −20…20 px
Equivalent to Red Edge Shift for the blue proxy wavelength. Green remains the spatial anchor. Opposite red and blue signs produce the familiar red/cyan and blue/yellow edge pairs of a dispersive lens.
Starting guidance: keep blue slightly larger in magnitude than red for a restrained photographic result. Equal large opposing values look more graphic and synthetic.
Radial curvature
Default 0.55Range 0…1
Blends two field-growth laws. At 0, chromatic displacement grows linearly with normalized image height. At 1, it grows cubically, keeping more of the center clean while concentrating separation near the perimeter.
Interaction: this changes where a given Red or Blue Edge Shift becomes visible, but their displayed pixel values still describe the far-corner maximum.
Chromatic field influence
Chromatic field influence
Uniform / Radial / Linear
Limits only the chromatic group inside the optical model. Amount sets that group's contribution. Start and Fall-off position and soften the transition. Invert exchanges the affected and restrained sides.
Position: Use Optical Centre attaches the influence to the shared lens axis. Turn it off to use this group's independent centre and angle.
6 · Focus, bokeh and blur character
Defines global and wavelength-dependent focus error, the pupil shape through which blur is formed, and the wavefront character of that blur.
Global defocus and channel spread
Global defocus
Default 0 pxRange 0…512 px
Adds the same base blur radius across the whole frame before selective focus sources are considered. It is independent of the Aperture shape switch, so it can use a neutral circular pupil or any selected iris character. Use it for an intentionally defocused plate, for testing a pupil shape, or as a small global softness component. Leave it at zero when the image should retain a primarily sharp focus region.
Red / Green / Blue defocus
Default 0 pxRange 0…8 px per channel
Sets the longitudinal focus error for each RGB proxy wavelength. Defocus expands both sagittal and tangential radii of that channel's local PSF. Unlike Edge Shift, it spreads energy around the mapped coordinate instead of moving the coordinate.
Visible result: unequal values create wavelength-colored softness and focus fringes around detail throughout the image. Keeping green near zero while giving red and blue small unequal radii approximates ordinary axial chromatic aberration.
Interaction: MTF40 and field loss also enlarge the PSF directionally. Because these are unified in one kernel, they do not create a second blur pass, but aggressive combinations still produce substantial softness.
Aperture shape
Aperture shape
Default OffOff / five styles / Custom
Chooses the pupil shape used by every blur source: Global defocus, RGB channel defocus, depth of field, tilt-shift focus and field curvature. Turning aperture shaping off does not disable those blur sources; it gives them a neutral circular pupil. Profiles include circular modern, six-blade vintage, eight-blade cinema, anamorphic cat-eye and soap-bubble rendering.
Editable recipes: selecting a named shape fills the iris blade, curvature, rotation, cat-eye, edge-brightness and onion-ring controls. Those values remain interactive. Editing one changes the Aperture recipe to Custom while preserving the result you made.
Blur character / wavefront
Blur Character / Wavefront
Directly after Aperture & Bokeh Shape, Blur Character selects Clean, Modern Cinema, Vintage Spherical, Anamorphic Astigmatism, Decentered Coma, Measured Lens or Custom Wavefront behavior. Primary spherical, astigmatism and coma are joined by trefoil, secondary spherical and secondary coma. These terms shape softness, highlight halos and edge smearing rather than merely adding a uniform blur radius. A visible UI note explains that adding Defocus or Bokeh Amount makes the character easier to see.
7 · MTF / contrast transfer
Controls broad contrast, fine-detail retention and sagittal/tangential separation inside the unified lens PSF.
MTF profile
Default Off6 choices
Selects coordinated contrast-transfer anchors:
Off: MTF10 = 1, MTF40 = 1, no field loss or S/T split.
Modern Cinema: high broad contrast, moderate fine-detail roll-off, mild edge loss.
Vintage Low Contrast: lower broad contrast, softer fine detail, stronger field loss and directional separation.
Anamorphic Directional: moderate detail with pronounced sagittal/tangential divergence.
Classic Soft: gentle broad transitions and strong fine-detail/edge roll-off.
Custom: reads the four MTF controls below.
MTF strength
Default 1Range 0…1
Interpolates all values in the selected MTF profile toward a neutral optical transfer. At zero, the MTF contribution is neutral while RGB Defocus can remain active. At one, the complete profile or custom curve is used.
MTF10 contrast
Custom default 0.9Range 0…1.2Editable when active
Controls the broader-frequency component of the unified PSF, conceptually corresponding to contrast measured around 10 line pairs per millimetre. Lower values blend toward a wider directional kernel, reducing macro- and mid-scale edge contrast without changing constant-area brightness.
Above 1: values between 1 and 1.2 introduce controlled contrast overshoot relative to the broad component. This is a creative extension, not passive-lens MTF, which normally remains at or below unity.
MTF40 detail
Custom default 0.65Range 0…1Editable when active
Controls fine-detail retention, conceptually corresponding to a higher spatial-frequency measurement around 40 lp/mm. One keeps the fine PSF radius at the channel's Defocus value. Lower values expand it by up to approximately two additional pixels before field-dependent terms.
Visible result: lower MTF40 reduces texture acuity and microcontrast before MTF10 noticeably changes broader forms.
MTF edge loss
Custom default 0.2Range 0…1Editable when active
Reduces fine-detail transfer quadratically with normalized image height. The optical centre is unaffected; the loss builds progressively toward the farthest corner.
Interaction: moving Optical Centre relocates the sharpest field region. Anamorphic Squeeze changes the shape of equal-loss contours.
Sagittal / tangential split
Custom default 0Range −0.75…0.75Editable when active
Separates contrast transfer along the local sagittal direction (radiating from the optical centre) and tangential direction (circling it). The separation grows toward the edge. Positive values retain more tangential than sagittal response; negative values reverse that relationship.
Visible result: fine structures with different orientations soften differently near the edge, contributing to anamorphic or astigmatic rendering character.
MTF field influence
MTF field influence
Uniform / Radial / Linear
Limits only the mtf group inside the optical model. Amount sets that group's contribution. Start and Fall-off position and soften the transition. Invert exchanges the affected and restrained sides.
Position: Use Optical Centre attaches the influence to the shared lens axis. Turn it off to use this group's independent centre and angle.
8 · Extended lens behaviour
Adds focus-plane geometry, depth-driven blur, physical lens-state coupling, field curvature and wavelength-dependent shading.
Focus plane and lens shift
Tilt / shift
Default Off7 choices
Selects a coordinated setup. Architectural Rise shifts the optical axis vertically without adding blur. Subtle Cinema Tilt introduces restrained asymmetric focus falloff. Product Tabletop keeps a near-horizontal product plane sharp. Miniature creates strong blur above and below a narrow focus band. Diagonal Swing rotates the plane and adds modest two-axis shift. Custom enables all controls below.
Tilt / shift strength
Default 1Range 0…10
At 1.0 the selected recipe appears at its intended strength. Values below one restrain it. Above one, defocus grows progressively faster so the upper range can become deliberately overwhelming, while shift and aperture anisotropy continue to increase predictably. Extreme values are creative tools, not simulations of practical lens movements.
Focus shape
Linear / Radial / Elliptical / Curved / Dual bands / Global mask / Depth / Matte
Chooses the surface that decides where the tilt/shift blur is sharp and where it grows. Linear behaves like a conventionally tilted focal plane. Radial forms a circular sharp island; Elliptical stretches that island using Focus aspect. Curved bends a linear plane to approximate field curvature. Dual bands produces two parallel focus regions for miniature and graphic effects. Global mask, external depth and external matte use an image map instead of geometry. Invert focus shape swaps the focused and blurred sides for every geometric shape while retaining the same smooth transition.
Viewer guides: Edit focus shows the selected line, curve, ring or ellipse plus its transition and lens-axis cue. Drag the blue centre/inner boundary to position and size radial or elliptical focus; drag the orange outer boundary to change falloff. Rotation uses bounded relative movement so the guide follows the pointer without jumping through repeated turns.
Invert focus shape
Swaps the focused and blurred sides of Linear, Radial, Elliptical, Curved and Dual-band geometry without changing the falloff softness. For a radial shape, normal keeps the centre focused and blurs outward; inverted blurs the centre and returns progressively to focus outside the transition.
Tilt / shift guides and editing
Show tilt / shift guides displays the cyan focus line, yellow transition boundaries, orange and blue near/far blur-radius circles, and the magenta effective lens-axis shift. Edit tilt / shift exposes viewer handles for focus position, angle, transition width and X/Y lens shift. The guides do no appear in the rendered output. Duh.
Focus line rotation
Custom default 0°Range −180°…180°
Rotates the line of sharpest focus in image space. Zero produces a horizontal focus band; 90° produces a vertical band. This is the swing/tilt orientation, not a rotation of the image itself.
Focus line position
Custom default 0Range −1…1
Moves the focus line along its perpendicular axis. Zero crosses the effective optical centre. Negative and positive values move it toward opposite sides of the frame while retaining its rotation.
Near-side blur
Custom default 0 pxRange 0…24 px
Sets maximum tilt defocus on the negative side of the focus plane. It is added to wavelength-specific defocus inside the spectral PSF, allowing near and far sides to have deliberately different focus character.
Far-side blur
Custom default 0 pxRange 0…24 px
Sets maximum defocus on the positive side. Equal near/far values create a symmetric focus band; unequal values emulate a plane whose two sides diverge differently or provide controlled creative asymmetry.
Focus transition
Custom default 0.15Range 0.01…1
Controls the width of the low-defocus zone around the focus line. Small values make focus fall away quickly; large values retain a broader sharp region and a gentler progression into blur.
Aperture anisotropy
Custom default 1Range 0.5…2.5
Redistributes the tilt PSF between its sagittal and tangential radii while approximately retaining blur area. One is neutral; non-unity values make out-of-focus detail directionally elongated.
Horizontal lens shift
Custom default 0Range −1…1
Moves the effective optical axis left or right relative to the sensor. It does not translate the image. Instead it changes which parts of the fixed frame behave as on-axis or off-axis for distortion, chromatic displacement, MTF, wavefront response and vignetting.
Vertical lens shift
Custom default 0Range −1…1
Moves that effective axis vertically. Architectural Rise uses positive vertical shift to model an elevated lens image circle while preserving the recorded frame geometry.
Shift field coupling
Custom default 1Range 0…1
Determines how strongly shift relocates the shared field centre. Zero leaves distortion, CA, MTF, wavefront and vignetting centred at Optical Centre; one couples them fully to lens shift. Intermediate values provide artistic control when full physical coupling is too aggressive.
Selects what drives depth-of-field blur. External Depth uses the OFX depth clip. Global mask reuses the plug-in power window. External matte uses the connected key/matte. Image luminance and Image alpha work directly on the Resolve Color page without another input. Near/Far remap, Invert, Focus and Focus gamma apply to every source.
Depth input and focus
The optional Depth clip accepts Alpha or RGBA float images. Linear or inverse-depth interpretation includes near/far normalization, inversion, focus depth, focus gamma, maximum blur and edge protection. The depth-derived circle of confusion enters the same aperture PSF as tilt and channel defocus.
Occlusion: depth-edge-aware gather weighting suppresses cross-depth contamination. It is not a full multilayer foreground splat, so very large foreground bokeh remains an approximation.
Lens state
Lens state and breathing
Keyframeable focal length, focus distance, T-stop and sensor width describe lens state. Breathing changes image magnification during focus pulls; focal and aperture coupling determine how strongly state modifies distortion, CA, defocus and vignetting. Modern prime, vintage breathing, wide zoom and telephoto presets provide starting behavior.
Field curvature
Field curvature
Independent sagittal and tangential focal surfaces add field-dependent defocus with adjustable radial power, asymmetry and orientation. Petzval, reverse, astigmatic and decentered presets are included.
Curvature field influence
Uniform / Radial / Linear
Limits only the curvature group inside the optical model. Amount sets that group's contribution. Start and Fall-off position and soften the transition. Invert exchanges the affected and restrained sides.
Position: Use Optical Centre attaches the influence to the shared lens axis. Turn it off to use this group's independent centre and angle.
Spectral lens shading
Spectral lens shading
Independent red, green and blue edge loss in stops creates wavelength-dependent transmission rather than spatial CA. Radial power, asymmetry and orientation support warm, cool, magenta-wide and decentered-coating shading.
9 · Flare, glare and diffraction
Builds stray-light and diffraction behaviour from scene-linear highlights after the primary lens image is formed.
Flare recipe and colour
Flare, ghosts and glare
Modern coated, vintage warm, anamorphic blue and uncoated presets coordinate thresholded bloom, mirrored reflection ghosts, ghost spacing, veiling glare, horizontal streaks and RGB coating tint. These terms are added after primary lens formation and vignetting.
Bloom
Bloom
Enable Bloom to spread scene-linear highlights. Strength controls its contribution, Radius controls its reach and Threshold decides which luminance enters the highlight pyramid.
Lens ghosts
Lens ghosts
Enable ghosts to add mirrored internal-reflection images. Ghost strength controls visibility and Ghost scale places them relative to the optical centre.
Veiling glare
Veiling glare
Adds broad low-frequency stray light that lifts the area around bright regions rather than drawing a defined reflection.
Anamorphic streak
Anamorphic streak
Adds a horizontal highlight streak tinted by the flare colour controls. It is independent of geometric anamorphic squeeze.
Diffraction
Diffraction and starbursts
Threshold, strength, ray count, radius and rotation shape aperture-driven stars. Spectral spread offsets RGB ray sampling and the Airy control adds a compact wavelength-style ring response. Presets cover six-, eight-, ten- and sixteen-ray signatures.
10 · Global mask
Acts like a Resolve power window: it blends the complete Lens Debaser result against the untouched source. It does not alter individual lens parameters.
Enable global mask
Default Off
Turns on a true final-result power window. Lens Debaser first calculates its complete optical result, including the global Blend setting, and then blends that result against the untouched source using the evaluated mask. White means complete rendered result, black means untouched source, and grey is a proportional blend. The mask no longer changes individual lens parameters.
Show guides
Default On
Shows or hides the non-rendering viewer overlay without disabling the mask. Cyan marks the clean-source boundary, yellow marks the full-effect boundary, and the white crosshair marks the centre. Turning guides off automatically stops editing and provides a completely clean image view.
Edit mask / Stop edit
Edit mask intentionally arms viewer interaction and is replaced by Stop edit while active. Orange handles adjust width and height, purple adjusts rotation, yellow adjusts fall-off, and the centre crosshair moves the mask. With editing stopped, guides remain visible but click through without changing the mask. Editing state is UI-only: it is not rendered, keyframed, exported, or stored in presets.
Invert mask
Exchanges the untouched-source and complete-effect regions after shape and falloff are evaluated.
Preview mask
Outputs the evaluated mask as grayscale for positioning. White represents full control influence and black represents neutralized influence.
Mask shape
Circle / Ellipse / Rectangle / Rounded rectangle / Linear
Selects the shared procedural mask geometry. Circle uses Width as its diameter; Ellipse and rectangular shapes use independent Width and Height; Linear creates a rotatable gradient.
Mask centre X / Y
Positions the mask independently from Optical Centre and lens shift, allowing the selective region and the implied lens axis to occupy different locations.
Mask width / height
Sets normalized dimensions. Values above one extend the mask beyond the recorded frame.
Mask rotation
Rotates ellipses, rectangles and the linear gradient around Mask Centre.
Mask fall-off
Creates one continuous smoothstep roll-off from the complete Lens Debaser result at the yellow inner guide to the untouched source at the cyan outer guide. Feather has been removed so there is one predictable transition control.
Mask expansion
Expands or contracts width and height together before falloff is evaluated. Negative values shrink the active region.
Mask strength
Scales the final window opacity. At zero the output is the untouched source everywhere; at one the white part of the mask reveals the complete Lens Debaser result. Disable the mask—not Strength—when a full-frame effect is wanted.
External mask combine
Combines the optional OFX Mask input with the procedural Global mask. Replace uses the external matte alone; Multiply intersects the two; Add combines their influence; Maximum keeps whichever mask is stronger. The result remains a final-result power window.
11 · Image handling
Defines how alpha and out-of-range scene-linear values are interpreted while forming the lens image.
Alpha handling
Identifies straight or premultiplied incoming RGB so filtering and recombination do not create dark or coloured fringes around transparency.
Negative values
Chooses whether scene-linear values below zero are preserved through the optical model or clamped. Preserve is appropriate for normal colour-managed grading; clamp only when a downstream operation requires non-negative values.
12 · Global blend
Provides the final creative restraint between the untouched source and the complete simulated lens image.
Blend
Default 1.000Range 0.000…1.000Step 0.001
Blends the fully formed Lens Debaser RGB result with the original RGB image. 0.000 is the untouched source; 1.000 is the complete simulated lens. Alpha is always preserved from the source.
Important: Blend does not weaken individual aberrations inside the physical model. It performs a final creative dissolve, so intermediate values can combine sharp original detail with softened or displaced detail.
Edges
Controls what Lens Debaser samples when distortion or a blur kernel reaches beyond the available source frame.
Edges
Default ClampClamp / Transparent
Determines how the spectral PSF samples beyond the available source rectangle. Clamp repeats the nearest border pixel and avoids black rims. Transparent returns zero RGB for out-of-bounds samples; alpha still comes from the original output coordinate.
Use Transparent when the host supplies a correctly expanded source or the image will be composited with intentional empty borders. Use Clamp for most cases.
Estimated frame render time
Measures one representative frame at the selected delivery quality and reports the actual backend used (CPU or Metal) for debugging purposes only. Disregard.
Estimate status
Shows n/a when no valid measurement exists, Queued / calculating while Resolve schedules the test, and Current when the displayed result still matches the image-forming settings.
Backend used and reason
Reports Metal or CPU for the measured frame and explains whether Metal succeeded or why automatic fallback was required. This is for debugging purposes only. Disregard.
Estimated minutes / seconds per frame
Displays the measured time as whole minutes plus remaining seconds. Changing any setting clears any previous estimates shown.
Calculate frame render time…
Requests one current frame at the selected delivery quality at any current other settings. The progress window states which delivery quality is being rendered, allows for cancellation if taking forever, a single-frame measurement for comparison of speed vs quality to help your decision process (and me debugging this thing).
Installation
Use the supplied install script. Yes, it's not kosher. Yes, you have to trust me and enter your password to install for now. Just YOLO it!
Here's how to do it manually:
Extract the Lens Debaser archive.
Move LensDebaser64.ofx.bundle into ~/Library/OFX/Plugins/.
Restart the host and rescan OFX effects if necessary.
Remove Finder metadata in Terminal (CLI) if need be:
The development bundle is ad-hoc signed, not Developer ID signed and notarized, absolutely not Kosher, for now.
Current caveats
This may all be a bunch of lies packaged to sound and look clever. I'm currently too dumb to verify if the physics maths out and I may indeed have been dunning-krugered by Altman's monkeys.
Standard OFX exchange remains 32-bit float RGBA; “64 Internal” refers to CPU optical geometry and accumulation.
Lens Debaser simulates multiple wavelengths from the image’s RGB values. Because an RGB image does not contain the original full light spectrum, spectral effects are physically informed approximations.
Built-in profiles are probably based on fiction, not real measurements from real optics.
Depth occlusion uses edge-aware gathering rather than a full multilayer foreground splat.
Metal accelerates the core model plus procedural masks, distortion, vignetting and tilt/shift. Depth, external mattes, sampled aperture bokeh, stray light, diffraction and higher-order pupil terms use CPU. CPU/Metal parity has been verified.
No color transform is performed. This is more of a feature than a limitation. Lens Debaser OFX assumes you're applying it in a scene-referred linear / log work space to work properly (like DWG/I).
Some configurations and effects may be too slow for actual use as it's not very optimised - for now.
Lens Debaser OFX is All Rights Reserved & Copyright me, Vidar Andersen for now, but this may change to e.g. CC or GPL later
That said, an actually usable version of Lens Debaser may be offered (by me) as a paid version in the future. Maybe. Probably not. Just hedging.
Made with ChatGPT 5.6 Sol / Codex, OpenFX, and Apple Xcode. If you think Sam's Monkeys stole your code, let me know. No Claude involved. For now.
***WARNING*** THE EXAMPLE RENDERS ON THIS PAGE MAY DIFFER FROM THE RENDERS OF THE CURRENT ACTUAL RELEASE - ONLY INCLUDED AS CREATIVE EXAMPLES, NOT REFERENCE FOR ACTUAL RELEASE ***WARNING*** (I cannot be bothered to render new previews for each incremental release...)