Skip to content

Render and Export Settings

atom edited this page Sep 3, 2026 · 1 revision

Render and Export Settings

Render/export controls decide how long the file is, which WAV format it uses, and what final cleanup is applied. The complete settings are stored in JSON with the patch.

In Morph they live in the MORPH / EXPORT column. Bulk Random and Bulk Explorer have their own Render / File Settings controls so a search workspace can keep render/export policy separate from Morph.

For discrete wavetable-frame work, start with Creating Wavetables. For ordinary audio, see Creating Samples, Drones, Hits, Transitions, and Multisamples.

Render Unit

Cycles

Render Length is the number of nominal root cycles:

seconds = cycles ÷ Root Frequency

🎹 Use Cycles when oscillator/wavetable geometry matters.

Seconds

Render Length is direct duration.

🎹 Use Seconds for pads, drones, transitions, effects, and ordinary sample material.

Samples

Render Length is the exact total output PCM sample count.

🔧 Use Samples when a destination requires exact file geometry.

Sub-cycle and flat-output edge cases

⚠️ Renders shorter than one complete nominal root cycle are unusually sensitive to starting phase and local waveform shape. A short fragment can land entirely on a square-wave plateau or another slowly changing region and therefore be flat, nearly flat, very quiet, or silent.

Sub-cycle rendering is still valid for clicks, bursts, glitches, and exact-length work. It is simply an edge case rather than an ordinary render assumption.

Longer renders can also become flat or quiet because of very low Root/Nominal Frequency, extreme negative Pitch Offset, low Filter Cutoff, slowly changing phase relationships, restrictive Windows, modulation, attenuation, collapsed states, or deliberately silent patch settings.

Whole File DC Removal subtracts the mean of the rendered fragment. A constant fragment therefore becomes digital silence. A nearly constant fragment followed by Peak Normalisation can have a tiny residual slope or variation amplified dramatically.

When a render is unexpectedly flat or silent, try:

  • DC Removal and Normalisation Off;
  • a length of at least one complete nominal root cycle;
  • a higher Root/Nominal Frequency or Filter Cutoff;
  • different Window, modulation, patch, or Morph settings.

Default render state in v3.0

  • Render Unit: Cycles
  • Render Length: 64
  • Sample Rate: 44.1 kHz
  • Bit Depth: 16-bit PCM
  • DC Removal: Per Cycle
  • Normalisation: Per Cycle Peak
  • Headroom: 0.0 dB
  • Cycle-stepped transition: Off
  • ZIP downloads: On

Defaults are starting points, not universal recommendations.

WAV output sample rates

Public choices:

  • 44.1 kHz
  • 48 kHz
  • 88.2 kHz
  • 96 kHz
  • 176.4 kHz
  • 192 kHz

WAV output sample rate affects output PCM sample count, file size, output PCM samples per nominal root cycle, aliasing under extreme FM/Pitch Offset, and CPU/RAM load.

Typed/imported values are internally bounded more broadly, but the public choices are the supported everyday path.

Bit depths

  • 8-bit PCM
  • 12-bit PCM stored in a 16-bit WAV
  • 16-bit PCM
  • 24-bit PCM
  • 32-bit PCM

Bit depth changes amplitude quantisation/noise floor and file size. It does not set pitch or duration.

DC Removal

  • Off
  • Whole File
  • Per Cycle

Whole File removes the average across the complete render.

Per Cycle uses nominal-root-cycle blocks. In detuned/FM material that can change beating, offsets, or cross-cycle movement.

Normalisation

  • Off
  • Whole File Peak
  • Per Cycle Peak

Per Cycle can make every nominal-root-cycle block approach the same peak, which may alter natural dynamics or beating.

Crossfade branches are cleaned before the fade so Per Cycle Peak does not erase the fade curve itself.

Internal Morph cleanup versus final cleanup

🔧 Final DC Removal/Normalisation is not the only centring or level operation in every Morph algorithm.

