Full editor on a phone — it is drawn for a bigger screen, so expect to scroll.
{{ mPlotName }}
{{ mPlotSub }}
{{ mOfflineText }}
This is the crew view — read the plot, tick off focus, check patch and power, and read or edit cue sheets. Tap a hookup row to fix a Fixture ID, address or note.
{{ mPlotImgEl }}
{{ mZoomLabel }}
Focus
{{ mFocusCount }} · {{ mFocusPct }}
{{ fg.name }}{{ fg.prog }}
{{ fr.fid }}
{{ fr.name }}
{{ fr.meta }}
{{ fr.photoEl }}
{{ mFocusNoneText }}
Tick fixtures as you focus them, or press Start to go one by one along each position. Ticks stay on this phone and work with no signal.
Work notes
{{ mWnCount }}
{{ wr.text }}
{{ wr.meta }}
{{ mWnHint }}
{{ r.fid }}
{{ r.fixture }}
{{ r.sub }}
{{ r.addr }}
{{ mu.u }} {{ mu.meta }}
Free: {{ mu.free }}
{{ mu.conflictNote }}
{{ ml.t }}
{{ r.addr }}
{{ r.fixture }}
{{ r.sub }}
FID {{ r.fid }}
{{ r.name }}
{{ r.cls }}
{{ r.qty }}
{{ mTotalFix }}
Cue sheets
{{ mCueEmptyNote }}
{{ mCueSummary }}
{{ r.label }}
{{ r.q }}
{{ r.label }}
{{ r.sub }}
{{ r.mark }}
{{ r.noteCount }}
{{ r.notes }}
{{ mCueNoRowsText }}
{{ mCueHint }}
Patch sheet · {{ mAudInSummary }}
{{ r.ch }}
{{ r.source }} 48V
{{ r.sub }}
{{ r.path }}
Monitor world
{{ m.mix }}
{{ m.name }}
{{ m.sub }}
{{ m.notes }}
Wireless · {{ mAudRfSummary }}
{{ rr.model }} {{ rr.band }}
{{ rr.chans }}
{{ rr.count }}
Speakers · {{ mAudSpkSummary }}
{{ sp.qty }}
{{ sp.name }}
{{ sp.sub }}
{{ s.name }} {{ s.total }}
{{ ph.label }}
{{ ph.amps }}
{{ r.k }} {{ r.v }}
Everything the desktop can do, on this phone — building, importing, the rack and unit designers. It is drawn for a bigger screen, so expect to scroll. A bar at the top brings you back here.
Racks are drawn on the desktop. Here you can read one — what is in each unit, what it weighs and draws, and what plugs into what.
{{ rk.name }}
{{ rk.where }}
{{ rk.sub }}
{{ rk.meta }}
{{ mefName }}
{{ mefSub }}
{{ mfsWhere }}
{{ mfsLeft }}
{{ mfsFid }}
{{ mfsName }}
Focused
{{ mfsMeta }}
{{ mfsPhotoEl }}
{{ mceTitle }}
Rehearsal notes
{{ rn.text }}
{{ mRackName }}
{{ mRackSub }}
That rack is no longer here.
Elevation
Hookup
Items
Front
Rear
{{ wr.text }}
{{ rr.u }}
{{ rr.el }}
No cables are documented in this rack yet. They are added in the rack designer on the desktop.
{{ cb.from }}
to
{{ cb.to }}
{{ cb.meta }}
One end of this cable has gone — check it.
This rack is empty.
{{ it.u }}
{{ it.name }}
{{ it.make }}
{{ it.meta }}
{{ it.note }}
{{ mRackSelName }}
{{ mRackSelMake }} · {{ mRackSelU }}
{{ mRackSelSpecs }}
{{ mRackSelEl }}
Cables
{{ sc.text }}
{{ mRackSelNote }}
{{ csTitle }}
{{ csSummary }}
Numbers {{ lt.label }}
Runs between racks and positions
Multicores, feeds and trunks: a rack connector to FOH, a distro to a rack, a data line to a node or straight to a fixture. The length is estimated from where both ends are on the plan and how high they hang.
No runs yet.
{{ cr.no }}
{{ cr.from }} → {{ cr.to }}
{{ cr.meta }}
{{ cr.loom }}
{{ cr.editNote }}
DMX chains
Each chain is one home run from where it is fed, then a jumper into every next fixture, in the order the chain runs. Change the chain in the Hookup and these follow.
No chains in this plot yet \u2014 build them from the Hookup list.
{{ ch.name }}
{{ ch.meta }}
{{ cr.no }}
{{ cr.from }} → {{ cr.to }}
{{ cr.meta }}
{{ cr.loom }}
{{ cr.editNote }}
Inside the racks
Pull list
What to take out of the store, rack cables included: every cable at its stock length.
{{ pl.n }} × {{ pl.what }} {{ pl.len }} {{ pl.note }}
Lengths marked * are estimates, rounded up to a stock length. Set one by hand on any cable and it counts as set.
{{ couponDlg.heading }}
{{ couponDlg.intro }}
Discount
{{ couponDlg.preview }}
{{ couponDlg.result }}
{{ modDlg.case }} {{ modDlg.statusLabel }}
Loading…
Reported as child sexual abuse material. Take it offline at once, keep the evidence, and tell the police (internal checklist, DSA Art. 18).
{{ r.k }}
{{ r.v }}
{{ modDlg.explanation }}
Emails
{{ em }}
Decision
The handle is held for that account for 90 days; until then its old address answers "gone". Release frees it for anyone at once.
{{ modDlg.emailsNote }}
Review (within 6 months of the decision)
{{ modDlg.err }}
{{ modDlg.done }}
Refund a payment
{{ refundDlg.who }}
Reading the payments from Stripe…
No payments to refund.
Payment
Refund
{{ refundDlg.startNow }}
Without a start-now request, keeping the days used is only right for goodwill refunds, not for a withdrawal.
The plan
{{ refundDlg.err }}
{{ refundDlg.result }}
{{ compDlg.heading }}
Your plot is snapshotted as it is right now — keep working on it afterwards without changing your entry. Resubmit any time before the deadline.
Requirements — checked against this plot
{{ ck.mark }}{{ ck.label }}
{{ compView.heading }}
{{ compView.sub }}
Rendering plot…
{{ compView.el }}
{{ billingNoticeIcon }}
{{ billingNoticeTitle }}
{{ billingNoticeBody }}
Loading…
L
LuminaPlot
Features Fixtures Learn
Features Fixtures Learn Contact
Designed by lighting crew, for lighting crew

Design your rig.
Patch it. Print it.

Drag real fixtures onto bars and trusses, auto-patch DMX, and export venue-ready paperwork — all in your browser. No CAD license, no install.
Free forever · Pro from €11.25/mo incl. VAT · Company €47.50/seat incl. VAT · no card to start
Plot Editor
{{ heroPlot }}
A big and always expanding library of fixtures — moving heads, washes, profiles, PARs and conventionals — with modes and footprints ready to patch.
Real output — not a mockup

The plot your crew tapes to the wall

Drawn live by the same engine that prints your PDF pack: Fixture ID in the symbol, gel below, patch above, soft goods in drafting convention, and the key right on the sheet.
{{ pdfShowcase }}
Made on the road

By users, for users.

LuminaPlot started in load-ins and tech tables — built by working lighting techs who were tired of clunky CAD and spreadsheet patch sheets. Every feature earns its place because we use it on real shows: fast drag-to-place, sane auto-patch, paperwork that actually prints.
Auto-patch in one click Print-ready paperwork Live collaboration Audio plotting Curtains & soft goods Company workspace Tech rider builder Live QR share links
“{{ q.text }}”
{{ q.initials }}
{{ q.name }}
{{ q.role }}

Open, honest tooling

No lock-in and no inflated CAD licence. Your plots export as portable files you own, and the editor runs entirely in your browser.
✓ {{ landingLibFact }}
✓ Free plan, no card required
✓ Export your data anytime (PDF, PNG, SVG & CSV on every plan; .lxplot on Pro)
✓ Cancel Pro whenever — your plots stay (over-limit ones become read-only)

Everything a plot needs — nothing it doesn't

From first idea to the paperwork the crew tapes to the wall.
{{ lf.icon }}

{{ lf.title }}

Soon Pro
{{ lf.body }}
{{ st.n }}

{{ st.title }}

{{ st.body }}

Start free. Grow into Pro & Company.

