Introducing Astrofox 2.0! This is a ground-up rewrite. The app is now a Next.js / React 19 client with a Three.js r184 render pipeline, packaged for desktop with Electron 39.
At a high level, this release adds five built-in displays, expands and reorganizes the effects library, adds direct stage transforms and per-display 3D camera and lighting controls, extends live input and reactors with desktop audio and MIDI, rebuilds image and video export, and introduces URL-installed display and effect plugins. It also adds local offline project files with legacy-project migration and missing-media relinking, a redesigned interface, nine interface languages, and GitHub-based desktop updates.
Application and project files
- The renderer is now a client-side Next.js/React application shared by the web and Electron desktop builds. The desktop build runs offline and uses a restricted preload bridge for file dialogs, window controls, storage, updates, and ffmpeg export.
- Projects are opened and saved as local files. There is no account, cloud-project, or backend requirement.
.afxremains the project extension, but newly saved projects are plain JSON rather than gzip-compressed data. Legacy gzip.afxfiles and legacy.jsonproject files can still be opened.- New and Open now check for unsaved changes and offer Save, Discard, and Cancel paths.
- The project title is editable from the title bar and Project Settings.
- Project Settings now provides 480p, 720p, and 1080p base sizes with 1:1, 9:16, 16:9, 3:4, and 4:3 formats, plus background-color selection.
- Local image and video references are recorded in the project. Missing files are detected when a project opens and shown in a relink dialog. Embedded and remote images remain embedded/referenced in the project.
- Missing plugins and project elements that cannot be converted are reported instead of silently failing to load.
Displays and stage controls
There are 12 built-in displays. Five are new since v1.4.0:
- Video: local video layers with aspect-ratio locking, position, rotation, scale, opacity, looping, and start/end trim points.
- Mesh Grid: an audio-driven 3D surface with Static, Horizontal, Vertical, Diagonal, Radial, Sweep, and Noise motion modes; configurable rows, columns, separation, height, speed, frequency, materials, textures, wireframe, edges, and point rendering.
- Tunnel: an animated 3D tunnel with radius, depth, fog distance, grid density, line width, mesh detail, curvature, turn rate, travel speed, turn speed, bank, transparent-surface, and shader controls.
- Radial Spectrum: a circular frequency display with inner/outer radius, bar count and width, mirrored layout, shadow length, gradients, frequency range, and smoothing controls.
- Waveform Ring: a time-domain waveform wrapped around a ring with radius, amplitude, sample count, smoothing, stroke/fill, and curve smoothing controls.
The existing displays are Bar Spectrum, Geometry, Image, Shape, Sound Wave, Text, and Wave Spectrum. Changes to these displays include:
- Geometry now supports Box, Sphere, Dodecahedron, Icosahedron, Octahedron, Tetrahedron, Torus, and Torus Knot shapes; Basic, Lambert, Normal, Phong, Physical, Points, and Standard materials; smooth/flat shading; custom textures; wireframe and edge rendering; point size; XYZ position; and XYZ rotation.
- Shape adds Rectangle with independent width and height alongside Circle, Triangle, Square, and Hexagon.
- Image and Video fit newly selected media within the canvas, preserve aspect ratio by default, and expose the same on-stage transform controls as other 2D layers.
- Spectrum and waveform displays expose frequency range, smoothing, dimensions, gradients/colors, rotation, scale, opacity, and position through the common controls UI.
- Selected 2D displays can be moved, resized, and rotated directly on the stage with transform handles.
- Geometry, Mesh Grid, and Tunnel each own a 3D camera. Camera mode supports orbiting by dragging, dollying with the wheel, an axis helper, and editable/reactor-bindable azimuth, polar, and distance values.
- The 3D displays share optional key/fill/rim lighting controls with per-light color, intensity, and distance, plus shadows.
- The 3D displays also have optional depth of field with focus distance, focal length, bokeh scale, and render-height controls.
- The stage can be opened in browser picture-in-picture where the platform supports it.
- Audio files can be dropped directly on the stage; loading and drag-target states are shown on the canvas.
- The scene compositor was replaced. Scene opacity, blend modes, masks/inverse masks, layer ordering, and stacked effects are retained, while each scene's effects are now applied only to that scene.
The Cubes display developed during the 2.0 work is shipped as a worker-plugin example rather than as a built-in display.
Effects
The Add Effect drawer now contains these 23 effects, grouped as follows:
- Color: Color, Color Depth.
- Blur and focus: Bloom, Blur, Tilt Shift.
- Distortion: Distortion, Glitch, Kaleidoscope, Lens Warp, Mirror, RGB Shift, Shockwave, VHS.
- Pattern: ASCII, Color Halftone, Dot Screen, LED, Pixelate, Scanline.
- Stylize: Edge Detection, Feedback Echo, Film Grain, Vignette.
New effect options and changes include:
- Bloom now uses an Unreal Bloom pass with exposure, strength, radius, and luminance-threshold controls. The separate Glow effect was removed; legacy Glow layers are converted to Bloom when a project opens.
- Blur has Box, Circular, Gaussian, Triangle, and Zoom modes. Zoom blur includes a configurable center point.
- Color combines brightness, contrast, hue, saturation, and sepia adjustment in one effect.
- Color Depth provides bit-depth reduction as a separate effect.
- Distortion now offers Wave, Simplex Noise, and Perlin Noise modes with amount, scale, and animation-speed controls.
- Glitch now has Sporadic and Constant modes with strength, column width, and ratio controls.
- Color Halftone now has Dot, Ellipse, Line, Square, and Diamond patterns, separate red/green/blue angles, radius, and scatter.
- Pixelate now supports square and hexagonal pixels.
- ASCII converts the scene to a configurable character grid with font size, cell size, color, and inversion controls.
- Edge Detection provides adjustable Sobel outlines with normal and neon modes.
- Feedback Echo accumulates previous frames with decay and zoom controls.
- Film Grain adds animated monochrome or colored grain with intensity, grain-size, and premultiply controls.
- Lens Warp adds adjustable barrel/pincushion warping.
- Scanline adds a configurable scanline pattern.
- Shockwave adds animated radial displacement with amplitude, frequency, and speed controls.
- Tilt Shift adds configurable blur, taper, and sample count.
- VHS combines tape wave, jitter, crease noise, head switching, bloom, chromatic aberration, AC beat, grain, scanlines, vignette, barrel distortion, saturation, and exposure controls.
- Vignette adds adjustable edge offset and darkness.
Effect parameters that support reactors can be driven from the same reactor bindings as display parameters. Animated effects use the export timeline so their saved-video output follows the preview timing.
Audio, live input, and reactors
- File playback now includes a waveform seek view, progress display, repeat mode, volume, and a setting to control whether newly loaded audio starts automatically.
- Live input supports selectable microphones, desktop/system-audio capture where available, and MIDI input. Microphone and desktop capture include an input-gain control.
- MIDI note on/off, control-change, modulation, and pitch-bend messages are converted into spectrum, waveform, and level data so the existing display and reactor system can respond to MIDI without a separate MIDI-only display type.
- Audio reactors now have ten output modes: Add, Subtract, Forward, Reverse, Cycle, Beat Trigger, Beat Envelope, Static Forward, Static Reverse, and Static Cycle.
- Beat modes add sensitivity, hold, and decay controls. Static modes add speed control and animate without an audio source.
- Reactors show live output meters in the reactor list and editor. Any numeric control marked for reactor support can select a reactor and display its current output inline.
- Reactor assignments and settings are preserved when projects are saved and reopened.
Image and video export
- Still images can be saved as PNG or JPEG.
- Video export has a waveform range selector with start/end time fields. Exports must be at least five seconds long and can include or omit the source audio.
- Desktop export renders frames offline through the bundled ffmpeg binary. Available encoders are x264, x265/HEVC, NVEnc H.264, and WebM; each has Low, Medium, and High quality presets. Frame rate can be set to 30 or 60 fps.
- x265/HEVC is new in 2.0.0. x264, NVEnc, and WebM retain the quality ladders used by v1.
- Desktop exports use a native save path, report progress in the player and waveform, can be cancelled, and reveal the completed file in the system file browser.
- Browser export uses
MediaRecorderand selects the first supported WebM or MP4 format. It uses the File System Access save picker where available and falls back to a browser download elsewhere. - On-screen and exported color handling has been aligned so the saved output no longer receives a different color conversion from the preview.
- Local image, video, and audio sources are streamed or copied through temporary files as needed for desktop ffmpeg export, then cleaned up after completion or cancellation.
Plugins
- 2.0.0 introduces URL-installed display and effect plugins using an
astrofox.plugin.jsonmanifest. - Supported plugin runtimes are fragment-shader effects, fragment-shader displays, and JavaScript worker displays.
- The Manage Plugins dialog supports reviewing a manifest before installation, installing, updating, reloading localhost development plugins, and removing plugins.
- Installed plugin files are cached locally. Non-development installs are pinned with SHA-384 integrity hashes and are only fetched again when Update is selected.
- Plugin manifests declare permissions and host libraries. The install review shows requested network access and libraries before installation.
- Worker plugins run without DOM access in a Web Worker with a Content Security Policy. Network APIs are blocked unless the plugin requests network permission; remote executable imports remain blocked.
- Plugins can request normalized FFT and time-domain audio data, expose standard controls and reactor-bindable parameters, and receive deterministic time/delta/seed values for matching preview and export behavior.
- External displays automatically receive position, rotation, scale, opacity, scene blending, on-stage transforms, and reactor support. Worker displays can opt into the host camera controls and the host-provided Three.js library/renderer.
- Installed plugins appear inline in the same Add Display and Add Effect categories as built-in elements and are marked with a plugin icon.
- Five examples are included for authors: Bass Glow, Plasma, Pulse Bars, Audio Orb, and Cubes. A local plugin development server and authoring guide are included in the repository.
- Plugins made for Astrofox 1.x are not compatible with the new plugin API and must be replaced with 2.x plugins.
Interface, settings, and localization
- The application layout now uses a left layer/scene panel, central stage, right controls panel, bottom player/reactor area, and a persistent action sidebar.
- Layers and effects can be renamed, enabled/disabled, reordered, moved by drag-and-drop, and deleted from the layer panel. Move buttons disable automatically at list boundaries.
- Displays and effects are added from slide-out drawers grouped into 2D/3D displays and Color/Blur/Distortion/Pattern/Stylize effects. Installed plugins are listed in those same groups.
- The controls panel can filter itself to the active layer. Related controls are grouped, and linked dimensions show their linked/unlinked state.
- The layers, controls, and player panels have independent visibility toggles in the title bar.
- Desktop window controls are integrated into the title bar; macOS uses the native traffic-light controls and Windows/Linux use the in-app minimize, maximize, and close buttons.
- Buttons and layer actions now have explicit tooltip and accessibility labels. Keyboard operation was added to menus, dialogs, waveform seeking, reactor controls, and stage modes.
- The UI can be switched at runtime between English, French, Spanish, German, Japanese, Korean, Vietnamese, Simplified Chinese, and Traditional Chinese. Display/effect/control labels and user-facing errors are localized.
- Application Settings contains language, play-audio-on-load, and desktop automatic-update preferences, plus the installed version and manual update check.
Desktop application and updates
- The desktop shell now uses Electron 39 and packages the same static renderer used by the web application.
- Preferences and installed plugins in the desktop app are stored in
astrofox.db, a SQLite database in the application user-data directory. The web build continues to use browser local storage. - Settings and plugins written by 2.0 prerelease builds are imported once from the old local-storage layout. If the SQLite database cannot be opened, it is moved aside and recreated; if recreation fails, the app starts with temporary in-memory storage.
- Desktop updates now use GitHub Releases. Automatic checks can be disabled, manual checks are available in Settings, download progress and ready-to-install state appear in the title bar, and a downloaded update can be installed by restarting the app.
- macOS packages are provided for both Apple Silicon and Intel as DMG and ZIP files. Linux packages are provided as AppImage, DEB, and RPM. Windows is provided as an x64 installer.
- The desktop shell enforces a single application instance, restricts renderer navigation and window creation, uses an allowlisted IPC bridge, and terminates active ffmpeg processes when the application exits.
Opening v1 projects
- Legacy project migration includes the following element/property conversions:
- Glow becomes Bloom;
amountbecomes Bloom radius andintensitybecomes strength. - Legacy Bloom
amountis rescaled to strength and its threshold value is converted to the new luminance-threshold direction. - Color Halftone
scalebecomes radius and its single angle is converted to separate red, green, and blue angles. - Glitch
amountbecomes strength. - Geometry
lightIntensity,lightDistance, andcameraZoombecome the new key-light and camera-distance properties, with lighting enabled. - The prerelease Distortion mode named Noise becomes Simplex Noise.
- Prerelease Perlin Noise effects become Distortion effects in Perlin Noise mode.
- Glow becomes Bloom;
- Reactor bindings on migrated properties are renamed and rescaled with the properties they control.
- Unknown properties on built-in elements are removed during migration. Built-in elements with no current implementation are dropped and listed after the project opens.
- v1 application settings stored in
app.configare not migrated; application preferences must be selected again.