NIP-CM: Color Moments
NIP-XX: Color Moments
draft optional
This NIP defines a way to share color palettes captured from beautiful moments, enabling pre-verbal visual communication through color and emotion.
Abstract
Color Moments are events that capture 3-6 colors witnessed in a beautiful moment, optionally accompanied by a single emoji representing the feeling and an optional name. This creates a form of visual communication that transcends language barriers.
Event Kind
This NIP defines kind 3367 for Color Moment events.
Event Format
Color Moment Event (kind 3367)
{
"kind": 3367,
"content": "<optional single emoji>",
"tags": [
["c", "<hex color 1>"],
["c", "<hex color 2>"],
["c", "<hex color 3>"],
["c", "<hex color 4>"],
["c", "<hex color 5>"],
["c", "<hex color 6>"],
["layout", "<layout mode>"],
["name", "<optional name>"],
["alt", "Color moment: <hex color 1>, <hex color 2>, ..."]
]
}Fields
- content: Either empty string
""or a single emoji representing the feeling of the moment (e.g.,๐,โจ,๐) - tags:
ctags: Required. 3-6 color tags, each containing a hex color value in the format#RRGGBB(case-insensitive)layouttag: Optional. Display layout preference:horizontal,vertical,grid, orstarnametag: Optional. A short name or title for the color moment (recommended max 50 characters)alttag: Required. Human-readable description per NIP-31 for clients that don't understand this kind
Color Tag (c)
The c tag represents a color in the palette:
["c", "#FF6B9D"]- Value MUST be a valid 6-digit hex color prefixed with
# - Colors SHOULD be ordered as the user selected them (typically by visual prominence or emotional importance)
- Recommended 3-6 colors per event (these are guidelines; clients may choose different limits)
Layout Tag (layout)
The layout tag specifies the preferred visual arrangement of colors:
["layout", "horizontal"]Valid layout values:
horizontal: Stacked color bands (default if not specified)vertical: Side-by-side color columnsgrid: Grid layout (2x2 for 4 colors, 3x2 for 6 colors)star: Radial pie-slice arrangement emanating from center (not recommended for 4 colors as it appears identical to grid)checkerboard: Colors arranged in a grid pattern (rows and columns based on color count)diagonalStripes: Diagonal stripes from top-left to bottom-right
Clients that don't support a specified layout SHOULD fall back to horizontal.
Name Tag (name)
The name tag provides an optional short name or title:
["name", "Sunset at the beach"]- Value SHOULD be a short descriptive phrase (recommended max 50 characters)
- Complements the visual color information with textual context
- Optional; moments can be purely visual without names
Example Events
Sunset moment with emoji, name, and layout:
{
"kind": 3367,
"content": "๐
",
"tags": [
["c", "#FF6B9D"],
["c", "#FFD700"],
["c", "#F4A460"],
["c", "#87CEEB"],
["layout", "horizontal"],
["name", "Golden hour at the pier"],
["alt", "Color moment: #FF6B9D, #FFD700, #F4A460, #87CEEB"]
]
}Six-color grid layout:
{
"kind": 3367,
"content": "๐",
"tags": [
["c", "#FF0000"],
["c", "#FF7F00"],
["c", "#FFFF00"],
["c", "#00FF00"],
["c", "#0000FF"],
["c", "#8B00FF"],
["layout", "grid"],
["alt", "Color moment: #FF0000, #FF7F00, #FFFF00, #00FF00, #0000FF, #8B00FF"]
]
}Minimal ocean colors (no emoji, no layout):
{
"kind": 3367,
"content": "",
"tags": [
["c", "#0077BE"],
["c", "#00A5CF"],
["c", "#48D1CC"],
["alt", "Color moment: #0077BE, #00A5CF, #48D1CC"]
]
}Star layout with five colors:
{
"kind": 3367,
"content": "โญ",
"tags": [
["c", "#FFD700"],
["c", "#FF69B4"],
["c", "#00CED1"],
["c", "#9370DB"],
["c", "#98FB98"],
["layout", "star"],
["name", "Kaleidoscope"],
["alt", "Color moment: #FFD700, #FF69B4, #00CED1, #9370DB, #98FB98"]
]
}Interactions
Reactions
Standard kind 7 reactions (NIP-25) are used to react to color moments. Clients MAY limit reactions to a curated set of nature/emotion emojis:
๐
๐ โ๏ธ ๐ โญ โจ ๐ซ ๐ ๐ฅ ๐ง ๐ ๐ ๐ ๐ ๐งก โค๏ธ ๐ ๐ธ ๐บ ๐ ๐ฟ ๐ฆ ๐ ๐๏ธ
Bookmarking
Clients MAY support bookmarking color moments using kind 30003 (NIP-51 bookmark lists). A suggested implementation uses a d tag identifier like cherished-hues or color-moments:
{
"kind": 30003,
"content": "",
"tags": [
["d", "cherished-hues"],
["e", "<color moment event id 1>"],
["e", "<color moment event id 2>"],
["e", "<color moment event id 3>"]
]
}Zaps
Color moments support Lightning Zaps (NIP-57) as a way to appreciate and support creators.
Display Recommendations
Clients SHOULD display color moments as:
- Layout respect: Honor the
layouttag if present; fall back tohorizontalif unsupported or unspecified - Color arrangement:
horizontal: Stacked bands of equal heightvertical: Side-by-side columns of equal widthgrid: 2x2 grid for 4 colors, 3x2 grid for 6 colors, or best-fit grid for other countsstar: Radial pie slices emanating from center (equal angles per color)checkerboard: Colors in a rectangular grid (rows ร columns based on color count)diagonalStripes: Diagonal bands slanting from top-left to bottom-right- Emoji overlay: If content contains an emoji, display it centered over the colors
- Name display: If
nametag present, display it alongside author information - Minimal chrome: Let the colors be the focus, minimize UI elements
- Interactive features: Consider supporting layout switching, color copying, and sharing functionality
Validation
A valid color moment MUST:
- Be kind
3367 - Have at least 3
ctags (recommended maximum of 6, though clients may accept more) - Have all
ctag values match the regex/^#[0-9A-Fa-f]{6}$/ - Have an
alttag for NIP-31 compatibility
A valid color moment MAY:
- Have a
layouttag with valuehorizontal,vertical,grid,star,checkerboard, ordiagonalStripes - Have a
nametag with a short descriptive text - Have content containing a single emoji (or be empty)
Note: The 3-6 color range is a guideline for optimal visual display. Clients should be tolerant of events outside this range while potentially displaying warnings or adjusting layouts accordingly.
Rationale
Why a custom kind?
Using kind 1 (text notes) with custom tags would cause color moments to appear as empty or emoji-only posts in standard clients, creating a confusing user experience. A dedicated kind allows:
- Clients to handle color moments appropriately or ignore them gracefully
- Clear NIP-31
alttag descriptions for unsupported clients - Future extensibility without polluting the text note ecosystem
Why the c tag?
The c tag is short, descriptive, and not currently used for colors in the Nostr ecosystem. It allows efficient relay-level filtering with #c queries if needed.
Why recommend 3-6 colors?
- Minimum 3: Ensures enough visual information to convey a moment
- Maximum 6: Keeps palettes focused and visually digestible
- Flexibility: These are guidelines; clients may support different ranges based on their design philosophy
The 3-6 range balances expressiveness with simplicity, but implementations may be more permissive.
Why single emoji in content?
The content field is intentionally minimal (empty or single emoji) to maintain the pre-verbal, visual nature of color moments. Extended text would defeat the purpose of pure visual/emotional communication.
Why add layout and name tags?
- Layout tag: Allows creators to express their artistic intent for how colors should be arranged, while maintaining client flexibility
- Name tag: Provides optional textual context without compromising the pre-verbal nature (complements rather than replaces the visual)
- Progressive enhancement: Both tags are optional, maintaining backwards compatibility with simpler implementations
Client Implementation Notes
Clients implementing this NIP should consider:
- Camera integration: Allow users to capture colors directly from their device camera
- Manual color picker: Provide a color wheel or palette for manual selection
- Layout preview: Show real-time preview of different layout options
- Copy functionality: Enable copying color values (hex codes) for creative reuse
- Remix feature: Allow users to create new moments based on existing palettes
- Accessibility: Provide color names alongside hex codes for visually impaired users