{{ landingFreeLine }} Pro unlocks large-scale plots, live collaboration, libraries and clean paperwork. Company adds a shared rental workspace — inventory, availability, pull lists, sub-rental and client quotes for the whole team.
© {{ year }} LuminaPlot · App by The Async × UpMix Music Group
← luminaplot.com
L
LuminaPlot
Professional light-plot tooling for venues & touring crews.
{{ rq.mark }} {{ rq.label }}
{{ authNotice }}
{{ promoBanner.code }} {{ promoBanner.text }}
{{ proTerms1 }}
{{ proTerms2 }} How we count
{{ authError }}
OR
{{ authSwitchText }}
{{ authNote }}
© {{ year }} LuminaPlot · App by The Async × UpMix Music Group
L
Verify it's you
We emailed a 6-digit code to {{ twofaEmail }}. Enter it below to finish signing in.
{{ twofaError }}
Reset your password
Enter your account email and we'll send you a link to choose a new password.
{{ forgotError }}
If an account exists for {{ forgotEmail }}, a password-reset link is on its way. Check your inbox — the link expires in 1 hour.
L
Set a new password
{{ resetError }}
Your password has been updated. You can now sign in with your new password.
{{ verifyIcon }}
{{ verifyTitle }}
{{ verifyBody }}
L
LuminaPlot
{{ modeLabel }}
Notifications
{{ n.icon }}
{{ n.title }}
{{ n.body }}
{{ n.time }}
You're all caught up.
Welcome, {{ onbFirstName }}
Let's tailor LuminaPlot to you
A couple of quick questions so we build the right features for how you actually work. You can refine the rest any time in Account.
How did you hear about LuminaPlot? — optional
* Required to continue
My plots
{{ plotCountLabel }}
Sort
Companion mode. Open any plot to read it, work the focus checklist and fix patch details. Building and importing plots happens in the editor on a laptop or desktop.
L
Welcome to LuminaPlot, {{ firstName }}
{{ emptyStateSub }}
01
Set the stage
Pick a venue preset or enter your stage, audience & rigging.
02
Add fixtures
Drag real fixtures from the library onto bars & trusses.
03
Patch & export
Auto-patch DMX, then print plots & paperwork.
Build your first plot on a laptop or desktop — then it's here on your phone at the gig, ready to read, focus and check.
{{ dlSentNote }}
{{ maintBanner.icon }}
{{ maintBanner.tag }} {{ maintBanner.title }} {{ maintBanner.timeLine }}
{{ maintBanner.msg }}
{{ lockedCount }} plot(s) are read-only on Free
{{ downgradeNote }}
{{ compCard.title }} {{ compCard.chip }}
{{ compCard.brief }}
{{ compCard.prize }} {{ compCard.meta }}
{{ tl.label }} {{ tl.at }}
{{ compCard.capNote }}
Entry requirements
•{{ rq.label }}
✓ Your entry: {{ compCard.myTitle }} — {{ compCard.mySubmitted }}
{{ compCard.rules }}
{{ compCard.voteIntro }}
{{ en.label }} yours ★ your vote
{{ en.title }}
{{ en.fx }} fixtures
{{ w.medal }}
{{ w.title }} — {{ w.name }}
"{{ w.note }}"
{{ w.votes }}
{{ fc.label }} {{ fc.count }} ×
Continue where you left off
{{ continueName }} {{ continueMeta }}
Open →
Trash is empty
Deleted plots stay here for 30 days before they're removed for good.
{{ t.name }}
{{ t.venue }} · {{ t.fixtures }}
{{ t.deletedWhen }}
{{ t.expires }}
No plots match “{{ dashSearch }}”
Try a different name or venue, or clear the search.
{{ eduEndingTitle }} — {{ eduEndingBody }}
{{ vNudgeTitle }}
{{ vNudgeBody }}
{{ c.preview }}
Read-only
{{ c.shareIcon }} {{ c.shareLabel }}
{{ c.ownAccess }}
{{ c.name }}
{{ c.venue }}
{{ c.fixtures }} fixtures · {{ c.updated }}
Export
{{ c.busyLabel }}
Venue profiles
{{ venueTabBlurb }}
No venue profiles yet
Open a plot and use More ▾ → “Save room as venue profile” to keep the room for next time.
{{ v.name }}
{{ v.meta }}
Shared by {{ v.sharedBy }}
Templates & tours
Create plot on a venue above starts a new plot in that room — stage, positions, house rig and rigging limits. To take a whole show somewhere else, use ⋯ → New show at venue on its plot card (the same rig re-drawn onto a saved venue — give it a tour name and the copies group into a folder).
AI DesignerPROBETA
Describe the rig — it drafts the stage, positions and a patched plot ready to edit.
AIGenerated by AI. Check before use.
Try
The extracted input list lands in the Audio panel and monitor mixes get named on the wedges — everything stays editable.
Draft setup — what the AI must respect
Venue — draft into a saved room
Gear — draft only from an inventory you own
House power — what the venue actually has
{{ p.label }} {{ p.kw }} {{ p.count }}
{{ aidPowBudget }}
Other constraints — the draft must fit (blank = no limit)
1
Describe the rig
Venue, band or show type, the mood — plain language. Add venue, gear and power limits above if the room is fixed.
2
Review the draft
Rig list with roles and colours, a plot preview, power & weight checks — and honest warnings when something won’t fit.
3
Create & make it yours
One click builds a real plot — patched, placed and editable like any other. Nothing is locked in.
Drafting the rig…
{{ aidErr }}
{{ aidName }}
{{ aidVenueName }} {{ aidVenue }} · {{ aidSize }} · {{ aidTotal }}
{{ aidSummary }}
{{ st.k }}
{{ st.v }}
over your limit — redraft
{{ aidPreviewSvg }}
{{ fz.icon }} {{ fz.tag }} {{ fz.text }}
{{ aidConcept }}
{{ r.label }} {{ r.where }} {{ r.role }} {{ r.purpose }}
Focus notes
›{{ fn.t }}
+ backline, wedges & mic positions on stage
{{ rb.t }}
{{ aidNotes }}
{{ aidCreateErr }}
Racks
{{ rackTabBlurb }}
No rack designs yet
{{ rackTabEmptyHow }}
{{ rk.name }}
{{ rk.kindLabel }}
{{ rk.meta }}
{{ rk.top }}
What kind of rack?
The type sets the starting size, case weight and the device list the designer offers. It cannot be changed afterwards — a DMX rack and a motor rack do not hold the same gear.
Inventories
{{ invTabBlurb }}
No inventories yet
Build one here, or save a plot's inventory from the editor dock (Library ▾ → Save inventory as library).
{{ iv.name }}
{{ iv.meta }}
{{ iv.top }}
{{ invBTitle }}
{{ invBCount }}
No types yet — search above to add your gear.
{{ it.name }}
{{ calTitle }}
Read view — plan in the
{{ d.n }}
{{ c.num }}
{{ it.label }}
{{ lg.label }}
© {{ year }} LuminaPlot · App by The Async × UpMix Music Group
Help & getting started
Learn Center ↗
{{ helpHitLabel }}
{{ f.title }}
{{ f.body }}
{{ k.label }} {{ k.keys }}
Nothing matches that — try another word.
Learn LuminaPlot in five minutes
A light plot is a top-down map of your rig. You set the room once, drag fixtures onto bars and trusses, patch them, and share. Here's the whole workflow.
1Create a plot
Hit New plot. Start from a venue-type preset (end-on, thrust, arena, black box, club, festival or blank canvas) or a saved layout, set your stage & audience dimensions, then drag audience areas and zones into place on the Room layout canvas. The plot starts empty — bars, trusses and fixtures are added in the editor (a saved venue profile brings its own house rig). Add details & metadata anytime.
2Place fixtures
Drag a fixture from the left Inventory onto any bar or truss. It snaps to the nearest one. Drag placed fixtures to reposition; turn on Snap to lock them to the grid.
3Patch & number
Click a fixture to set its Fixture ID, DMX mode, universe, address and dimmer. The badge warns of duplicate Fixture IDs and overlapping addresses. Use Auto-patch (and its ▾ settings) to assign everything in one pass.
4Save & share
Everything autosaves. Export gives you PDF, PNG, SVG and CSV on every plan; on Pro it also writes a portable .lxplot file you can re-import from the dashboard. Use the Share tab (Pro) to invite collaborators as editors or viewers.
Common questions
{{ helpFaqNote }}
{{ fq.a }}
No question matches that. The reference below may still have it.
Everything else
{{ f.body }}
Keyboard shortcuts
{{ k.label }} {{ k.keys }}
Reading the plot
The teal box is the stage; the dashed blue area is the audience. The orange line is the plaster (setting) line and the dashed vertical line is centre (CL). Grey bars over the stage are LX (lighting bars); gold bars over the audience are trusses. Each fixture symbol follows lighting convention — moving heads show a yoke, profiles show a lens, and so on.
Working with fixtures
Where fixtures come from
In a plot, open the inventory dock and hit + Add to open the fixture browser. You can search across four sources:
Your fixtures — anything you've saved, built or uploaded (see below), available in every plot.
Generic & patch objects — dimmers, PARs, hazers, followspot positions and generic movers you set the channels for.
Built-in library — real fixtures from Robe, Martin, Chauvet, ETC and more, with modes, power and weight prefilled. Fixtures we've individually reviewed carry a Verified badge.
Or Upload .gdtf to import any fixture profile from a GDTF file — we normalize it into your schema.
Saving & editing your own fixtures
When you Build custom, upload a .gdtf, or edit a fixture, the editor asks Save changes to:
This plot only — the change stays in the current plot's copy.
My fixture library — saves an editable custom copy that shows up in every plot. Editing a verified or uploaded fixture this way makes your own copy; the original verified library is never changed.
Managing your fixtures
See and manage everything you've saved in two places: the Your fixtures group at the top of the fixture browser (each row has a pencil to edit and an ✕ to remove), and your Account → Custom fixtures section, where you can search, edit, delete, build a new fixture or upload a .gdtf. Removing a saved fixture leaves any plots that already use it untouched.
© {{ year }} LuminaPlot · App by The Async × UpMix Music Group
What's new
Release notes
The latest improvements to LuminaPlot.
{{ rel.bgEl }}
v{{ rel.v }}
{{ rel.date }}
{{ rel.heroBadge }}
{{ rel.t }}
{{ sec.label }}{{ sec.count }}
{{ it.bullet }}{{ it.text }}
Plans & pricing
Design freely. Upgrade when you grow.
Professional light-plot tooling at a fraction of legacy CAD pricing.
Monthly
Yearly 2 months free
{{ vatToggleLabel }}
Free
€0/forever
Everything you need to sketch a plot.
{{ ff.icon }}{{ ff.label }}
{{ freeIncludedLabel }}
Your current plan
Most popular
Pro
{{ proPrice }}{{ proPer }}{{ proAlt }}
{{ proSub }}
✓{{ pf }}
{{ proTerms1 }}
{{ proTerms2 }} How we count
Your current plan
Included in Company
Company
{{ coPrice }}{{ coPer }}{{ coAlt }}
{{ coSub }}
{{ coVsPro }}
{{ coPerSeat }}
{{ ct.label }}{{ ct.total }}
{{ coSeatHint }}
✓{{ cf }}
Your current plan
{{ billingNote }}
{{ vatNote }}
✓{{ tr }}
Compare plans
Everything in each plan, side by side.
Free
Pro
Company
{{ g.title }}
{{ cr.label }}
{{ c.txt }}
Teaching lighting or sound? Schools get Pro for every student.
One agreement per institution — students and staff sign up with their school email and get Pro automatically for the school year. No cards, no codes, no rosters.
Ask about Education
Questions, answered
{{ fq.a }}
Full details in the refund policy and terms · questions to hello@luminaplot.com
Account
Welcome to Pro — all features unlocked. Thanks for supporting LuminaPlot.
{{ noPwNudgeText }}
{{ st.value }}
{{ st.label }}
{{ acctInitials }}
{{ acctName }}
{{ acctEmail }}
About you
{{ aboutSaveLabel }}
Tell us how you work so we can build the right features. This stays private — only anonymised, aggregated trends are ever shared with partners.
Preferences
App theme
How the whole app looks on this device. Light is free; the colour themes are Pro.
{{ t.label }} PRO
Measurement units
How lengths display across plots & paperwork. Each plot can override this in Plot details. Data is always stored metric.
Weight units
Loads, capacities and rigging figures. Chosen separately from lengths — a venue may quote points in pounds on a metric drawing. Stored in kilograms either way.
Plan & usage
{{ planLabel }}
Plots{{ usePlots }} / {{ maxPlots }}
Fixtures per plot{{ maxFixturesLabel }}
{{ usageNote }}
{{ eduNote }}
{{ seatNote }}
Studio branding
{{ brandBadge }}
Put your studio or company name and logo on every PDF and exported drawing's title block. LuminaPlot stays as a small credit line.
PNG/SVG · under 512 KB
Title-block preview
{{ brandPrevLogoEl }} L {{ brandPrevName }}
Venue name
Plot title
Custom export branding is a Pro feature. Upgrade to brand every plot and document with your studio identity.
Loading…
{{ pubNotReadyText }}
Claim your page PRO
Your own page at luminaplot.com/@you: your name, what you do, your links and the plots you choose to show.
{{ pubStatusLine }}
luminaplot.com/@
{{ pubHandleHint }}
Photo
Never written in the page itself. A visitor sees them only after tapping "Show email" or "Show phone".
{{ pubErr }}
{{ pubPublishHint }}
Plots on your page
{{ pubPlotsHint }} Names, notes and contacts in a plot are never shown, whatever you pick.
Only plots you own are listed. A plot shared with you is its owner's to show, and a plot in a Company workspace can't be shown on a personal page yet.
Loading your plots…
{{ pubPlotsErr }}
You have no plots of your own yet.
{{ r.name }} {{ r.stateLabel }} View
This plot is part of a Company workspace, so it cannot be shown on your page yet.
{{ r.levelHint }}
Custom fixtures
Fixtures you’ve saved, built, or uploaded — available in every plot. Edits here don’t touch the verified library.
⌕
{{ acctFixCount }}
{{ r.icon }}
{{ r.name }}{{ r.badge }}
{{ r.manuf }} · {{ r.meta }}
No saved fixtures yet.
Build one, upload a .gdtf, or save a library fixture to “My library”.
Emails
Account and billing emails always arrive. These are optional:
{{ ep.label }}
{{ ep.sub }}
{{ emailPrefsNote }}
Request a feature
Thanks — that's on our desk.
We read every request, and they shape every release.
What would make LuminaPlot better for your work? Riders, paperwork, a fixture we lack — anything. Requests go straight to the team.
{{ frCount }}
Security
Two-factor authentication
{{ twofaNote }}
Linked sign-in accounts
{{ linkedNote }}
{{ li.name }}
{{ li.sub }}
No password is set — this account signs in only through the provider above.
Active sessions
{{ ss.label }}
{{ ss.sub }}
{{ ss.tag }}
Data & privacy
Under GDPR you can download everything we hold about you at any time.
Danger zone. Deleting your account cancels any active subscription and removes every plot — it can’t be undone.
Plan
Your plan now
{{ nr.k }}
{{ nr.v }}
{{ planNote }}
{{ wdNote }}
{{ deNote }}
{{ deDoneNote }}
{{ wdDoneNote }}
{{ planErr }}
Billing period
Monthly
Yearly
Pro
{{ planProPrice }}{{ planPer }}
{{ planProVat }}
One designer. Up to 200 plots of 1,000 fixtures each, the full fixture library, PDF and MVR exports, focus charts, cue sheets and the AI Designer.
{{ proTerms1 }}
{{ proTerms2 }} How we count
Company
{{ planCoPer }}
Everything in Pro for the whole team, plus a shared workspace: seats and roles, a company fixture library, the show calendar and one invoice.
Team size
{{ so.label }}
{{ planCoSeats }} seats · {{ planCoTotal }} · {{ planCoVat }}
{{ planVatNote }}
Your first plot
{{ guideStepLabel }}
What kind of stage?
{{ v.emoji }}
{{ v.label }}
{{ v.hint }}
How big is the space?
{{ z.scale }}
{{ z.label }}
{{ z.hint }}
Live preview
{{ guidePreview }}
Next, in the editor: place five fixtures, auto-patch them and print the PDF. Each step can be skipped, and you can change everything afterwards.
{{ guideRunLabel }}
{{ guideRunTitle }}
{{ guideRunBody }}
Your first plot is on paper
Two places to go from here.
Learn the basics
Short tutorials: trusses, power, the patch, the paperwork.
{{ coachNum }}
{{ coachTitle }}
{{ coachBody }}
{{ upsellTitle }}
{{ upsell.msg }}
Choose plots to keep editable
Free includes {{ keepMax }} editable plots. Pick the ones you want to keep working on — the rest stay safe and viewable, just read-only. Selected {{ keepCount }}/{{ keepMax }}.
{{ k.check }}
{{ k.name }}
{{ k.fixtures }} fixtures · {{ k.updated }}
Share plot
{{ shareDlgName }}
Sharing needs an account
Share links and email invites require a LuminaPlot account and connection to the server. You're currently in local/demo mode, so plots live only in this browser. Sign in to share with collaborators.
Share link
Share link
{{ shareRoleHint2 }}
{{ shareQrEl }}
Scan at load-in. The house crew scans this to open the always-current plot — it also prints on the title block of every export.
Invite by email
{{ inviteNote }}
Manage subscription
{{ portalNote }}
Current planPro · {{ proPer2 }}
Renews{{ renewDate }}
Nothing matches — try a tab name, an email, or a school.
↑↓ move↵ openesc close
Admin
OWNER {{ adminUpdatedLabel }}
⌕
{{ r.icon }}
{{ r.label }}
{{ r.sub }}
Nothing matches across users, plots, errors or feedback.
Stripe ↗
DEMO DATA Sample figures for previewing the dashboard — not from your live database. The deployed site at luminaplot.com shows real data.
{{ adminTabTitle }}
{{ adminTabDesc }}
{{ sec.error }}
This week
{{ sec.blocked7d }}
{{ sg.label }}
{{ sg.detail }}
Nothing unusual in the last 7 days — no failed-login bursts, no throttled mail, no blocked attempts.
Blocklist
Blocked values are refused at signup and sign-in. Blocking an address or a domain also suspends the matching accounts. Admin addresses can never be blocked.
{{ b.kind }} {{ b.value }} {{ b.reason }} {{ b.hits }} {{ b.when }}
Nothing blocked yet. Add a disposablemail domain, or block from a user's drawer.
Security events
{{ ev.tag }} {{ ev.action }} {{ ev.detail }} {{ ev.ip }} {{ ev.when }}
{{ us.label }}
{{ us.v }}
Providers
{{ ar.label }}
{{ ar.desc }}
Fall back automatically (user AI)
When the primary is capped or failing, silently try the next provider in the chain. The admin AI never falls back — its prompts stay with the one vendor you picked.
Order {{ co.n }} {{ co.label }}
{{ aiSet.keyHint }}
Providers & health
{{ fp.label }} {{ fp.statusLabel }} {{ fp.role }}
{{ fp.lastNote }}
Every provider except Anthropic speaks the same API, so a key is all it takes. Free tiers are rate-limited — that is what the fallback chain is for. Only Anthropic and Mistral may serve the admin AI (neither trains on prompts); on Mistral, admin prompts are still redacted.
Generation & limits
{{ g.label }}
{{ g.desc }}
Temperature
0 = deterministic, 1 = creative. Empty uses the provider default — recommended, the prompts are tuned for it.
Features
{{ f.label }}
{{ f.desc }}
Privacy
Always redact admin data
Withhold user emails, names and feedback texts from the admin AI on every provider — including Anthropic. Non-Anthropic providers are always redacted regardless.
Provider, model and limit changes apply to the next AI call — nothing to redeploy.
Health
{{ hlStatus }}
{{ h.label }}
{{ h.value }}
{{ h.sub }}
{{ t.text }}{{ t.meta }}
Restore test done on
✓Nothing needs you — no failed payments, no fatal errors, no bug reports waiting, no agreements expiring.
Showing {{ adminRangeLabel }}
Pulse {{ tc.v }} {{ tc.k }}
Net income
{{ finNetNow }}
of {{ finGrossNow }} collected · {{ finMarginNow }} margin{{ finResNote }}{{ finFxNote }}
{{ finAxisHi }} {{ finAxisLo }}
{{ fb.label }}
{{ finAxisHi }} {{ finAxisLo }}
{{ finAreaSvg }}
{{ fa.label }}
No settled invoices in this window yet. The line appears once money has actually been collected.
{{ finUnsetNote }}
{{ st.spark }}
{{ st.label }}
{{ st.value }}
{{ st.sub }}
Today
{{ tc.n }} {{ tc.label }}
{{ todayUpdated }}
{{ tr.icon }}{{ tr.text }}{{ tr.at }}
Quiet so far — nothing has happened since midnight.
Monthly recurring revenue
{{ adminMrrNow }} · {{ adminMrrGrowth }}{{ adminTrialLegend }}
{{ tk.label }}
{{ b.month }}
{{ adminRevSvg }}
{{ b.month }}
Plan mix
{{ p.label }} {{ p.value }} {{ p.pct }}
New signups
upgraded to paidon trial
{{ tk.label }}
{{ b.month }}
{{ adminSignupSvg }}
{{ b.month }}
System health
{{ h.label }} {{ h.detail }}
Plots created
{{ adminPlotTotal }} total · peak {{ adminPlotPeak }}
{{ tk.label }}
{{ b.month }}
{{ adminPlotSvg }}
{{ b.month }}
Newest signups
No users yet.
{{ u.initials }}
{{ u.email }}
{{ u.when }}
{{ u.plan }}
Active users
{{ adminActiveNow }} in the latest period
{{ tk.label }}
{{ b.month }}
{{ adminActiveSvg }}
{{ b.month }}
Engagement
{{ en.label }} {{ en.value }} {{ en.sub }}
{{ adminNote }}
{{ adminUserCount }}
{{ sg.label }} ×
{{ st.label }}
{{ st.value }}
{{ adminBulkLabel }} Mail
User {{ sortArrowName }}Plan {{ sortArrowPlan }}Status {{ sortArrowStatus }}Plots {{ sortArrowPlots }}Racks {{ sortArrowRacks }}Active {{ sortArrowActive }}Joined {{ sortArrowJoined }}Actions
{{ u.display_name }} {{ u.adminTag }}
{{ u.email }}
{{ u.eduPlanLabel }}
{{ u.statusLabel }}
{{ u.plots }}
{{ u.racks }}
{{ u.active }}
{{ u.joined }}
The money side, off Stripe's own ledger and our subscription table. Gross is what customers paid; net is what is left after VAT, card fees and running costs. Amounts are in the settlement currency ({{ finCurrency }}), because that is what reaches the bank.
Could not reach Stripe — showing the last figures fetched.
Gross collected
{{ finTotGross }}
{{ finSince }}
Net income
{{ finTotNet }}
after VAT, fees and costs
VAT held
{{ finTotVat }}
owed on, never income
Card fees
{{ finTotFees }}
{{ finFeeRate }} of collections
Gross and net, month by month {{ finSince }}
Gross Net
{{ tk.label }}
{{ gn.label }}
Loading…
Nothing has settled yet.
Subscriptions
{{ bk.k }}
{{ bk.v }}
{{ finMix.note }} — annual plans land as one payment, which is why the cash line is lumpier than the business.
Pro and Company
Pro
{{ finPlanSplit.pro }}
{{ finPlanSplit.proN }} paying
Company
{{ finPlanSplit.company }}
{{ finPlanSplit.companyN }} accounts · {{ finPlanSplit.seats }} seats
{{ finPlanSplit.note }} — Company is per seat, so one account can be worth twenty Pro ones.
On the book, but not revenue
None of these are in MRR. Counting any of them would overstate it, and they are the usual reason a subscriber count and a revenue figure disagree.
{{ nr.k }}
{{ nr.v }}
worth {{ nr.worth }}
Trials: {{ finTrialConv }}.
Invoices
Sent
{{ finTotInvoices }}
Paid
{{ finTotPaid }}
Unpaid
{{ finUnpaid }}
Counts every invoice Stripe finalised in the window, including the €0 ones a free trial generates — which is why sent usually exceeds the number of payments.
MonthCollectedVATCard feesRunningNet
{{ fr.period }} {{ fr.gross }} {{ fr.vat }} {{ fr.fees }} {{ fr.fixed }} {{ fr.net }}
What it costs
From Stripe
Card fees
{{ finFeeRate }}
Off the balance transactions — the real figure, not a rate.
{{ fb2.label }} {{ fb2.amount }} {{ fb2.share }}
Prices are in EUR and the account settles in {{ finCurrency }}, so conversion is charged on top of processing. Only that half would move if the settlement currency changed.
VAT collected
{{ finVatRate }}
From each invoice's own tax lines. Reverse-charged business customers carry none, so this is not a flat rate.
Built on recurring revenue, not on collected cash. An annual plan lands its whole year in one month and nothing for the next eleven, so a cash line is lumpy in a way that has nothing to do with the business getting better or worse — reading that as a growth rate is where runway forecasts go wrong.
ending MRR = starting MRR + new − churned − lost at renewal − known cancellations
{{ sfWindowNote }}
No live subscriptions yet, so there is nothing to project. This fills in once the book has something on it.
Net new MRR
{{ sfNetNew }}
what the book gains or loses each month
Churn
{{ sfChurn }}
monthly plans · {{ sfChurnNote }}
Annual renewals
{{ sfRenew }}
{{ sfRenewNote }}
Quick ratio
{{ sfQuick }}
{{ sfQuickNote }}
ARPU
{{ sfArpu }}
per live subscription, per month
{{ sfCommitted }} of MRR is already set to stop at period end. That is a known loss, not a forecast one, so each comes off in the month it ends.
On these numbers net income goes below zero in {{ sfFirstNegative }}.
Project
ahead
What if new subscriptions were
and churn
{{ sfScenarioNote }}
{{ sfHorizonNote }}
MRR — the history, then the projection
Actual Projected Past the trust window 80% of simulated runs
{{ tk.label }}
{{ sfChartSvg }}
{{ sc.label }}
{{ sfHistNote }}
MonthSubsMRR80% rangeNewLostBilledNet
{{ sr.period }} ~ {{ sr.seats }} {{ sr.mrr }} {{ sr.range }} {{ sr.gained }} {{ sr.churned }} {{ sr.billed }} {{ sr.net }}
Against the naive baseline
This model
{{ sfModelTotal }}
Naive
{{ sfNaiveTotal }}
{{ sfNaiveNote }}
Track record
{{ sfBtHead }}
{{ sfBtText }}
Seasonality
Not modelled
{{ sfSeasonNote }}
Cash extrapolation
The same window read the other way: the median month-on-month change in what was actually collected, carried forward. Useful as a sanity check on the model above, and lumpy for the reason given at the top — so where the two disagree, believe the subscription line.
Median trend
{{ finRate }}
Projected net
{{ finProjNet }}
Billed, from the book
{{ sfBilledTot }}
at list price, annual renewals in their month
Range
{{ finProjRange }}
{{ finBand }}
Checkout funnel · Stripe
{{ ckfMsg }}
{{ t.k }}
{{ t.n }}
{{ t.sub }}
PlanStartedCompletedExpiredOpenCompleted %
{{ r.label }}{{ r.started }}{{ r.completed }} {{ r.expired }}{{ r.open }}{{ r.conv }}
{{ ckfNote }}
{{ ckfVat }}
{{ p.text }}
Signup → activation funnel
{{ growthFunnelNote }}
{{ f.label }}
{{ f.stepPct }}
{{ f.n }} · {{ f.pct }}
{{ f.allN }}
Activation by signup date
{{ actNote }}
Signups {{ lg.label }}
{{ actAxisTop }} {{ actAxisMid }} {{ actAxisZero }} 100% 50% 0%
{{ actSvg }}
{{ b.label }}
{{ actMax }}
No signups in this window with these filters.
Signed up inSigned upVerifiedMade a plotFirst PDFBack on day 7 Source (?ref=)
{{ ar.week }} {{ ar.n }} {{ ac.t }} {{ ar.src }}
Revenue movement
{{ revStaleMsg }}
{{ rc.k }}
{{ rc.v }}
{{ growthRevNote }}
At-risk accounts
Payment failures, scheduled cancellations, accounts that have already churned, and quiet accounts on a plan nobody is paying for — comped, education, or set by hand.
Deliberately absent: a live subscription or trial that nobody has cancelled. An unused subscription still paying is revenue without support cost, and a win-back mail there is a reminder to cancel — so those accounts are neither listed nor mailable.
Nobody at risk right now — all subscriptions healthy.
{{ ar.chip }} {{ ar.name }} {{ ar.email }} · {{ ar.plan }} {{ ar.when }} No marketing consent {{ ar.sentLabel }}
Send a win-back email
{{ wbWho }}
Coupon — live Stripe promotion codes
Fetching active codes from Stripe…
Feature usage · last 30 days
free pro company
{{ usageNote }}
{{ usageTotalNote }}
No usage recorded yet.
{{ u.label }}
{{ u.keyMono }}
{{ u.spark }}
{{ u.share }}
{{ u.paidPct }}
{{ u.total }}
{{ u.delta }}
Never used by anyone: {{ usageNever }}
Reusable discount codes, created directly in Stripe. These are the codes the win-back email can offer. Codes minted by the per-user % Coupon button are locked to one customer, so they are listed separately at the bottom and never appear in a picker.
Stripe: {{ couponsErr }}
New campaign code
{{ cnPreview }}
Campaign codes · {{ cnLiveCount }} live
Loading from Stripe…
No campaign codes yet — the win-back dialog will offer manual entry only until you create one here.
{{ c.planChip }}
{{ c.meta }}
{{ c.reach }}
{{ c.note }}
{{ c.uses }}
{{ c.usesLabel }}
{{ c.state }}
{{ ceCode }}
{{ ceUsed }}
Fixed by Stripe
{{ ceFixed }}
These cannot change once a code exists — somebody may already be holding it. To change them, create a replacement and retire this one.
{{ crCode }}
{{ crState }}
{{ crMeta }}
{{ crNote }}
Reading redemptions and link clicks…
Could not load this report — {{ crErr }}
{{ k.k }}
{{ k.v }}
{{ k.s }}
Link-click tracking is not set up on this deployment — run sql/24_promo_tracking.sql and the funnel below starts filling from the next share.
From click to charge
{{ crFunnelNote }}
{{ f.label }}
{{ f.stepPct }}
{{ f.n }}
{{ f.pct }}
Where the clicks came from
{{ rf.host }} {{ rf.n }} {{ rf.pct }}
No clicks recorded for this code yet. The referrer is whatever site the link was opened from — posts, emails and QR codes usually arrive as Direct.
Link clicks · last 30 days
{{ crBarsNote }}
{{ crPeak }}
{{ b.label }}
Who redeemed it, and what they bought
{{ crRowCount }}
Customer
Bought
Status
Started
Pays now
Discount
{{ r.bought }}
{{ r.status }}
{{ r.when }}
{{ r.pays }}
{{ r.saves }}
{{ crEmptyNote }}
{{ crGapNote }}
Sent to one person · {{ cnPersonalCount }}
Minted by the % Coupon button. Each is restricted to a single customer and one redemption, so forwarding one does nothing — and offering one in a win-back mail would send a code the recipient cannot use.
{{ c.code }}
{{ c.meta }}
{{ c.uses }}
{{ c.usesLabel }}
{{ c.state }}
Data-protection requests (GDPR art. 15 & 17). The clock is 30 days from the request — log it here the day the email arrives.
No requests logged. That's a good day.
{{ g.type }} {{ g.who }} requested {{ g.requested }} · {{ g.note }} {{ g.deadline }}
Aggregated, anonymised insight from user profiles — the kind of industry signal you can share with manufacturing partners. No names, emails or individual accounts appear here.
{{ audWindowNote }}
Demo figures — live mode aggregates the real profiles in your database.
{{ audError }}
Users
{{ audTotal }}
{{ audNew30 }}
Profile coverage
{{ audCoverage.pct }}
{{ audCoverage.sub }}
Onboarding completed
{{ audOnbPct }}
{{ audOnbSub }}
{{ tc.k }}
{{ tc.v }}
{{ tc.sub }}
Plans
{{ p.label }} {{ p.n }} {{ p.pct }}
{{ audPlanNote }}
Consent & who product news can reach
{{ c.k }} {{ c.v }} {{ c.p }}
{{ c.note }}
{{ blk.title }}
{{ blk.sub }}
{{ r.label }}
{{ r.value }} {{ r.pct }}
{{ ins.text }}
Paid share by use case
free trial granted pro company
Which segments actually pay — your best targets for messaging and pricing. The % is paying (Pro + Company); trials and granted plans are not.
{{ c.label }}
{{ c.total }}
{{ c.pct }}
Paid share by acquisition channel
Where paying users came from — spend your marketing effort on the top rows, not the biggest ones.
{{ c.label }}
{{ c.total }}
{{ c.pct }}
Campaigns (?ref=)
How far each tagged sign-up got. The untagged row at the bottom is the baseline to beat.
TagSign-upsVerifiedOnboardedMade a plotTrialPayingPaid %
{{ c.label }} {{ c.signups }}{{ c.verified }} {{ c.onboarded }}{{ c.plotted }} {{ c.trial }}{{ c.paying }} {{ c.paid }}
Brand share of gear mentions
Sellable
{{ audBrandNote }}
{{ b.rank }} {{ b.label }}
{{ b.value }} {{ b.share }}
Answer rate {{ r.label }} {{ r.pct }}
Most-used fixtures
Manufacturer signal {{ audFixCount }}
No fixture mentions match that search.
{{ r.label }}
{{ r.value }}
Loading audience data…
Aggregating profile answers — nothing here identifies an individual account.
All plots created on this instance. Open to inspect, flag for review, or remove content that violates the terms.
Plot {{ contentSortName }}Owner {{ contentSortOwner }}Fixtures {{ contentSortFixtures }}Updated {{ contentSortUpdated }}Actions
{{ c.name }} {{ c.flagLabel }}
{{ c.venue }}
{{ c.owner }}
{{ c.fixtures }}
{{ c.updated }}
No plots on this instance yet
Every plot users create shows up here for review.
Reports about public pages and plots. A person decides every one, within 14 days — cases open more than 10 days are flagged. Every restriction sends the owner a statement of reasons.
{{ modNotReady }}
A case from our own check (no reporter)
No cases here.
{{ mc.case }} {{ mc.statusLabel }} {{ mc.ageLabel }} {{ mc.reason }} {{ mc.who }}
{{ mc.url }}
In-app feedback and bug reports submitted by users. {{ adminFeedbackNote }}
No feedback yet
Messages from the in-app “Feedback” button appear here.
Statuses and notes need sql/14_admin_triage.sql on the server — until then only “handled” is stored.
{{ fb.when }}
{{ fb.text }}
{{ cx }}
{{ fb.plotLabel }}
Aggregated, anonymised datasets you can share or sell to manufacturer & distributor partners — the industry signal LuminaPlot sees. No names, emails or per-account data ever leave this instance.
Before sharing or selling, make sure your privacy policy and user consent cover aggregated data sharing.
Fixture usage
Manufacturer signal
Placements per model & manufacturer across every plot — which fixtures working LDs actually hang, and what's trending in the last 30 days.
{{ expFixCount }}
Audience segments
Who uses LuminaPlot — use case, organisation type, console preference and how they found us. Counts only, no profiles.
{{ expAudCount }}
Growth & usage trend
Signups, paid conversions, plots created and active users per period — market-size context for the two datasets above.
{{ expGrowthCount }}
Insights portal clients
/insights ↗
Self-serve logins for statistic clients (rentals, manufacturers). Each client sees only the modules you grant — always aggregated and anonymised. Sign-ins and views land in the Activity log.
Login created for {{ icIssued.email }} — one-time password: {{ icIssued.password }}
Copy it now and send it to the client — it isn't shown again.
{{ icForm.title }}
Access — modules this client can see
{{ sc.mark }} {{ sc.label }}
{{ icError }}
{{ c.company }}{{ c.stTag }}
{{ c.email }} · {{ c.meta }}
{{ c.scopeLine }}
No client logins yet — create one to give a partner access to /insights.
Export log
Who exported or viewed what, when — CSV downloads from this tab plus every insights-portal login, view, drill-down and search.
{{ x.icon }} {{ x.text }} {{ x.tag }} {{ x.when }}
Nothing yet — CSV downloads and insights-portal activity will show up here.
Full history lives in Logs → Activity.
Account & system activity — logins, plan changes, admin actions, billing events, exports, and failures. Each row shows whether it succeeded. {{ adminFeedbackNote }}
Security signals
{{ s.label }}
{{ s.detail }}
{{ adminActivityCount }}
No activity logged yet
Logins, plan changes, exports and admin actions appear here as they happen.
{{ g.day }} {{ g.count }}
{{ a.action }} {{ a.detail }}
{{ a.nLabel }} Stripe ↗
{{ a.statusLabel }} {{ a.when }}
Error volume · last 14 days
Events per day, stacked by severity
fatal error warning
{{ adminErrChart }}
Top offenders (open)
{{ t.k }} {{ t.n }}
Open issues
{{ adminErrOpen }}
Events (open)
{{ adminErrEvents24h }}
Fatal
{{ adminErrFatal }}
New (24h)
{{ adminErrNew24h }}
Users hit
{{ adminErrUsers }}
By source
{{ adminErrPhp }} php · {{ adminErrJs }} js · {{ adminErrApi }} api
No errors logged.
Server exceptions, front-end JS errors and failed API calls will appear here.
{{ e.type }} {{ e.sev }} BOT {{ e.countLabel }} {{ e.when }}
{{ e.message }}
{{ e.loc }}
{{ e.meta }} · {{ e.agent }} · {{ e.firstSeen }}
Stack trace
{{ e.stack }}
Only add quotes you have permission to publish. These appear on the public landing page — they must be real and used with consent.
No testimonials yet.
The landing page shows a neutral panel until you add real, consented quotes.
“{{ t.text }}”
— {{ t.name }}{{ t.roleSuffix }}
{{ kp.k }}
{{ kp.v }}
{{ kp.s }}
{{ cf.label }}
{{ coErr }}
Loading companies…
No company workspaces yet.
One appears here when someone buys the Company plan or you comp one from a user's drawer.
No company matches that filter.
{{ co.name }}
{{ co.stLabel }} {{ fl.label }}
{{ co.domain }} · {{ co.owner }}
seats{{ co.seats }}
{{ co.mrr }}
MRR
{{ co.members }}
members
{{ co.plots }}
plots
{{ co.last }}
last active
Loading…
{{ co.err }}
{{ df.k }}{{ df.v }}
{{ co.dSeatsNote }}
In the workspace
{{ dc.v }}
{{ dc.k }}
Members
{{ mb.who }}
{{ mb.email }}
{{ mb.role }}
{{ mb.plots }}
{{ mb.last }}
Invites not accepted yet
{{ iv.email }}{{ iv.meta }}
A school is a set of verified email domains. Every account that signs up or signs in with a matching, verified address reads as Pro (or Company) until the agreement's end date — no codes, no rosters. Paid subscriptions always win: a student who subscribes keeps their own plan, and falls back to the school grant if they cancel.
{{ eduFormTitle }}
{{ eduErr }}
No school agreements yet.
Add one and every verified account on its domains gets Pro on their next sign-in.
{{ sc.name }}
{{ sc.planLabel }} {{ sc.stateLabel }}
{{ sc.domains }}
{{ sc.meta }}
{{ sc.notes }}
{{ sc.uUsers }}
accounts
{{ sc.uPlots }}
plots
{{ sc.uNew }}
new · 30d
{{ sc.uLast }}
last seen
The rack units that ship with the app. This tab does not edit them — the library is a file in the build, so every change goes through review rather than through a screen. What it does is hold the library to its own rule: a unit is only called spec verified when every figure came from the maker's own sheet, and everything else is named here so it can be looked up rather than guessed at.
{{ ak.k }}
{{ ak.v }}
{{ ak.s }}
What is still unverified
Every shipped unit has all of its figures from the maker. Nothing to chase.
{{ ag.field }}
{{ ag.n }}
{{ ag.units }}
{{ arlCount }}
{{ ar.name }}
{{ ar.make }}
{{ ar.size }} · {{ ar.kg }} · {{ ar.watts }}
{{ ar.faces }}
{{ ar.mount }}
{{ ar.badge }}
unverified: {{ ar.missing }}
{{ ar.note }}
{{ ar.el }}
Fixture usage
{{ fxStatNote }}
Aggregating fixture usage across every plot…
Couldn't reach the server for usage analytics. Showing what's available locally.
{{ k.value }}
{{ k.label }}
Usage trend {{ fxTrendArrow }} {{ fxTrendPct }} {{ fxTrendRecent }} recent · {{ fxTrendPrev }} prior {{ fxTrendWindow }}
Most-used fixtures
{{ r.rank }}
{{ r.icon }}
{{ r.name }}{{ r.badge }}
{{ r.placements }}
{{ r.plots }}
No fixtures placed in any plot yet.
Usage ranks here as plots are built.
Most-customised fixtures
{{ r.rank }}
{{ r.icon }}
{{ r.name }}{{ r.badge }}
{{ r.manuf }}
{{ r.placements }}
{{ r.plots }}
No customised fixtures in use yet. Edited & custom library models, plus fixtures users build themselves, will rank here.
Built-in {{ fxStatLibBuiltin }} Edited {{ fxStatLibEdited }} Custom {{ fxStatLibCustom }} User fixtures {{ fxStatUserFix }}
Likely fixture errors
{{ fxCrowdNote }}
{{ fxCrowdCount }}
{{ c.icon }}
{{ c.name }}{{ c.manuf }}
{{ c.kindLabel }} {{ c.fieldLabel }} {{ c.defLabel }} → {{ c.altLabel }}
{{ c.who }}
{{ c.share }}
By manufacturer{{ fxMfCount }}
{{ m.rank }}
{{ m.manuf }}
{{ m.placements }}
{{ m.models }}
No placements to roll up yet.
Never placed{{ fxUnusedCount }} · {{ fxUnusedPct }}
{{ u.icon }}
{{ u.name }}
{{ u.manuf }}
{{ u.badge }}
{{ fxUnusedMore }}
Every library fixture has been placed at least once.
⧉Possible duplicates{{ fxDupCount }}
{{ d.name }}{{ d.count }}
{{ d.variants }}
{{ d.placements }}
Needs a manufacturer{{ fxNoMfCount }}
These library fixtures were published without a manufacturer — assign one so they group and colour-code correctly for everyone.
{{ n.icon }}
{{ n.name }}
{{ n.meta }}
⌕
{{ adminFixCount }} · sort
{{ adminFixNote }}
{{ r.icon }}
{{ r.name }}{{ r.badge }}
{{ r.manuf }} · {{ r.meta }}
{{ r.usageLabel }}
No fixtures match.
Weekly briefing
AI
{{ briefStep }}
{{ briefCurrent.label }}
{{ briefCurrent.headline }}
{{ briefCurrent.week }} · {{ briefCurrent.when }}
{{ briefCurrent.body }}
{{ briefCurrent.calloutText }}
{{ st.label }}
{{ st.value }}
{{ st.arrow }} {{ st.delta }}
{{ briefCurrent.tableTitle }}
{{ tc }}
{{ td.v }}
{{ briefCurrent.listTitle }}
{{ li.bullet }} {{ li.text }} {{ li.note }}
{{ ch.title }}
{{ ch.svg }}
{{ act.icon }}
{{ act.label }}
{{ act.detail }}
{{ briefMissingNote }}
Earlier weeks
{{ bp.label }}
{{ bp.headline }}
{{ bp.week }} · {{ bp.when }}
{{ bp.body }}
{{ bp.calloutText }}
{{ st.label }}
{{ st.value }}
{{ st.arrow }} {{ st.delta }}
{{ bp.tableTitle }}
{{ tc }}
{{ td.v }}
{{ bp.listTitle }}
{{ li.bullet }} {{ li.text }} {{ li.note }}
{{ ch.title }}
{{ ch.svg }}
{{ act.icon }}
{{ act.label }}
{{ act.detail }}
Ask anything
{{ aiNote }}
AIGenerated by AI. Check before use.
Generate this week’s briefing
Health summary, the metric moving most (charted), odd or at-risk users, and one concrete recommendation.
{{ aiBusyQ }}
{{ aiBusyStep }}
{{ msg.q }}
{{ msg.when }}
{{ msg.headline }}
{{ msg.error }}
{{ msg.a }}
{{ msg.calloutText }}
{{ st.label }}
{{ st.value }}
{{ st.arrow }} {{ st.delta }}
{{ msg.tableTitle }}
{{ tc }}
{{ td.v }}
{{ msg.listTitle }}
{{ li.bullet }} {{ li.text }} {{ li.note }}
{{ act.icon }}
{{ act.label }}
{{ act.detail }}
{{ ch.title }}
{{ ch.svg }}
{{ msg.usedLabel }}
Competitions
No competitions yet. Create one, set its dates and flip it to Open — Pro users see it on their dashboard the moment it starts, and the whole feature stays invisible otherwise.
{{ adminCompForm.heading }}
Auto-grant Pro months on announce (0 = handled manually)
{{ tg.label }}
{{ tg.hint }}
Entry requirements — checked at submit, shown on the event card
{{ cr.title }} {{ cr.phase }} {{ cr.dates }} · {{ cr.stats }}
Entries
Loading…
{{ er.title }}DISQUALIFIED
{{ er.name }} · {{ er.email }} · {{ er.fx }} · {{ er.votes }} · {{ er.when }}
{{ cc.label }}
"{{ er.note }}"
Feature flags
New public features ship dark. While a flag is off, only admin and internal accounts can see or use the feature; everyone else gets a 404.
{{ f.key }}
{{ f.label }}
{{ f.state }}
{{ flagMsg }}
Application
All signups (master)
{{ appSettings.signupsDesc }}
{{ t.label }}
{{ t.desc }}
Free plan limits
Enforced on create & save; existing over-limit plots become read-only, nothing is deleted.
Social links
Leave a network blank until its account exists. Each link you fill in appears in the footer of every page and in the structured data search engines read (schema.org sameAs). Only a profile link on that network's own site is accepted.
{{ so.badNote }}
Database
Schema migrations
{{ adminDbSub }}
{{ adminDbWarn }}
{{ mg.file }} {{ mg.chip }}
{{ rp.text }}
Billing & limits
Free trials
{{ appSettings.trialsDesc }}
Pro trial length
Days of free trial at checkout. 0 uses the Stripe default.
Show prices including VAT
{{ appSettings.vatDesc }}
VAT rate shown
Display only — what is actually charged is worked out from the buyer’s country at checkout. Use your own country’s rate.
Default currency label
Used for new Company workspaces (quotes, invoices, budgets).
Max collaborators per plot
Hard cap on invites per plot. 0 = unlimited.
Features & safety
{{ t.label }}
{{ t.desc }}
Notifications
Email notifications go to {{ adminNotifyEmail }}. Choose which events you want to hear about, and how often you'd like an overview digest.
{{ t.label }}
{{ t.desc }}
Automatic alerts
Checked once a day by the cron job; triggered alerts are emailed to the admin address (no repeats while unchanged).
{{ t.label }}
{{ t.desc }}
Overview digest
A periodic summary of signups, subscriptions, plots and feedback.
{{ digestHint }}
{{ settingsSavedNote }}
{{ compose.title }}
→ {{ compose.to }}
Sent from the system address and recorded in the Email log.
{{ compose.quote }}
{{ es.k }}
{{ es.v }}
Service notice to every account
Notices are sent from the live server.
Run sql/42_service_notices.sql first.
{{ notIntro }}
{{ notHelp }}
{{ nl.subject }} {{ nl.state }} {{ nl.line }}
{{ notSendingLine }}
{{ notCapNote }}
{{ notMsg }}
{{ notErr }}
Failed by kind · 30 days
{{ f.kind }} {{ f.failed }} {{ f.rate }} {{ f.last }}
{{ emailDemoNote }}
No emails match. The log records every send from now on; older failures appear from the activity trail.
{{ em.kind }}
{{ em.subject }}
{{ em.to }} {{ em.name }}
{{ em.when }} {{ em.st }}
{{ emailView.kind }}
{{ emailView.subject }}
→ {{ emailView.to }} {{ emailView.when }} {{ emailView.st }}
{{ emailView.bodyEl }}
Transactional templates
Reword any system mail — leave a field empty to keep the default. Placeholders like {{ tplPhExample }} are filled per recipient; the first line becomes the heading, lines starting with “– ” become small print.
Send tests to Scores deliverability: send verify, receipt and re-engage there.
{{ t.label }} CUSTOM {{ t.vars }} ▾
{{ t.btnNote }}
Dashboard banner
Maintenance, update or info notice shown to every signed-in user.
{{ appSettings.maintStatusLabel }}
Times show in each user's own timezone. Banner hides itself when the window ends.
Quick
{{ appSettings.maintPrevIcon }}
{{ appSettings.maintPrevTag }} {{ appSettings.maintPrevTitle }}
{{ appSettings.maintPrevMsg }}
{{ appSettings.maintPrevTime }}
{{ settingsSavedNote }}
Broadcast announcement
Push an in-app notification to users' bell — maintenance notice, new feature, important update.
Type
Audience
Preview
{{ announcePreviewIcon }}
{{ announcePreviewTitle }}
{{ announceBody }}
just now
{{ announceNote }}
Sent broadcasts
Delivery per broadcast — and how many recipients actually saw it in their bell.
{{ h.icon }}
{{ h.title }}
{{ h.body }}
{{ h.aud }} {{ h.sent }}
{{ h.viewedIcon }}{{ h.viewed }}
{{ h.when }}
Nothing sent yet — broadcasts and their view rates will show up here.
Marketing email
Emails every verified user who hasn't opted out (Account → Emails). Each mail carries a one-click unsubscribe link. {{ mktRecipientNote }}
Audience
AIGenerated by AI. Check before use.
Header image
Insert: works in the subject too — click a field first; the preview shows sample values
Button — optional
Leave the label empty for no button. Merge fields work in the label too.
Preview
L LuminaPlot
{{ mktPrevSubject }}
{{ mktPrevBody }}
{{ mktPrevBtnLabel }}
You get this because you have a LuminaPlot account · Unsubscribe from these emails
{{ mktNote }}
{{ udName }}
{{ udEmail }}
{{ udPlanLabel }} {{ udStatusLabel }} {{ udVerifyChipLabel }} ADMIN 2FA ON
{{ udEduSchool }} — school agreement, until {{ udEduUntil }}. The plan is granted by email domain; change or end it under Schools, not here.
Plots
{{ udPlots }}
Racks
{{ udRacks }}
{{ udUnits }} unit drawings
Fixtures
{{ udFixtures }}
Shared with
{{ udShared }}
Joined
{{ udJoined }}
Last seen
{{ udLastSeen }}
Sessions
{{ udSessions }}
Renews / ends
{{ udRenew }}
Billing
{{ udBilling }}
Profile / About
{{ pf.k }} {{ pf.v }}
Recent plots
{{ rp.name }}
{{ rp.meta }}
View →
Consumer rights
{{ lg.k }}
{{ lg.v }}
Emails sent
{{ um.st }}
{{ um.subject }}
{{ um.kind }} · {{ um.at }}
Nothing sent to this user yet.
Recent activity
{{ ac.action }} {{ ac.at }}
Subscription
{{ udSubSummary }}
{{ udSubId }}
Company
{{ udCompanyName }}
{{ udCompanyMeta }}
Company seats
{{ udSeatsInfo }}
{{ udSeatsWho }}
{{ udSeatsBilling }}
{{ udSeatHint }}
{{ udSeatErr }}
Manage plan
Account
{{ apvName }}
{{ apvMeta }}
Loading plot…
{{ apvImgEl }}
Read-only · access is logged to the audit trail. {{ apvStats }}
{{ tstFormTitle }}
{{ cfTitle }}
1Start from
A venue type prefills the stage and audience — pick the closest, then fine-tune every number below.
Your venue profiles
{{ lc.name }} {{ lc.sharedBadge }} ×
2Details
Name it now or later — everything here can be changed in the editor.
3Stage & audience
In metres. The preview redraws as you type.
Stage
Audience
4Zonesoptional
Extra audience blocks, a FOH mix position, a bar. Add one, then drag it on the preview. Skip this if the main audience is all there is.
{{ rc.label }} ×
Room preview {{ roomCountLabel }} {{ roomPax }}
{{ cfSummary }}
{{ cfRigNote }} Drag a zone to move it, a corner to resize; − is stage-left of centre.
Venue plan loaded × QUICK RIGS
Truss Single bar Plaster Area {{ roomHint }}
{{ roomCanvas }}
or press Enter in the plot name
Venue-profile mode — the room you design here (stage, bars, zones, house infrastructure) is saved as a reusable venue, not a plot. Start shows in it from the create screen, card menus or the AI Designer.
{{ plotVenue }} {{ saveLabel }}
On-screen info
Label shows
Text size — Fixture IDs, labels & dimensions
Snap to grid
Snap to objects
Line up with the centre line, stage edges and other bars, zones & elements. Guides show while you drag.
Show grid
Grid spacing
m
X m
Y m
Auto-patch
{{ apPreview }}
Locked fixtures always keep their Fixture ID, universe and address — everything else patches around them.
Order
Order by
Walk bars
Along each bar
Group by fixture type
Drag rows to set the patch order — first in the list patches first. Type a universe number to pin a type there (e.g. dimmers and Spiiders both into U1, in this order); empty = follow the normal flow.
⠿ {{ tr.icon }} {{ tr.name }}
Universes
Universe strategy
Fixture IDs
Renumber FIDs
New hundred per type
{{ conflictLabel }}
{{ issueHeadLabel }}
Nothing flagged — patch, rigging and power all check out.
{{ ig.title }}
{{ ig.countLabel }}
{{ ig.caret }}
{{ it.label }}
{{ it.detail }}
{{ ig.moreLabel }}
{{ pp.initials }}
↻ synced
Read-only — this plot is locked on the Free plan. View and export only. Make it editable from the dashboard, or upgrade to Pro.
Live · always current This link always shows the latest version — updated {{ guestUpdatedAgo }}. No account needed to view.
Published · {{ pubLevelLabel }} {{ pubOwnerLabel }} View only — the owner chose what is shown here. No downloads or copies.
Your access to this plot was removed — it has stopped saving. Everything on screen is still here, and still on this device. Save it as your own plot to keep working.
Viewing {{ roOwnerName }}'s plot — read-only. Made with LuminaPlot. You can plot your own show the same way — free.
{{ pc.name }}
{{ underlayImgEl }}
{{ a.label }}
⟳
{{ a.rotBadge }}
CL
PLASTER LINE
{{ stageDimLabel }}
{{ houseDimLabel }}
SIDE ST.
SIDE ST.
{{ dm.text }}
{{ b.label }}
{{ bra.label }}
{{ hm.glyph }}
{{ hm.label }}
{{ cg.chip }}
{{ el.icon }}
{{ el.label }}
{{ fx.icon }} {{ fx.label }} {{ fx.subText }}
{{ tip.name }}
FID {{ tip.channel }} · {{ tip.pos }}
U{{ tip.universe }} / {{ tip.address }} · {{ tip.mode }}{{ tip.proto }}
Dimmer {{ tip.dimmer }}
{{ tip.purpose }}
{{ modeChipIcon }} {{ modeChipName }} · {{ modeChipHint }}
{{ hlChip }}
+
{{ libPickTitle }}
{{ libPickSubtitle }}
⌕
{{ libResultCount }}
{{ g.manuf }} online {{ g.count }}
{{ r.icon }}
{{ r.name }}
{{ r.meta }}
No matches.
Try the manufacturer name, or upload the .gdtf file directly.
{{ libSelIcon }}
{{ libSelName }}
{{ libSelSource }}
{{ libSelBadge }}
{{ libProvNote }}
DMX mode → footprint
{{ m.name }} {{ m.fp }} ch
Normalized to your schema
{{ f.label }} {{ f.value }} {{ f.tag }}
Max power {{ libStaticPower }}{{ libWTag }}
Unit weight {{ libStaticWeight }}{{ libWTag }}
Max power W {{ libWTag }}
Unit weight kg {{ libWTag }}
Plot color
Quantity
unchanged
Quantity
{{ libFootNote }}
G
Import fixture from GDTF
Normalized into your library — review before adding
{{ gReviewIcon }}
{{ gReviewName }}
{{ gReviewSource }}
{{ gReviewBadge }}
{{ gReviewProvNote }}
DMX mode → footprint
{{ m.name }} {{ m.fp }} ch
Normalized to your schema
{{ f.label }} {{ f.value }} {{ f.tag }}
Max power W {{ gWattsTag }}
Unit weight kg {{ gKgTag }}
●Amber "fill in" fields were missing from the GDTF file — add them so the rig load & power reports stay accurate.
Plot color
Quantity
{{ gReviewFootNote }}
{{ gdtfBatchTitle }}
{{ gdtfBatchSub }}
Apply to all
{{ gdtfBulkNote }}
{{ g.name }}
{{ g.manuf }} · {{ g.meta }}
{{ g.warnText }}
{{ adminFixTitle }}
Crowd correction applied
{{ afxCrowdHint }}
AIGenerated by AI. Check before use.
{{ afxAiNote }}
Class
Symbol
{{ t.icon }}
{{ t.label }}
DMX modes
ch
{{ invFormTitle }}
GDTF import{{ gdtfMfr }}
{{ gdtfNote }}
Fixture class
Intelligent
DMX-addressed · modes & footprint
Conventional
Dimmer channel · 1 ch
Symbol
{{ sy.icon }}
{{ sy.label }}
Colour
DMX modes
Save changes to
{{ ivForkNoteText }}
{{ ghost.icon }}
{{ eggShow }}
LuminaPlot
A quick tour of the editor
click outside to exit
Quick start
Build a plot in a few moves
{{ tip.icon }}
{{ tip.title }}
{{ tip.body }}
Tip — press ? any time for keyboard shortcuts.
App by The Async × UpMix Music Group
Opening secure checkout…
{{ promoRedirect.text }}
{{ toastMsg }}
Offline {{ offlineNote }}
New show at venue
Copies “{{ venueDlg.srcName }}” — rig, patch and paperwork — onto a saved venue profile. Room, zones and house infrastructure come from the venue.
Venue profile
{{ vl.name }} {{ vl.dims }}
No saved venue profiles yet. In the editor, use More ▾ → Save room as venue profile to capture a room — then duplicate any show onto it here.
Comment
{{ commentDlg.meta }}
DMX universe map
Each cell is one address — hover for the fixture, click to jump to it on the plot. Red marks overlapping footprints.
{{ ds.v }}{{ ds.k }}
Universe {{ un.u }} {{ un.meta }} {{ un.freeNote }}
1128256384512
{{ un.conflictNote }} — {{ un.conflictDetail }}
Free: {{ un.freeRanges }}
AddressFIDFixtureModePosition
{{ pr.range }} {{ pr.ch }} {{ pr.name }} {{ pr.mode }} {{ pr.pos }}
Patch export
No patched fixtures yet — place fixtures and they'll show up here by universe.
{{ lg.name }}{{ lg.count }}
⌕ ESC
{{ pi.icon }}
{{ pi.label }}
{{ pi.hint }}
{{ pi.kind }}
No matches — try a plot name, Fixture ID or action.
Keyboard shortcuts
{{ grp.title }}
{{ k }}
{{ r.does }}
Press ? anywhere in the editor to open this sheet.
Venue underlay
Put the venue's ground plan behind your plot — an image (PNG / JPG / SVG) or a CAD DXF. Set its real-world width to scale it, then draw on top. It never prints on paperwork.
Export snapshot
A JSON file of this instance as it stands right now — for a board pack, a hand-over, or a record before a migration. It exports what this screen has already loaded, so the file matches what you are looking at.
{{ snapNote }}
{{ confirm.title }}
{{ confirm.message }}
Build a linked structure
Legs are butted together at the corners. Afterwards each leg edits like any other position — move one and the corner follows.
{{ shapePreview }}
Truss profile
{{ shapeSource }}
READ FROM TABLE
{{ shapeChart }}
FITTED MODEL — CHECK THE CHART
{{ shapeSummary }}
Add a unit
Real gear, drawn to scale. Weight and draw come from the maker's own spec sheet — where they don't publish one, the card says so rather than guessing.
{{ upCount }}
Nothing matches that. If the unit you need isn't here, Draw a unit builds it — panel, connectors, weight and draw — and keeps it in your library.
{{ uu.name }}
{{ uu.make }}
{{ uu.meta }}
{{ uu.badge }}
{{ uu.el }}
{{ uu.note }}
Unit designer
{{ ueSize }} · {{ ueCount }}
{{ pg.grp }}
{{ ueHint }}
{{ ueCanvas }}
What this unit is
{{ usT }}
{{ usRepeatHint }}
Nothing selected. Click a part on the panel to move it, resize it or give it a label.
{{ ln }}
{{ ln }}
Thanks for the feedback!
We read every message.
{{ feedbackTitle }}
{{ feedbackHint }}
{{ feedbackPlotNote }}
{{ rackTitle }}
{{ rackKindLabel }} — {{ rackBlurb }}
{{ rackSummary }}
Replaces everything in this rack with a saved design of the same type.
{{ rw.text }}
Cables
{{ rackCableCount }}
Patch on the drawing
{{ rackPatchHint }}
The rack’s own connectors — what a snake or a feed plugs into.
None yet. Add one for every cable that arrives at or leaves this rack, then patch a device to it.
{{ io.dir }}
Front
Rear
{{ io.where }}
Numbers
{{ rackNoNote }}
Cable numbers here are a preview. Placed in a plot, this rack's cables are numbered across that plot.
Both ends are picked from what is in the rack and the sockets it actually has, so the schedule cannot name a socket that does not exist. It prints on the rack sheet and exports as its own CSV.
{{ tg.title }}
{{ ch.label }}
Nothing documented yet. A rack that travels with its cable schedule is one somebody else can rebuild.
{{ cb.no }}
{{ cb.fromName }} {{ cb.fromPort }} → {{ cb.toName }} {{ cb.toPort }}
{{ cb.meta }}
{{ cb.loom }}
{{ cb.editNote }}
Nothing in it yet. Add a unit for real gear with the maker's weight and draw, or click any free unit below to place from this rack's own device list.
{{ pn.u }}
{{ rackWires }}
{{ pn.el }}
{{ by.el }}
{{ rackFaceNote }}
Selected device
{{ rgBadText }}
{{ rackPickHint }}
The case
The loaded weight counts into any bar or truss this rack is hung on, and its draw joins the rig on the Power tab. Depth is checked against every device that has one on record — {{ rackDeepest }}. {{ rackPhysNote }}
Rack hookup
{{ rackHookupTotal }}
Nothing racked yet. Add a unit puts real gear in, with the maker's weight, draw and panel.
✓
Work notes
Tasks for the crew — saved with the plot, checkable on mobile.
No notes yet. Select a fixture or element and hit “+ Note on selection” to pin a task to it — “refocus ch 12”, “swap lamp”, “gel to L201”.
✓
{{ w.meta }}
Tech rider
Prefilled from this plot — edit anything. Saved with the plot; prints as a document in the PDF pack.
Profiles — reusable contacts, hospitality & terms
{{ pr.name }}
Contacts
✓
{{ sec.label }}
Ticked sections print in the PDF pack as the “Tech rider” document.
This plot changed on the server
Someone else saved this plot while you were editing — probably a collaborator. Autosave is paused so nobody's work gets silently overwritten. Whichever you pick, the other version is kept in Version history.
Version history
Snapshots auto-save while you work. Restore or compare any point.
Changes since {{ verDiff.label }} · {{ verDiff.when }}
{{ c.text }} No differences — the plot matches this snapshot.
{{ verDiff.svg }}
added removed (×) moved (dashed trail from old spot) patch / detail edited
No versions match.
No saved versions yet.
Use “Save a version” to capture this state, or keep editing — autosnapshots appear here.
{{ v.when }}
{{ v.label }} · {{ v.fixtures }} fixtures
Keeps the last 30 snapshots
Plot details
Credits
Print / Save as PDF
Pick your page setup and documents, then use the browser’s “Save as PDF”.
Orientation
Portrait
Tall page
Landscape
Wide page
Documents
✓
Cover sheet
✓
Contents page
✓
Title block
✓
Plot drawing
✓
Fixture legend / key
✓
Instrument schedule
✓
Fixture count summary
✓
DMX patch sheet
✓
Per-position worklists
✓
Magic sheet
✓
Truss build sheet
✓
Rack schedule — what is in every rack, unit by unit
✓
Cable schedule — runs, DMX chains and a pull list
✓
Point load summary — for the venue
✓
Line-set schedule — counterweight sets
✓
Bridle report — leg lengths, angles & tensions
✓
Tech rider — specs, contacts, hospitality, terms
✓
Audio pack — input list, patch & monitors
✓
Cue sheets — lighting, followspot & stage calls
✓
Soft-goods / curtain schedulePRO
✓
Focus charts — notes & ladder photos · Pro
✓
Colour, gobo & accessory schedulePRO
Cue sheets in this print
✓
A page per spot / department
{{ printScaleWarn }}
Section order
{{ sr.num }} {{ sr.name }}
Saved settings
Everything on this screen — paper, scale, margins and which documents are in the pack. Saved to your account, so it is there on the next show. The cue sheet is not kept, since it belongs to this plot.
For page numbers, turn on “Headers and footers” in your browser’s print dialog — a web page can’t number its own pages. Every page already carries the venue and plot name.
{{ printDocCount }}