Skip to content

Built-in Theme Catalogue

ThemeLibrary ships the library's built-in colour palettes. This page is the live public catalogue: it owns category membership, counts, executable enumeration examples, and the compatibility and fidelity boundary. Category order is not semantic.

Available categories

Category Themes
Archives 60
Art Series 13
Holidays 16
Library 28
Moods 15
Music 14
Nature 9
Play 7
Space 11
Worldly 205

That is 378 theme records, resolvable under 381 names once the 3 rename aliases are counted. 290 records are the themes the LIFX app ships, sport themes excluded, and carry the app's own display name and category. The 60 Archives themes are no longer offered by the app but keep their palettes as library-only themes. The remaining 28 sit under Library: 19 with no app counterpart, plus 9 deprecated keys retained so no pre-6.4.0 name stops resolving.

The table is authored from the shipped library. A resync review must update it when category membership changes.

List resolvable themes

from lifx import ThemeLibrary

theme_names = ThemeLibrary.get_available_themes()
assert theme_names == sorted(theme_names)
assert "evening" in theme_names

get_available_themes() includes every resolvable key, including supported rename aliases.

List categories

from lifx import ThemeLibrary

categories = ThemeLibrary.get_categories()
assert categories == sorted(categories)
assert "Holidays" in categories

List one category

from lifx import ThemeLibrary

holidays = ThemeLibrary.get_by_category("Holidays")
assert holidays
assert all(theme.category == "Holidays" for theme in holidays.values())

get_by_category() accepts category punctuation and case insensitively, while returning each canonical primary once. Use get_categories() rather than assuming the table's display order.

Find themes by tag or effect mode

from lifx.theme import ThemeLibrary

for tag in ThemeLibrary.get_tags():
    print(tag, sorted(ThemeLibrary.get_by_tag(tag)))

blended = ThemeLibrary.find(static_mode="blended")

Tags and effect modes come from the LIFX app. Themes the app does not ship carry no tags and use the blended static mode. The app's themes use the solid_static, blended, grid_static, solid_loop and solid static modes, and 18 of them name a Dynamic effect (MORPH or MOVE). An unknown tag, category or static mode raises ValueError, so check get_tags() for tags or get_categories() for categories first. Tags are spelt as the app spells them (for example Cozy) and are matched ignoring case and punctuation.

Compatibility and fidelity

The redefined pre-6.4.0 palettes were not carried forward. Their historical taxonomy and migration guidance remain in Theme Taxonomy Changes; use the current category methods above instead of redirecting a retired category name.

Palettes are stored as the app authors them — user-facing HSBK floats, converted to wire values at runtime — and are not truncated to the 16 palette slots a firmware effect packet carries. 28 themes are longer than 16 colours, up to 68 for independence, memorial_day and old_glory.

That length is available to apply_theme(), which renders the whole palette across a device's zones or pixels. It is not available to the firmware effect API: MatrixEffect rejects a palette above MAX_PALETTE_COLORS (16), so a long theme must be reduced before it can drive MORPH. Choosing which 16 is the caller's decision, not the library's.