init:
Runs once for a pixel. Set the initial orbit value and any helper variables here.
Learn how canonical FRM-like v1 Definitions power published Standard formulas, then use the separate Classic-compatible Editor examples without confusing the two source contracts.
FractalPark FRM-like v1 is the canonical, typed source language behind published Standard Definitions. A Definition pins its language, standard library, NumericProfile, parameters, initial state, repeated orbit step, and continue-iteration predicate.
Classic .frm grew out of the Fractint ecosystem and remains the source contract used by the Classic-compatible standalone Editor and import pipeline. FractalPark scans and diagnoses that dialect separately; Classic source and frmSemanticsVersion 1 or 2 are not alternate spellings of canonical FRM-like v1.
For the wider project's origins and history, see the Fractint project site.
This compatibility table describes the Classic-compatible Editor and import path. Canonical published Standard Definitions use the separately versioned FRM-like v1 parser, typed IR, standard32 backend, and fixed Safety Envelope.
| Level | Meaning | Verified scope |
|---|---|---|
| Supported | Covered by compiler tests and usable without a semantic qualification. |
|
| Adapted | Accepted with a documented semantic difference or as a FractalPark extension. |
|
| Unsupported | Not preserved by the current compiler or file workflow; rejected rather than silently rewritten. |
|
This is a tested Classic compatibility baseline, not a claim of full Fractint compatibility. It is separate from the Standard publication ledger.
These Classic-import capability counts come from the versioned compatibility manifest: 588 target entries comprise 579 strict-v2 passes and 9 documented waivers; 117 separate entries are excluded with stable reasons. They do not count published FRM-like v1 Definitions.
Parameters: p1, p2, p3, p4, p5 · Function slots: fn1, fn2, fn3, fn4
Capability manifest v1 · strict semantics v2
Canonical FRM-like v1 and the current Classic Editor examples share a named formula and the init, loop, and bailout ideas, but their complete grammars are different. In v1, semantic directives and an optional typed parameters section are also part of the Definition.
Runs once for a pixel. Set the initial orbit value and any helper variables here.
Runs once per iteration. Update z and any state that the next iteration needs.
Returns the condition for continuing the orbit. When it becomes false, the point has escaped.
The section names are structural, not comments: omitting or misspelling one produces a diagnostic.
Both surfaces stay deliberately small. The summaries below are shared concepts; use a published Formula Record's Source action for canonical directives and typed parameters, and use the Editor diagnostics for Classic source.
FractalPark never pastes source text into a shader. Canonical v1 source flows through its typed parser and CPU/GLSL backend; Classic Editor source flows through its scanner, selected-entry frontend, canonical formula model, and plugin compiler.
The exact text from the editor, paste, or local file is the authoritative input.
The lexer recognizes names, numbers, operators, section markers, comments, and directives while retaining source locations.
The parser builds a structured formula tree and reports malformed declarations, expressions, and control-flow blocks.
The validator checks names, types, sections, and supported semantics before a canonical formula is created.
Code generation emits shader functions and records mappings from generated GLSL back to FRM source.
A successful compile becomes the same formula-plugin contract used by the renderer and shader assembly system.
Each source contract has one implementation path of its own. Published Standard runtime uses FRM-like v1; the standalone Editor and current custom-formula examples use the Classic-compatible path. Neither silently falls back to the other.
These are Classic-compatible Editor examples, not canonical FRM-like v1 Definitions. They advance from a small quadratic formula to parameters and stateful feedback; every source block comes from the shared Editor registry and compiles during tests.
Lesson 1
The smallest escape-time formula, useful for learning the init / loop / bailout structure first.
Focus: the declaration and the init / loop / bailout structure. Change the exponent or escape threshold only after this version compiles.
StarterBrot {
init:
z = 0
loop:
z = z^2 + c
bailout:
|z| < 4
}Lesson 2
Demonstrates p1 / p2 parameter slots and the difference between cabs and |z|.
Focus: p1 and p2 parameter slots, a complex literal, and cabs(z) as an explicit magnitude function.
ParameterDrift {
init:
z = 0
loop:
z = z^2 + c + p1 * 0.15 + p2 * (0.05, -0.02)
bailout:
cabs(z) < 8
}Lesson 3
Uses zPrev as feedback memory and pairs well with orbitEcho coloring for orbit envelopes.
Focus: zPrev as the previous orbit state. Feedback adds memory without introducing a second manually managed state variable.
OrbitEcho {
init:
z = pixel
loop:
z = sqr(z) + zPrev * (0.30, -0.12) + pixel * (0.85, 0.0)
bailout:
|z| < 48
}The standalone FRM Editor opens these Classic-compatible, compile-checked examples by stable ID. Formula source stays in the current tab until you save it to your cloud library and is never embedded in the URL. This does not activate canonical v1 import or writers.
Compilation stops at the earliest unsafe stage and reports source-oriented messages. A rejected construct is never rewritten into something that merely looks similar.
Unexpected characters and unsupported identifiers are reported with their line and column.
Malformed sections, expressions, or control-flow blocks are diagnosed before semantic validation.
Unknown variables, invalid assignments, type mismatches, and unsupported semantics prevent code generation.
Generated GLSL retains mappings that can point a shader compilation failure back to the originating FRM location.
When fixing an error, start with the first reported message: later diagnostics can be consequences of the same missing token or invalid expression.
A formula you write is private until you choose otherwise. There are three ways it can travel — each explicit, none silent.
Private by default
Formulas live in your cloud library, visible only to you. Artworks you save carry a copy of the formula source inside the draft, so they always open the way you left them.
Download the .frm file
Your formula is plain text. Download it from My Formulas any time and keep your own copy — no export request, no waiting.
Publish an artwork, share the source
Publishing an artwork that uses your formula makes the formula source public under the MIT License: anyone may read, copy, and build on it. The community page shows the formula name from its metadata and offers the source as a download. This cannot be undone for that publication.
The full MIT License text lives at opensource.org.
Open Explore to compare built-in formula behavior, coloring, transforms, animation, and export controls before writing a custom formula.
Open ExploreUse the dedicated FRM Editor for the current Classic-compatible compile, preview, import, and download workflow. It does not accept canonical FRM-like v1 source; inspect published v1 source from a Formula Record and use that Record's Open or Remix action to run it.
Historical context and implementation details are linked separately so the guide can distinguish the Fractint lineage from FractalPark's current compiler contract.