Appearance
Plans, billing & what each unlocks
LED.FYI has three plans (Free, Pro, and Studio), managed from Account menu → Plan & billing…. This page is the authoritative list of what each plan allows, and how upgrading, downgrading, and billing management work.
The three plans at a glance
| Plan | Price | Pitch |
|---|---|---|
| Free | $0 | Design a wall and export it. 1 screen · 1 surface · 1 output, up to 32 panels per screen, PNG/PDF/JSON export, local projects. |
| Pro | $14.99/mo or $119.99/yr | For working installers. 12 screens · 12 surfaces · 4 outputs, up to 300 panels per screen, CSV export + custom branding, 50 cloud projects & share links. |
| Studio | $34.99/mo or $289.99/yr | Teams, production companies & rental houses. Unlimited screens/surfaces/outputs/panels, DXF (CAD) export, unlimited cloud projects & shares, team seats & centralized team billing. |
Studio is also sold as team seats: a team owner buys any number of seats self-serve (volume discounts from 10 seats up), and every licensed member gets full Studio; pricing table and flow on Teams & roles.
The dialog header shows your current plan and subscription status, for example Current plan: Pro · active. Where the plan comes from something other than your own subscription, the header says so:
| Header ends with | Your plan comes from |
|---|---|
· via your team | A team seat on a team with an active subscription. |
· sponsored | A team seat on a team LED.FYI sponsors. |
· N days left | A free trial, from a code you redeemed or one LED.FYI gave you. It counts down. |
· complimentary | Complimentary access from LED.FYI, with no end date. |
A monthly / yearly toggle switches the displayed prices and the checkout interval.
The full entitlement matrix
| Capability | Free | Pro | Studio |
|---|---|---|---|
| Export formats | JSON, PNG, PDF | + CSV | + DXF (CAD) |
| Active share links | 0 | 50 | Unlimited |
| Cloud projects | 0 (local-only) | 50 | Unlimited |
| Custom PDF branding (title blocks) | No | ✓ | ✓ |
| Spectacle AR shares (iOS AR) | No | ✓ | ✓ |
| Spectacle Pro on iOS (account linking) | No | ✓ | ✓ |
| Publish equipment to the team library | No | ✓ | ✓ |
| Screens | 1 | 12 | Unlimited |
| Surfaces | 1 | 12 | Unlimited |
| Outputs | 1 | 4 | Unlimited |
| Panels per screen | 32 | 300 | Unlimited |
Notes on the caps:
- Screens, surfaces, and outputs hard-block the add action once you're at the cap.
- Panels per screen hard-blocks too. Resizing a screen past your plan's limit is refused, and a project containing an over-limit screen won't open, whether from a file, from the cloud, or from your local history alike. The message names the smallest plan that opens it and where that plan stops, for example "Upgrade to Pro to open this project. Pro allows up to 300 panels per screen. Studio has no limit." Two things keep that from stranding you: making an over-limit screen smaller is always allowed (so a screen is never stuck over the line), and a screen sitting exactly on the limit is fine: 32 panels is allowed on Free, 33 is not. The limit counts LED panels only: blank (spacer) panels are structure, not pixels, and don't count. That's the Panels figure the Screen inspector shows, so the number you're judged on is the one on screen.
- Spectacle Pro comes with the subscription, not on top of it. Any active LED.FYI access unlocks it (a personal subscription, a Studio team seat, or a trial or complimentary account), and it lasts exactly as long as that access does. You claim it once, from the iPhone, by linking your account.
- Quotas count account-wide, not per project. Revoking or expiring a share and deleting a cloud project free quota immediately.
- Share and cloud-project quotas are enforced on the server as well, so they can't be worked around client-side.
- Team-scoped features: publishing to the team library happens inside a team; creating one is free in the Team dialog; the plan gate (Pro+) applies on top.
Hitting a limit
A blocked action shows a toast like "Upgrade to Pro to unlock this" with a View plans button that opens this dialog. When the block is a cap (screens, surfaces, outputs, or panels per screen), the toast also says where each bigger plan stops, so you can pick one that fits the whole build, for example "Your plan does not include more than 32 panels on one screen. Pro allows up to 300 panels per screen. Studio has no limit." Typical places you'll meet a gate: the export menu (CSV/DXF), the Share dialog, and the add-screen/surface/output buttons.
Buying a plan for the first time
From Free, pick the interval and click Upgrade to Pro or Upgrade to Studio. Checkout happens on Stripe. In the web app, Stripe sends you back to LED.FYI afterwards, and the app checks for the new plan and tells you how it went (the desktop app works a little differently; see below):
| Notice | What it means |
|---|---|
| Payment confirmed: "You're on the Pro plan." | The plan is active on your account. |
| Payment received: "Your upgrade will appear shortly. Try refreshing in a minute." | Stripe took the payment but hasn't confirmed it to LED.FYI yet. It stays on screen until you close it. |
| Checkout cancelled: "No charge was made." | You left the Stripe page without paying. |
Changing plan once you're paying
On a paid plan, the other paid card's button reads Change plan in Stripe. It takes you to Stripe's billing portal, on the plan-change screen for the subscription you already have; it never starts a second one, so you are never billed for two plans at the same time.
Nothing is charged until you've seen the amount and agreed to it. Pick the plan in the portal and Stripe shows you exactly what it will charge (or credit) for the days left in your current billing period, and asks you to confirm. Your renewal date doesn't move. The dialog says this under the plan cards before you click, too: "Stripe shows the prorated amount and asks you to confirm before charging."
A downgrade between two paid plans is the same journey: the unused value of the plan you're leaving comes back as a credit against future invoices, and Stripe shows you that figure before you confirm.
Your account always shows the plan you're actually paying for. When a plan is changed for you directly in Stripe (for example by support), Stripe can leave the old plan listed on your subscription at a quantity of zero, next to the new one. LED.FYI ignores any plan you're billed zero for, so the new plan is the one you get, so you don't need to ask for the old line to be removed.
If your payment is already failing, the button still takes you to the portal, just to its main page: fix the card there first, then change the plan.
Buying or changing a plan in the desktop app
In the desktop app, Upgrade, Change plan in Stripe and Manage billing open Stripe in your web browser rather than inside the app window. A notice in the app says so (Checkout opened in your browser or Billing opened in your browser): "Finish there, then come back to LED.FYI. Your plan updates here automatically." Finish in the browser, then switch back to LED.FYI: each time you return (for up to an hour), the app re-checks your plan and, if it changed, tells you Your plan has been updated: "You're now on the Pro plan." There is nothing to restart or refresh.
Managing, canceling & going back to Free
Manage billing (bottom-left of the dialog) opens the same Stripe customer portal; that's where you change the payment method, switch intervals, download invoices, or cancel. It's greyed out on the Free plan, where there is nothing to manage. The Free card in the dialog deliberately has no button; it just says "Downgrade in billing", because dropping to Free means ending the subscription rather than changing it.
Cancelling doesn't take effect immediately, and the dialog tells you when it will. You keep the plan you have paid for until the end of the current billing period, so nothing disappears mid-project. Once a cancellation is registered, your current plan's card reads Cancels followed by your period end date, for example Cancels Sep 30, 2026 (the date is written the way your browser writes dates). That line is the confirmation that the cancellation went through. On the day itself the account drops to Free.
If you cancel and don't see that line, the cancellation has not reached us: check the Stripe portal again rather than assuming it worked.
When a payment doesn't settle straight away
Card retries, bank-authorised payment methods and automatic refunds can leave a subscription in an in-between state for a while. A failed renewal keeps your plan working while Stripe retries, so you don't lose Pro or Studio mid-project over one declined charge. A subscription that has never successfully been paid, or that Stripe has given up retrying, falls back to Free until the payment goes through; nothing gets stuck, and the plan comes straight back when it does.
Studio via a team seat
If a team seat elevates you to Studio, there's nothing to buy personally, and your header reads Studio · active · via your team (or ends · sponsored). Seat licensing and team subscriptions are managed in the Team dialog by the team's owner.
A seat only elevates you while the team's own subscription is active (or the team is sponsored by LED.FYI). If the team hasn't subscribed yet, or its payment has failed, a seat can still be assigned to you, but you stay on your personal plan until the team's billing is current, and the Team dialog marks those seats Licensed · not active for everyone on the roster.
If the team's plan ends up paying for fewer seats than its members hold (say, after a seat change in Stripe), your seat keeps working: the owner and admins are shown the difference and settle it themselves. Seats never disappear on their own: when someone leaves, their seat stays with the team for the owner or an admin to reassign. See Teams & roles.
How quickly a plan change reaches Spectacle
Once you have linked your account, Spectacle re-checks with LED.FYI about once a day (and when you next open the app), so an upgrade shows up there within a day and a cancellation stops it just as quickly. Nothing to configure and nothing to re-link; the check happens between the two services.
Desktop & offline
The desktop app keeps your paid plan working for up to 30 days offline via a signed license (a plan held through a free trial or complimentary access included, though never past the trial's end), then lapses to Free until you reconnect; see the offline license. And a self-run build with no cloud configured has no plans at all: everything is unlocked.
Trial and promo codes
If LED.FYI has given you a trial code, redeem it in the same dialog: type it into the Have a code? box at the bottom and click Redeem or press Enter. On success you see "Trial started. Your new plan is active.", the plan unlocks straight away, and the header counts down the days left (· N days left).
A trial only ever raises your plan. If you already have a plan at least as high, the code adds nothing, and it still counts as your one code, so don't redeem it until you need it. When the trial ends, you go back to whatever plan you had without it. Nothing is charged at any point, and there is nothing to cancel.
Each account can redeem one trial code, ever. If a code is refused, the dialog says why:
| Message | Why |
|---|---|
| "That code isn't valid." | No code with that spelling exists. Check it and try again. |
| "That code has been withdrawn." | LED.FYI turned the code off. |
| "That offer has ended." | The code's redemption period is over. |
| "That code has been fully used." | Every redemption the code allowed has been taken. |
| "You've already used a trial code on this account." | This account has redeemed a trial code before. |
| "Sign in first, then redeem your code." | Your session expired. Sign in again and retry. |