Current one-oscillator Wavetable modes centre and peak-normalise intermediate tables. Current Spectral / FFT modes centre and peak-normalise anchors before analysis and reconstructed tables after synthesis. Comb, Warm, and Softened paths may finalise more than once.

Therefore:

  • DC Removal: Off does not guarantee that a Wavetable/Spectral Morph preserves raw endpoint DC;
  • Normalisation: Off does not guarantee raw endpoint/intermediate peak relationships;
  • final cleanup can add processing but cannot restore information already discarded earlier.

Crossfade modes are less affected because complete endpoint branches remain separate. Phase-Aligned Crossfade uses centred copies only for alignment analysis.

Headroom

Headroom is the target peak used by final normalisation. When Normalisation is Off, Headroom is disabled because it cannot affect rendered audio; the stored value is preserved and returns when normalisation is enabled again.

The range is −60 to 0 dB. Fresh default is 0.0 dB. The control shows one decimal place because stored precision is 0.1 dB.

Synced Morph, Bulk Random, and Explorer Transition / Cleanup controls follow global Normalisation. A detached workspace follows its own local state and retains its own Headroom value.

Technical note: export consistency

🔧 Morph, Bulk Random, and Explorer capture one per-file render/export job before rendering. WAV metadata and the JSON sidecar are built from that captured result rather than rereading mutable live controls afterward.

The implementation objects are not the public contract. The contract is simpler: a WAV and its matching JSON describe the same captured result.

WAV and JSON

Morph and batch exports create a mono WAV plus matching JSON sidecar. There is no ordinary WAV-only switch.

ZIP

FWG keeps batch output together with a small STORE-only ZIP writer:

  • no in-archive DEFLATE;
  • no ZIP64;
  • files are generated in browser memory before download.

⚠️ Very large batches can stress RAM, browser Blob limits, storage writes, filesystem limits, and classic WAV/RIFF limits.

Naming

Export naming has the same layout across Morph, Bulk, and Explorer but is scoped independently. Editing one workspace does not rename another workspace's next export.

Automatic preview tokens are the tokens used by the next export and rotate after successful automatic-name exports.

ZIP entry timestamps

🔧 A WAV and its JSON sidecar share the artifact pair's captured created_utc, so their ZIP entries reflect when the pair was created rather than final ZIP-build time. Explorer recipe and format.json entries receive their own creation times.

FWG writes ordinary DOS date/time fields for compatibility and an extended Unix modification timestamp for whole-second precision. Archive viewers may choose which field to display.

Resource and naming boundaries

🔧 FWG rejects unsafe jobs before large allocation. v3.0 limits one render to 24,000,000 output PCM samples and 768 MiB projected working memory; ZIP batches are limited to 512 MiB retained payload and 1 GiB projected peak memory. These are conservative browser-safety policies.

Entered names are reduced to portable ASCII using A-Z a-z 0-9 space - _ .; unsupported runs become separators, reserved names are rewritten, and generated suffixes/extensions are preserved. User stems/folders are limited to 96 bytes, final components to 128 bytes, and complete ZIP entry paths to 240 bytes.

PCM export is deterministic and undithered, including 8- and 12-bit modes.

Terminology for output geometry

🔧 The compact UI labels Sample Rate, Samples per Cycle, Samples, and Cycles remain conventional. In explanatory prose:

  • Sample Rate = WAV output sample rate;
  • Samples per Cycle = output PCM samples per nominal root cycle;
  • Samples = total output PCM samples when discussing render length;
  • Cycles = nominal root cycles unless MPC single cycles are explicitly named.

These quantities are separate from FWG's fixed 512-internal-cycle-sample table domain.

Fractured Wavetable Generator

Start here

🎹 Workspaces

🎹 Build and shape sounds

🎹 Make and keep results

🎹 Scanning and custom trajectories

Help and reference

🔧 Advanced / technical reference

Clone this wiki locally