A collection of Golly Lua scripts (plus a couple helper tools) to support research and exploration of Larger Than Life (LTL) cellular automata: drawing/erasing geometric shapes, exporting boundaries/coordinates to CSV, generating/searching initial configurations, and visualizing/quantifying “jitter bugs”.
If you use this repository (or derived scripts) in academic work, please cite the relevant paper(s) below and/or cite this repo.
- Published papers:
- B. Ismalej, K. M. Evans, “Automating Large-Scale Detection and Classification of Larger Than Life Cellular Automata Patterns”. 2025 IEEE 15th Annual Computing and Communication Workshop and Conference (CCWC), Jan 6-8, 2025, Las Vegas, NV, USA. 10.1109/CCWC62904.2025.10903710
- Repository citation:
- Brandon Ismalej, LTL-GollyScripting, GitHub repository. 2023. https://github.com/Brandon-Ism/LTL-GollyScripting
- LTL-GollyScripting
- Run in Golly:
- Put this repo (or selected
.luascripts) somewhere convenient. - In Golly, run a script via File → Run Script… (or your preferred workflow).
- Put this repo (or selected
- Selections matter:
- Several scripts require a selection created with Golly’s Select tool (e.g. boundary capture, overlays, PNG export).
- Outputs:
- CSV exports are typically written either to a fixed filename in the script (e.g.
boundary_points.csv) or intog.getdir("app")(Golly’s app directory), depending on the script.
- CSV exports are typically written either to a fixed filename in the script (e.g.
RectangleScripts/DrawRectangle.lua: Draw a filled live (1) rectangle by clicking opposite corners (no live preview).RectangleScripts/DrawRectangleWithErase.lua: Draw a filled live (1) rectangle by clicking opposite corners with a live preview (preview may overwrite cells while moving).RectangleScripts/DrawRectangle-Menu.lua: Menu-driven filled live (1) rectangle tool: click-and-preview or enter coordinates/dimensions.RectangleScripts/DrawRectangleWithOutline-Menu.lua: Menu-driven rectangle tool: draw filled rectangle or rectangle outline using live (1) cells.RectangleScripts/EraseRectangleWithOutline-Menu.lua: Menu-driven rectangle tool that “erases” using dead (0) cells: draw filled rectangle or rectangle outline.
CircleScripts/DrawCircle-Menu.lua: Menu-driven circle tool using live (1) cells: filled circle or ring; click-to-define radius with live preview or enter center/radius.CircleScripts/EraseCircle-Menu.lua: Same UI as above, but draws using dead (0) cells (i.e., erase-filled-circle or erase-ring).CircleScripts/DrawEllipse-Menu.lua: Menu-driven ellipse tool using live (1) cells: filled ellipse or outline; click-to-define axes with live preview or enter center/axes.CircleScripts/EraseEllipse-Menu.lua: Same UI as above, but draws using dead (0) cells (i.e., erases an ellipse region/outline).
These scripts are commonly used together to capture the inner/outer boundary of an LTL “bug” and export a boundary in a useful ordering.
CaptureBugBoundary/BoundaryCellCapture.lua: From a selected region, identify boundary cells and write them to a CSV (default:boundary_points.csv).CaptureBugBoundary/CSVplot.lua: Plot (x,y) points from a chosen CSV file onto the Golly grid as live (1) cells.CaptureBugBoundary/CSVcenter_plot.lua: LikeCSVplot.lua, but also computes the centroid and centers the plotted coordinates about (0,0).CaptureBugBoundary/CaptureLiveCellstoCSV.lua: Export all live (1) cell coordinates inside a selection tolive_cells.csv.CaptureBugBoundary/CaptureLiveCellstoCSV_AngularSort.lua: Export edge cells from a selection and write them sorted clockwise by angle to the shape’s center (default output:sorted_live_cells.csv).
For the full step-by-step workflow (including where to edit file paths/names), see:
CaptureBugBoundary/README.md
These scripts generate and/or search initial “live sites” vs “dead sites” configurations (often parameterized by circles/ellipses/rectangles and setbacks), and write results to CSV for later analysis.
If you use tools from this section in your work, please cite the following paper:
B. Ismalej, K. M. Evans, “Automating Large-Scale Detection and Classification of Larger Than Life Cellular Automata Patterns”. 2025 IEEE 15th Annual Computing and Communication Workshop and Conference (CCWC), Jan 6-8, 2025, Las Vegas, NV, USA.
Configurations/Configuration_Generator.lua: Interactive generator to place many initial configurations on a grid (user chooses counts, spacing, shapes, dimensions, etc.).Configurations/Configuration_Automation.lua: Automates generation across ranges of parameters and writes results to a CSV (includes spacing, live/dead shapes, setbacks, etc.).Configurations/Configuration_Search_and_Classify.lua: Larger search/classification pipeline:- Prompts for a rule/time horizon and parameter ranges.
- Generates many configurations, simulates them for a fixed number of time steps, and records measurements to CSV.
- Includes logic to estimate period/displacement for patterns.
Configurations/CSV_Configurator_Importer.lua: Reads a CSV of configuration parameters and places those configurations onto the grid.
ImageScripts/Color_Step_Overlay.lua: Visualize cell age by applying user-defined colors over time using an overlay. Works on a selected region and supports saving the overlay as a PNG.- Note: the current script includes logic to create a toroidal universe from the selection (see in-script prompts/behavior).
ImageScripts/savePNG.lua: Save the current selected region as a PNG using an overlay, with user-defined RGB for live vs dead cells.ImageScripts/RGB Color Picker - WebApp/RGB Color Selector.html: Small browser UI to pick RGB values and save swatches (handy for building palettes for overlay scripts).
Jitter_Bugs/JitterFactor.lua: Measures a selected “jitter bug”-like pattern by:- Centralizing the pattern’s centroid at (0,0),
- Estimating period + displacement,
- Computing a jitter factor based on centroid distance from the line of displacement over a cycle,
- Writing a CSV (default:
jitter_bug_data.csving.getdir("app")) including centroid trajectory.
Jitter_Bugs/plot_jitter.py: Python helper to plot the centroid path from ajitter_bug_data.csv-style export (creates PNGs and opens them usingfeh).
ReplicatorDetect.lua: Experimental detector that advances the simulation and hashes connected clusters to flag a “possible replicator” if a cluster hash repeats within the checked window (default loop: 100 generations).
-
tools/jitter-centroid-plot-tool/: A lightweight, client-side plotting tool (HTML/JS + Plotly) to drag-and-drop a CSV and quickly visualize Centroid X/Y in the browser, with a “Download plot as PNG” button.
Thanks for your interest. External contributions aren’t being accepted right now while the scripts evolve alongside ongoing research. If you have ideas or issues, please open an issue.
MIT, see LICENSE.