Research and examples for learning the GrandMA3 professional lighting control platform — scripting with Lua, building custom fixture definitions with GDTF, and controlling media servers over DMX.
| File | What it is |
|---|---|
grandma3-notes.md |
Starting-point notes on the GrandMA3 platform, Lua scripting, and key resources |
Pixera@HypotheticalMS.description.xml |
A fully annotated GDTF fixture definition for a hypothetical Pixera media server |
CLAUDE.md |
Codified technical reference for AI assistants (Claude Code) working on GrandMA3 projects |
GrandMA3 onPC is free and gives you the full console interface on your computer. No hardware required.
Download: https://www.malighting.com/special/grandma3-software/
Open GrandMA3 onPC, create or load a show file, then type this in the command line:
Lua "Printf('Hello World')"
Output appears in the System Monitor window (open it from the view bar if it's not visible).
To run from a file, save this as hello.lua in the plugins directory:
Printf("Hello World")Then run it:
LuaFile "hello"
Type HelpLua in the GrandMA3 command line to export a complete list of available Lua functions to grandMA3_lua_functions.txt. This is the best way to discover what's available.
The API has two halves:
- Object-Free API — standalone functions:
Printf(),Cmd(),Echo(),GetPath(), etc. - Object API — methods on handles to MA objects (fixtures, sequences, cue lists):
obj:Children(),handle:GetClass(),handle:Name(), etc.
GrandMA3 uses the GDTF open standard for fixture definitions. A .gdtf file is just a ZIP archive containing a description.xml and optional resources (thumbnails, gobo images, 3D models).
Every GDTF fixture definition follows this structure:
FixtureType
├── AttributeDefinitions
│ ├── ActivationGroups (attributes that move together, e.g. Pan+Tilt)
│ ├── FeatureGroups (UI groupings: Position, Color, Dimmer, etc.)
│ └── Attributes (individual parameters with physical units)
├── Wheels (color wheels, gobo wheels)
├── Geometries (physical structure: base, yoke, head, beam)
└── DMXModes
└── DMXMode
└── DMXChannels
└── DMXChannel (one per DMX address)
└── LogicalChannel (links to an Attribute)
└── ChannelFunction (DMX range → physical range)
└── ChannelSet (named sub-ranges)
GDTF has dedicated geometry types for media servers:
<MediaServerMaster>— global controls<MediaServerLayer>— video layers<MediaServerCamera>— outputs
The example file Pixera@HypotheticalMS.description.xml demonstrates a complete 46-channel media server fixture with:
- Master dimmer and cue triggering (snap channel with named cue ranges)
- Two video layers, each with media selection, playback, RGB color, color macros, video brightness/contrast/saturation, a video effect engine (type + 2 params), blend mode, XY position, scale, and rotation
- An output section with dimmer and freeze
Universe assignment happens at patch time in GrandMA3, not in the fixture file. The fixture defines channel offsets starting from 1. To place it in universe 600:
- Menu > Patch
- Add the fixture type
- Set the DMX address to
600.1
You can author GDTF files in three ways:
- GrandMA3 Fixture Type Editor — built into the console/onPC software
- GDTF Builder — web tool at https://fixturebuilder.gdtf-share.com/
- By hand — write the
description.xmldirectly (like the example in this repo), ZIP it, rename to.gdtf
- What is Lua
- Lua Object API
- Lua Object-Free API
- Lua Keyword
- Build Fixture Types
- Import GDTF
- Export Fixture Types
- DMX Universes
- Art-Net Configuration
- GDTF Specification (GitHub)
- GDTF File Format Definition
- GDTF Attribute List
- GDTF Builder
- GDTF Share (community library)
This repo was built collaboratively with Claude Code. The CLAUDE.md file gives Claude full context on GrandMA3 concepts, so it can assist with Lua scripting, fixture authoring, and protocol configuration without starting from scratch.
The following prompts were used during the creation of this repo. They serve as starting points for your own explorations — clone this repo, open it in Claude Code, and try variations of these or ask your own questions.
read the notes file
Start by pointing Claude at existing reference material. It reads the file and summarizes the key concepts, giving both of you a shared foundation.
is it possible to write a hello world program for grandma3 and run it? what is needed to make that happen?
This prompt explores the practical workflow: what software to install, where to write code, how to execute it, and where output appears. Good for understanding the development loop.
i understand that GrandMA3 has a feature called Fixtures. Can you write an example fixture pack intended to control a hypothetical pixera media server? The fixture should include trigger cues and some color and effect controls. It should be scoped to the 600 universe. Do research and ask questions as needed. I'm not super concerned about executing this fixture construct if that is a thing, i just want to see how it is structured.
This is the big one. It asks Claude to research the GDTF format, understand media server fixture patterns, and produce a real annotated example. The "do research and ask questions as needed" part is important — it gives Claude permission to go deep rather than guess. The "not super concerned about executing" part sets expectations that this is about understanding structure.
Given the notes as a starting point, codify the results of your research. You need to create a CLAUDE.md file for you and a README.md for humans who wish to learn about your findings pursuant to becoming Grandma3 experts. Include in the readme all of the prompts I have given you to serve as hints for the human who will come after me and use this information about how to work with you. Then, use the gh cli to create a public repo under my github user such that enlore/grandma3-stuff, commit everything, and push it up.
This prompt turns a conversation into a permanent, shareable resource. The CLAUDE.md preserves technical context for future AI sessions. The README.md preserves it for humans. The repo makes it accessible to everyone.
- "Do research" — explicitly telling Claude to research rather than guess produces much better results for niche technical domains like lighting control.
- "Ask questions as needed" — lets Claude clarify ambiguities rather than making assumptions.
- Provide seed material — the
grandma3-notes.mdfile gave Claude a foothold. Even a few bullet points of domain knowledge dramatically improve output quality. - Ask for structure, not just code — "I want to see how it is structured" produces annotated, educational output rather than uncommented code.
- Name specific technologies — "Pixera media server", "universe 600", "GDTF" — specificity drives better research and more accurate results.