Reference

Ordered post-processing

Image effects applied after visual composition in written order, with distinct rules for replacing, preserving, restoring, or bypassing post treatment.

The :post facet of a channel form applies image effects after visual composition, in the order written. This reference covers ordering, the available stages, numeric controls, and the four ways a channel form can set post treatment.

Order matters

Post effects operate on the preceding image, in the written order. ASCII after pixelation is different from pixelation after ASCII.

Ordered image post-processing is a distinct layer after visual composition. It does not replace the shader chain that produced the image.

Available stages

Image stages include ASCII rendering, pixelation, edge glow, bloom, phosphor persistence, scanlines, and chromatic faults. The operators below are the ones that appear in the examples on this page and in Multimodal channel forms, with the keywords those examples use.

StageOperator in the examplesKeywords used in the examples
ASCII renderingmora.visual:ascii:characters
Pixelationmora.visual:pixelate:px, :py
Edge glowmora.visual:edge-glow:amount, :radius
Bloommora.visual:bloom:amount, :threshold, :radius
Phosphor persistencemora.visual:phosphor:seconds
Scanlinesmora.visual:scanlines:direction, :spacing, :thickness, :opacity
Chromatic faultsmora.visual:chromatic:trigger, :pixels

ASCII rendering is a reusable image-to-glyph post-processing path.

Each occurrence of a history effect owns its own history rather than sharing one global trail buffer.

Numeric controls

Numeric controls can be ordinary numbers, temporal patterns, or retained knobs and sliders where supported. See Inline controls.

A complete chain

This form supplies a four-stage chain. Because :audio and :viz are omitted, they are left alone:

Common Lisp
(d1! :post (>> (mora.visual:phosphor :seconds .18)
               (mora.visual:bloom :amount .35
                                  :threshold .8
                                  :radius .35)
               (mora.visual:scanlines :direction :both
                                      :spacing 5
                                      :thickness 1
                                      :opacity .15)
               (mora.visual:chromatic :trigger :kick
                                      :pixels 3)))

Replace, preserve, restore, or bypass

Supplying an explicit chain replaces a renderer’s legacy built-in post effects. It does not replace the renderer’s underlying visual object or geometry. Omission preserves the installed policy.

:post in the channel formEffect
An explicit chainReplaces the renderer’s legacy built-in post effects. The underlying visual object and geometry are unchanged.
OmittedPreserves the installed post policy.
nilRestores the renderer’s legacy treatment.
(mora.visual:post-chain)An explicit empty chain: no post effects, including legacy effects.

The distinction between removing a policy and deliberately bypassing effects is explicit:

Common Lisp
;; Restore the renderer's legacy treatment.
(d1! :post nil)

;; Use an explicit empty chain: no post effects, including legacy effects.
(d1! :post (mora.visual:post-chain))

Image processing, not audio inserts

:post is image processing. The SuperDirtMora companion has its own ordered insert effects, which form an audio chain; the similarly ordered :post chain is not another name for those audio inserts. See SuperDirtMora companion.

Source references

Repository-relative paths in the Mora source where these mechanisms are implemented.

  • src/visual/post-model.lisp
  • src/visual/post-backend.lisp
  • src/visual/ascii-post.lisp

Documentation

Search the documentation

Results update as you type. Use the up and down arrow keys to choose a result and Enter to open it.