Ember Dusk
Warm dusk neutrals with a glowing ember accent.
Download ember-dusk.jsonA custom theme is one small .json file. Download a starter, change a few numbers, import it, and the app checks it for you. Your screenplay pages, PDFs and call sheets stay black on white.
A theme changes colours only. Yours is a text file with a name and five numbers: two for the greys, three for the accent. From those the app builds the whole look, in Light and in Dark. You can also set single colours yourself.
The app checks every theme before it keeps it. Text must be easy to read: at least 4.5 to 1 against its background. If a theme is only a little under, the app fixes it for you and tells you what it changed. A theme file cannot do anything except set colours.
These work in Light or Dark, or follow your system with System. High Contrast is for people who need stronger separation.
Download one and import it as it is, or open it in any text editor and change the numbers to make it yours. Each preview shows Light on the left and Dark on the right.
Warm dusk neutrals with a glowing ember accent.
Download ember-dusk.jsonDeep green-tinted surfaces with a fresh moss accent.
Download forest-hour.jsonNear-neutral graphite with a clear gold accent.
Download graphite-gold.jsonCool grey-blue surfaces with a calm sea-glass accent.
Download harbour-mist.jsonSoft paper neutrals with a warm lantern-red accent.
Download paper-lantern.jsonPlum-tinted neutrals with a bright rose accent for evening work.
Download plum-premiere.jsonThe same steps work for a starter, a file a friend sent, or one you made.
Start from a starter, or copy the example below. Open it in a plain text editor such as Notepad or TextEdit (in plain text mode), change it, and save it with the ending .json.
{
"formatVersion": 1,
"id": "my-first-theme",
"name": "My First Theme",
"description": "Quiet blue-grey with a warm orange accent.",
"author": "Your name",
"seeds": {
"neutralHue": 250,
"neutralTint": 0.02,
"accentHue": 55,
"accentChroma": 0.16,
"accentLightnessNudge": 0
}
}id is for the app, name is what you see in My Themes. If you started from a starter, change both, or the app refuses the theme as a copy.accentHue to change the colour of buttons, then accentChroma to make it calmer or livelier. Move neutralHue and neutralTint to colour the greys.If the five numbers do not give the exact colour you want, add an overrides group after seeds, with a comma between them. Colours are written as #rrggbb, #rgb, or oklch(L% C H), where L is 0 to 100 with a percent sign, C is 0 to 0.4 and H is 0 to 360.
"overrides": {
"light": { "bg": "#f7f4ee" },
"dark": { "accent": "oklch(72% 0.15 55)" }
}The readability check still applies to what you set, so the app may adjust button text or accent text, and refuses a colour that leaves text too faint.
These are all the settings a theme file can have. Anything else is refused.
| Field | Needed | Allowed | What it does |
|---|---|---|---|
formatVersion | Needed | The number 1 | Says which version of the file layout you are using. |
id | Needed | 3 to 40 characters: lowercase letters a to z, digits and hyphens | The internal name. It must be new: not the id of a built-in theme, and not one already in My Themes. |
name | Needed | Up to 60 characters | The name shown in My Themes. It must have a letter or digit and may not be the name of a built-in theme. The signs < and > are not allowed. |
description | Optional | Up to 200 characters | One line about the look. |
author | Optional | Up to 80 characters | Shown as "By ..." under the name. |
seeds | Needed | A group with the five numbers below | The five numbers that build the whole theme, in Light and in Dark. |
overrides | Optional | A group with "light" and "dark" | Set single colours yourself. See the next table. |
| Seed | Needed | Allowed | What it does |
|---|---|---|---|
neutralHue | Needed | 0 to 360 | The colour tint of the greys: backgrounds, panels, lines. It is a position on the colour wheel. Roughly: 30 red, 70 orange, 100 yellow, 145 green, 200 teal, 260 blue, 310 purple, 350 pink. |
neutralTint | Needed | 0 to 0.04 | How much of that colour the greys carry. 0 is pure grey, 0.01 is a hint, 0.03 is clearly tinted. |
accentHue | Needed | 0 to 360 | The colour of buttons, selected items and links, on the same colour wheel. |
accentChroma | Needed | 0 to 0.25 | How vivid the accent is. 0 is grey, 0.1 is calm, 0.17 is lively. |
accentLightnessNudge | Needed | -12 to 16 | Makes the accent lighter (positive) or darker (negative). 0 keeps the standard lightness. |
| Name | What it colours |
|---|---|
bg | The window background |
panel | Panels, cards and dialogs |
surface2 | Table headers and soft sections |
surface3 | Raised areas and button hover |
hover | A row you point at |
well | Sunken areas, such as preview panes |
chrome | The status bar at the bottom |
ink | Main text |
ink2 | Second-level text |
muted | Quiet text and hints |
line | Thin borders |
line2 | Stronger borders |
side | The left rail |
side2 | A pointed-at item in the left rail |
side-ink | Text in the left rail |
side-mut | Quiet text in the left rail |
accent | Buttons and selected items |
accent-ink | Text on accent buttons |
accent-d | Accent text, such as a selected item or a link |
lg1 | First colour of the logo gradient |
lg2 | Second colour of the logo gradient |
lg3 | Third colour of the logo gradient |
The whole file must stay under 10 KB. My Themes keeps up to 100 themes. The file must be saved as ordinary text.
When a theme cannot be used, nothing is saved and nothing changes. The red box lists every problem at once, using these words. Fix them all, then import the file again.
| What you see | What it means | How to fix it |
|---|---|---|
| Copy the theme file to this computer first (for example to Downloads), then import it. | The file sits in a network folder. | Copy it to a normal folder on this computer and pick it again. |
| The theme file is larger than 10 KB. Theme files are small; this is not one. | A theme file is a few hundred characters. The file you picked is far bigger, so it is probably not a theme. | Check that you picked the right file. If it is yours, remove everything the list below does not describe. |
| This is not a theme file. OpenFrame theme files are small JSON documents. | The text is not written in the file layout. A missing comma, a missing quote or a missing closing brace is the usual cause. | Put a comma after every line except the last one in a group. Use straight double quotes. Start with { and end with }. Compare with the example above. |
| This is not a theme file. It must be one JSON object. | The file starts with something other than {, for example a [ or a plain word. | Make the first character { and the last character }. |
| The theme is empty. | The file or the pasted text has nothing in it. | Paste the whole text of the file, from { to }. |
| Please choose a theme file, not a folder or device. | You picked something that is not a file. | Pick the .json file itself. |
| What you see | What it means | How to fix it |
|---|---|---|
| The file has a setting OpenFrame does not know: "colour". | A name in the file is not one of the allowed names. Misspellings land here. | Use only formatVersion, id, name, description, author, seeds and overrides, spelled exactly like that, capital letters included. |
| The file has no "formatVersion". / "formatVersion" must be 1. | The version line is missing or has another value. | Add "formatVersion": 1. |
| This theme was made for a newer version of OpenFrame. Update OpenFrame to use it. | The file uses a number above 1. | Update the app, or change the number to 1 if you wrote the file yourself. |
| The id "My Theme" is not allowed. Use 3 to 40 lowercase letters, digits or hyphens. | The id has capitals, spaces or other signs, or the wrong length. | Write it like my-first-theme. |
| The id "ember-dusk" belongs to a built-in theme. Change the id in the file. | You used the id of a built-in theme. | Pick another id. |
| A theme with the id "ember-dusk" is already in My Themes. Delete that theme first, or change the id in the file. | You imported this id before. | Change the id in the file, or delete the old one under My Themes. |
| "Studio Amber" is the name of a built-in theme. Give this theme its own name. | The name matches a built-in theme. Capitals and extra spaces do not make it different. | Change the name. |
| The theme name is longer than 60 characters. / The description is longer than 200 characters. / The author is longer than 80 characters. | A text is too long. | Shorten it. |
| The theme name contains characters that are not allowed (invisible or control characters, or < >). | The text has hidden characters or the signs < or >. | Retype the text by hand. |
| The theme name needs at least one letter or digit. | The name is only signs. | Add a word. |
| "name" must be text. | The value is a number or a group, not words in double quotes. | Put it in double quotes. |
| What you see | What it means | How to fix it |
|---|---|---|
| The file has no "seeds" object. | The "seeds" group is missing. | Add it with all five numbers. |
| Seed "accentHue" is missing. | One of the five numbers is missing. | Add it. |
| Seed "accentHue" must be between 0 and 360. | The number is outside its range. The message names the range. | Use a number inside the range from the table above. |
| Seed "accentHue" must be a number. | The value is in quotes or is words. | Remove the quotes: 250, not "250". |
| "seeds" has a value OpenFrame does not know: "tint". | A seed name is misspelled or extra. | Use only the five names from the table. |
| What you see | What it means | How to fix it |
|---|---|---|
| "overrides" must be an object with "light" and "dark". / "overrides" may only have "light" and "dark", not "night". | The group has the wrong shape or an extra name. | Use only "light" and "dark", each holding colours. |
| "overrides.light" must be an object. / "overrides.light" has too many entries. | A mode holds the wrong thing, or more entries than there are colours to set. | Put one colour per name, inside curly braces. |
| "sidebar" cannot be changed by a theme file. Allowed: bg, panel, ... | The colour name is not one of the allowed names. The message lists them. | Use a name from the colour table. |
| The colour for "ink" (light) is not allowed. Use #rrggbb or oklch(L% C H). | The colour is not written in one of the two accepted ways, or a number is out of range. | Write #1b1b1f, #fff, or oklch(24% 0.02 260). The first number is 0 to 100 with a percent sign, the second 0 to 0.4, the third 0 to 360. |
| What you see | What it means | How to fix it |
|---|---|---|
| Light mode: Muted text on panels is too hard to read (3.20 to 1; at least 4.5 to 1 is needed). | After the app's own small corrections, this text is still too faint against its background. The theme is not saved. | Make the text colour darker or the background lighter (or the other way round in Dark). Change the colour that the message names, or the seeds, and check again. |
| My Themes is full (100 themes). Delete a theme first. Nothing was changed. | My Themes keeps up to 100 themes. | Delete one you no longer use. |
| The theme file changed after it was checked. Check it again. Nothing was changed. | You edited the file while the result was open. | Close the result and import the file again. |
These are not errors. A blue box lists them when a theme is a little under 4.5 to 1. You can save the theme as it is. Examples:
One app for the whole film, on your own computer. One payment, no subscription.