Blade & Color Profiles — A Beginner's Guide for Crystal Focus X
This guide explains how the CFX determines which blade profile and color profile is active for each sound font, and how you can control this.
Two Separate Profile Systems
The CFX has two independent profile systems that work together to define your saber's look:
| System | What It Controls | Config File | Section Header |
|---|---|---|---|
| Blade Profile | Visual effects: flicker speed & depth, shimmer, ignition/retraction styles, bolt behavior, accent LED style, GraFx/Pixies style assignments | config.txt (root) | [profile=0], [profile=1], ... |
| Color Profile | Colors only: blade color, clash color, blast color, lockup color, crystal color, stab color, drag color, flicker color, FX color | colors.txt (root or per-font) | [color=0], [color=1], ... |
Think of it this way: the blade profile decides how your saber looks (effects, animations, behavior), and the color profile decides what color it is.
Both systems support up to 32 profiles each ([profile=0] through [profile=31], [color=0] through [color=31]).
Where Profiles Are Defined
Blade Profiles — config.txt
Blade profiles are defined in config.txt on the root of the SD card, inside numbered section headers:
[profile=0]
pname=Sith Lord
flks=60
flkd=30
pulsed=20
pulsel=500
style_pon=3
style_poff=2
style_flicker=1
style_grafx1=1
style_pixies=1
[profile=1]
pname=Jedi Knight
flks=80
flkd=15
pulsed=10
pulsel=800
style_pon=5
style_poff=4
style_flicker=2
style_grafx1=2
style_pixies=2
style_grafx1=, style_pixies=, style_pon=, style_poff=, and all other style assignments live. When you switch blade profiles, you change which GraFx folder, PIXIES folder, ignition style, etc. are active.Color Profiles — colors.txt
Color profiles are defined in colors.txt. This file can exist in two places:
- Root of the SD card — global color profiles, shared across all fonts
- Inside a font folder (e.g.
01-MyFont/colors.txt) — font-specific overrides
[color=0]
cname=Blue Jedi
color=0,0,255
fcolor=255,255,255
bcolor=255,255,255
lcolor=255,200,50
xcolor=0,100,255
[color=1]
cname=Red Sith
color=255,0,0
fcolor=255,200,0
bcolor=255,100,0
lcolor=255,150,0
xcolor=255,0,50
How the CFX Decides Which Profile to Use
start_blade and start_color are used whenever they are set to a value other than -1. The fallback to prefs.txt only happens when the value is -1 or not present.When you switch to a font (or power on the saber), the CFX goes through this decision process for both the blade profile and color profile:
Priority Order (highest first)
1. start_blade= / start_color= (in this font's font_config.txt)
↓ if not specified
2. Last-used profile (saved automatically in prefs.txt)
↓ if no saved preference
3. Profile 0 (hardcoded default)
Step by Step
- Read
prefs.txt— The CFX loads the last-used blade profile and color profile for every font fromprefs.txt(auto-generated file on the SD card root).
- Read
config.txt— The CFX loads all blade profile definitions ([profile=0],[profile=1], etc.) and global settings.
- Read root
colors.txt— The CFX loads all global color profile definitions ([color=0],[color=1], etc.).
- Load the active font — The CFX reads the font's
font_config.txt:
- If
start_coloris set to anything other than-1→ CFX uses that color profile for this font. If it is-1or omitted, CFX uses the last-used value fromprefs.txtinstead - If
start_bladeis set to anything other than-1→ CFX uses that blade profile for this font. If it is-1or omitted, CFX uses the last-used value fromprefs.txtinstead
- Read font-specific
colors.txt(if present) — If the font folder contains its owncolors.txt, those color profiles overwrite the global ones. For example, if the global[color=0]is blue and the font's[color=0]is green, green wins.
- Apply profiles — The CFX applies the chosen blade profile and color profile. Every subsystem (blade, motion, blaster, accents) gets updated.
The prefs.txt File
The CFX automatically saves your last-used profiles in prefs.txt on the SD card root. You never need to edit this file manually — it's updated every time you change profiles.
//Saber Prefs
bank=02
[font=0]
color=0
profile=0
[font=1]
color=1
profile=2
[font=2]
color=0
profile=1
This says:
- Font 0 was last using color profile 0 and blade profile 0
- Font 1 was last using color profile 1 and blade profile 2
- Font 2 was last using color profile 0 and blade profile 1
- The last active font was #2
When you switch back to a font, the CFX restores whatever blade and color profile you were using last time — unless the font's font_config.txt has a start_blade= or start_color= override.
Forcing a Specific Profile per Font
If you want a font to always start with a specific profile (ignoring whatever was saved in prefs.txt), add these to the font's font_config.txt:
start_color=2
start_blade=1
This forces:
- Color profile 2 every time this font loads
- Blade profile 1 every time this font loads
start_blade=3 (if profile 3 is your unstable config) and start_color=1 (if color 1 is red) to that font's font_config.txt.To not force a profile, simply omit the key or set it to -1:
start_color=-1
start_blade=-1
What -1 means: it means “do not use a fixed startup profile here.” When start_blade or start_color is -1, CFX falls back to the last-used blade profile and color profile saved for that font in prefs.txt. If there is no saved value yet, it falls back again to profile 0.
How to See Which Profile Belongs to Which Font
There's no single file that maps everything — the binding works through three layers. Here's how to trace it:
Method 1: Check prefs.txt
Open prefs.txt on the SD card. Each [font=N] section tells you the last-used profiles for that font number. Font numbers are zero-based (font 0 = your first font folder).
Method 2: Check font_config.txt for forced profiles
Open the font's font_config.txt and look for start_color= and start_blade=. If present, these override prefs.txt every time.
Method 3: Trace the chain manually
For a complete picture of what font #1 (your second font folder) looks like:
- Check
01-SecondFont/font_config.txtforstart_blade=andstart_color=
- If found → that's the profile number
- If not found → check
prefs.txtunder[font=1]
- Look up the blade profile number in
config.txt:
- Find
[profile=N]where N is the blade profile number - This tells you the flicker settings, style assignments, etc.
- Look up the color profile number:
- First check if
01-SecondFont/colors.txtexists - If yes → that file's
[color=N]overrides the rootcolors.txt - If no font-specific colors → look up
[color=N]in the rootcolors.txt
What's Inside Each Profile Type
Blade Profile Keys (inside [profile=N] in config.txt)
Blade profiles can contain many parameters. Here are just a few important examples:
| Key | What It Controls |
|---|---|
pname= | Profile name |
flks= | Flicker effect speed |
flkd= | Flicker effect depth |
style_pon= | Ignition style |
style_poff= | Retraction style |
style_flicker= | Main blade flicker / shimmer style |
style_grafx1= | GraFx folder used for the main blade |
style_pixies= | PIXIES folder used for accent strip 1 |
Note: This is only a small subset of the available blade profile parameters. Many other keys also exist for things like clashes, lockup, drag, stab, accents, fades, and additional strip behavior.
Color Profile Keys (inside [color=N] in colors.txt)
| Key | What It Controls |
|---|---|
cname= | Color profile name |
color= | Main blade color (R,G,B or R,G,B,W) |
fcolor= | Clash/FoC (Flash on Clash) color |
bcolor= | Blaster bolt color |
lcolor= | Lockup color |
xcolor= | Crystal chamber color |
kcolor= | Flicker overlay color |
ecolor= | Effect (FX) color |
tcolor= | Stab color |
dcolor= | Drag color |
mcolor= | FoC channel mixing bitmask |
tridentm= | Trident delayed channel mixing |
Font-Specific Color Overrides
A font folder can contain its own colors.txt that overrides the global color profiles. This is useful when a specific font needs custom colors that don't apply to other fonts.
How the override works
The global colors.txt (root) is loaded first during boot. Then, when a font is activated, if the font folder contains a colors.txt, it's parsed and its [color=N] sections overwrite the corresponding global profiles.
Example:
Root colors.txt:
[color=0]
cname=Standard Blue
color=0,0,255
01-DarthVader/colors.txt:
[color=0]
cname=Vader Red
color=255,0,0
When font 01-DarthVader is active, color profile 0 becomes "Vader Red" instead of "Standard Blue". When you switch to a different font without its own colors.txt, the global "Standard Blue" is restored.
Themes and Profiles
If you're using the theme system, themes can provide their own versions of config.txt, colors.txt, prefs.txt, and special.txt. When a theme is active, the CFX looks for these files in the theme folder first, falling back to the root if they're not found.
This means a theme can define its own complete set of blade profiles and color profiles, independent of the root files.
Changing Profiles at Runtime
You can cycle through profiles while the saber is on using button combinations. The method depends on your spectrum_mode= setting in config.txt:
spectrum_mode=0
| Mode | Behavior |
|---|---|
-1 | Profile selection disabled |
0 | Next color profile with Aux+Act or Aux+Twist (legacy) |
1 | Next color with Aux+Act, dial color with Aux+Twist |
7 | Next blade profile with Aux+Act, next color with Aux+Twist |
8 | Next color with Aux+Act, next blade profile with Aux+Twist |
11 | Dial color with Aux+Act, dial blade with Aux+Twist |
12 | Dial blade with Aux+Act, dial color with Aux+Twist |
(There are 13 modes total — modes 2–6, 9–10 offer various dial/gesture combinations for color and blade selection.)
The spectrum_combo= key controls which button combinations are active:
| Value | Active Combos |
|---|---|
0 | None |
1 | Aux+Act only |
2 | Aux+Twist only |
3 | Both Aux+Act and Aux+Twist |
When you change profiles at runtime, the new selection is automatically saved to prefs.txt when the saber powers off.
A Practical Example
Here's a complete setup with 2 blade profiles, 2 color profiles, and 2 fonts:
config.txt (root)
ledstrip=144
accentstrip=8
spectrum_mode=7
spectrum_combo=3
[profile=0]
pname=Standard
flks=60
flkd=25
style_pon=1
style_poff=1
style_grafx1=1
style_pixies=1
[profile=1]
pname=Unstable
flks=20
flkd=60
style_pon=3
style_poff=2
style_grafx1=2
style_pixies=2
colors.txt (root)
[color=0]
cname=Jedi Blue
color=0,0,255
fcolor=255,255,255
lcolor=200,200,255
xcolor=0,50,200
[color=1]
cname=Sith Red
color=255,0,0
fcolor=255,200,0
lcolor=255,100,0
xcolor=255,0,50
1-LukeSkywalker/font_config.txt
## Force blue Jedi colors and standard blade on this font
start_color=0
start_blade=0
2-KyloRen/font_config.txt
## Force red Sith colors and unstable blade on this font
start_color=1
start_blade=1
2-KyloRen/colors.txt (optional font-specific override)
[color=1]
cname=Kylo Unstable Red
color=255,10,0
fcolor=255,150,0
lcolor=255,80,0
xcolor=200,0,0
Result
- Luke Skywalker font: Always starts with blade profile 0 (Standard flicker, GraFx folder 1, PIXIES folder 1) and color profile 0 (Jedi Blue)
- Kylo Ren font: Always starts with blade profile 1 (Unstable flicker, GraFx folder 2, PIXIES folder 2) and color profile 1 (Kylo's custom red from the font-specific
colors.txt) - While the saber is on: Aux+Act cycles blade profiles (Standard ↔ Unstable), Aux+Twist cycles color profiles (Blue ↔ Red) — because
spectrum_mode=7
Quick Reference
File Locations
| File | Location | Purpose |
|---|---|---|
config.txt | SD root | Blade profile definitions ([profile=N]), global settings |
colors.txt | SD root | Global color profile definitions ([color=N]) |
colors.txt | Font folder | Font-specific color overrides (overwrites global) |
font_config.txt | Font folder | start_blade=, start_color=, per-font overrides |
prefs.txt | SD root | Auto-saved last-used profiles per font |
Profile Resolution Flow
Font loads
→ Check font_config.txt for start_blade= / start_color=
→ If either value is not -1: use that profile
→ If it is -1 or omitted: use last-saved from prefs.txt
→ If no prefs: use profile 0
→ If font has colors.txt: override global color profiles
→ Apply blade profile + color profile
Key Config Keys
# In config.txt:
[profile=N] # Blade profile section (N = 0–31)
spectrum_mode=N # Profile selection method (-1 to 12)
spectrum_combo=N # Button combo activation (0–3)
start_blade=N # Global forced blade profile at boot
# In colors.txt:
[color=N] # Color profile section (N = 0–31)
start_color=N # Global forced color profile at boot
# In font_config.txt:
start_blade=N # Force blade profile for this font (-1 = don't force)
start_color=N # Force color profile for this font (-1 = don't force)
Happy profiling!