Core Rule
"itemType": "RecordAlbum"
That’s the gate.
Everything else here is only for tokens where itemType="RecordAlbum".
RecordAlbum v1.0 – Field List
A. Identity & Music Info
| Key | Type | Required | Example | Notes |
|---|---|---|---|---|
albumTitle | string | yes | “Born to Run” | Human-facing title on the jacket. |
primaryArtist | string | yes | “Bruce Springsteen” | Main performer / band. |
featuringArtists | string[] | no | [“The E Street Band”] | Guests / featured. |
releaseYear | number | no | 1975 | Original release year (not pressing year if unknown). |
genre | string | no | “Rock” | Top-level genre. |
subgenre | string | no | “Classic Rock” | Optional refinement. |
labelName | string | no | “Columbia Records” | Record label on spine/label. |
catalogNumber | string | no | “PC 33795” | Catalog number on spine/label. |
barcode | string | no | “07464337951” | Printed barcode if present. |
matrixRunout | string | no | “PAL 33795-1A” | Etched/deadwax info if you ever want that depth. |
B. Format & Physical Structure
| Key | Type | Required | Example | Notes |
|---|---|---|---|---|
albumFormat | string (enum) | yes | “12inchLP” | "12inchLP", "7inch45", "10inchEP", "BoxSet", "Other". |
speedRPM | number | no | 33 | 33 / 45 / 78 where known. |
discCount | number | no | 2 | Total discs in this album (1, 2, 3…). |
isDoubleLP | boolean | no | true | Convenience boolie mirroring discCount > 1. |
isGatefold | boolean | no | true | Does the jacket open like a book? |
isPictureDisc | boolean | no | false | Vinyl has printed image. |
vinylColor | string | no | “black” | "black", "red", "blue", "marbled", "clear", "pictureDisc", etc. |
editionLabel | string | no | “First Pressing” | Free-text: “First Pressing”, “Reissue”, “Anniversary Edition”. |
pressingRegion | string | no | “US” | "US", "Canada", "UK", "EU", "Japan", etc. |
C. Condition & Components
| Key | Type | Required | Example | Notes |
|---|---|---|---|---|
conditionCoverGrade | string | no | “VG+” | If you adopt grading: "NM", "EX", "VG+", "VG", "G", "P". |
conditionVinylGrade | string | no | “EX” | Same scale, for the disc. |
isSealed | boolean | no | false | Sealed in factory wrap. |
isCoverOnly | boolean | no | false | Jacket present, vinyl missing. |
isVinylOnly | boolean | no | false | Vinyl present, no jacket. |
includesOriginalInnerSleeve | boolean | no | true | Printed or branded inner sleeve. |
includesInsert | boolean | no | true | Lyric sheet, poster, booklet, etc. |
insertDescription | string | no | “Lyric sheet + tour photo insert” | Short free text. |
isPromoCopy | boolean | no | false | Gold stamp / “For Promotion Only” type. |
D. Signature / Autograph Info (RecordAlbum-specific)
You’ll have global keys like isAutographed, signedBy, certNumber, etc., but these are album-specific nuances:
| Key | Type | Required | Example | Notes |
|---|---|---|---|---|
signedOn | string (enum) | no | “cover” | "cover", "vinyl", "insert", "label", "other". |
signedLocationNotes | string | no | “Front cover lower right, silver paint pen” | Human-readable specificity. |
inscriptionText | string | no | "To Mark - Keep on rockin'!" | If there’s a readable inscription. |
E. Highlight & Story Hooks (searchable, but blobby-friendly)
These keep your “story brain” alive but still structured.
| Key | Type | Required | Example | Notes |
|---|---|---|---|---|
trackHighlight | string | no | “Includes ‘Thunder Road’ and ‘Jungleland’” | Key songs people search by. |
eraTag | string | no | “1970s” | Simple era anchor: "1960s", "1970s", etc. |
Example JSON Snippet – Signed Gatefold LP
Here’s a real-ish example in the style you’re building:
{ "itemType": "RecordAlbum", "albumTitle": "Born to Run", "primaryArtist": "Bruce Springsteen", "featuringArtists": ["The E Street Band"], "releaseYear": 1975, "genre": "Rock", "subgenre": "Classic Rock", "labelName": "Columbia Records", "catalogNumber": "PC 33795", "barcode": "07464337951", "matrixRunout": "PAL 33795-1A", "albumFormat": "12inchLP", "speedRPM": 33, "discCount": 1, "isDoubleLP": false, "isGatefold": true, "isPictureDisc": false, "vinylColor": "black", "editionLabel": "First Pressing", "pressingRegion": "US", "conditionCoverGrade": "EX", "conditionVinylGrade": "VG+", "isSealed": false, "isCoverOnly": false, "isVinylOnly": false, "includesOriginalInnerSleeve": true, "includesInsert": true, "insertDescription": "Original lyrics inner sleeve with band photo", "isPromoCopy": false, "isAutographed": true, "signedBy": ["Bruce Springsteen"], "signedOn": "cover", "signedLocationNotes": "Front cover, centered, silver paint pen", "inscriptionText": "To Mike - All the best, Bruce", "trackHighlight": "Includes 'Thunder Road' and 'Jungleland'", "eraTag": "1970s"}
Drop that into a token alongside your global CollectorLINK keys (vaultLocation, vaultTag, certNumber, acquisitionSource, etc.) and you’ve got a v1.0 RecordAlbum token that:
- searches cleanly
- indexes beautifully
- is future-proof
- lets VinylLINK filter instantly on
itemType="RecordAlbum"and all these enums/boolies.
If you want a tight enum list (e.g., allowed values for albumFormat, vinylColor, signedOn, grading scale) for Divya to hard-code into the indexer / admin UI, I can spit that out as a v1.0 “value dictionary” next.
You said:
yes, tight enum list please.
ChatGPT said:
Absolutely — here is the tight, production-ready enum list for all RecordAlbum-specific fields.
This is the version Divya can hard-code directly into:
- the indexer
- the admin UI
- validation logic
- dropdown menus
- search filters
This keeps the system clean, structured, and unbreakable as supply scales.
RECORDALBUM ENUM PACK (v1.0)
All enums formatted exactly as you would store them in JSON — camelCase, machine-safe, no spaces.
albumFormat (enum)
The core format groupings.
"12inchLP""7inch45""10inchEP""BoxSet""PictureDisc""Other"
Notes:
- “12inchLP” covers all full-length albums.
- “7inch45” = singles.
- “10inchEP” = older or specialty EPs.
- “BoxSet” = multi-disc or deluxe artifacts.
- “PictureDisc” as format (material), but note also
isPictureDiscboolie.
speedRPM (enum)
Only use enum if known — otherwise omit the key entirely.
334578
vinylColor (enum)
A clean starter set. Expand later if needed.
"black""clear""white""red""blue""green""yellow""marbled""splatter""translucent""pictureDisc""other"
pressingRegion (enum)
"US""Canada""UK""EU""Japan""Australia""Other"
conditionCoverGrade (enum)
Record-collector standard grading.
"NM" // Near Mint"EX" // Excellent"VG+" // Very Good Plus"VG" // Very Good"G" // Good"P" // Poor
conditionVinylGrade (enum)
Same scale; keep parallel for indexing.
"NM""EX""VG+""VG""G""P"
signedOn (enum)
Where the autograph physically sits.
"cover""vinyl""insert""label""innerSleeve""other"
eraTag (enum)
Useful for ERA search buckets.
"1950s""1960s""1970s""1980s""1990s""2000s""2010s""2020s""Other"
genre (enum)
Top-level only — don’t go deep.
Collectors will search top-level genres FAR more than micro-genres.
"Rock""Pop""Jazz""Blues""Country""Metal""Punk""HipHop""R&B""Electronic""Classical""Soundtrack""Folk""Reggae""Other"
subgenre (enum)
Optional and expandable later.
Start with this controlled list:
"ClassicRock""HardRock""Alternative""Indie""ProgressiveRock""NewWave""HeavyMetal""ThrashMetal""PunkRock""HipHopClassic""HipHopGoldenEra""JazzFusion""Bebop""Soul""Funk""CountryClassic""ElectronicHouse""ElectronicTechno""ReggaeRoots""SoundtrackFilm""Other"
You do NOT need to expose all of these from day one — the indexer can support sparse usage.

albumFormat-specific flags (boolies)
These are NOT enums but required in the schema:
isGatefold: true/falseisPictureDisc: true/falseisCoverOnly: true/falseisVinylOnly: true/falseisSealed: true/falseincludesOriginalInnerSleeve: true/falseincludesInsert: true/falseisPromoCopy: true/false
These boolies multiply the power of your enums.
Example cluster for Divya to code:
Here’s how you might hand this to her cleanly:
{ "enums": { "albumFormat": ["12inchLP", "7inch45", "10inchEP", "BoxSet", "PictureDisc", "Other"], "speedRPM": [33, 45, 78], "vinylColor": ["black", "clear", "white", "red", "blue", "green", "yellow", "marbled", "splatter", "translucent", "pictureDisc", "other"], "pressingRegion": ["US", "Canada", "UK", "EU", "Japan", "Australia", "Other"], "conditionGrade": ["NM", "EX", "VG+", "VG", "G", "P"], "signedOn": ["cover", "vinyl", "insert", "label", "innerSleeve", "other"], "eraTag": ["1950s", "1960s", "1970s", "1980s", "1990s", "2000s", "2010s", "2020s", "Other"], "genre": ["Rock", "Pop", "Jazz", "Blues", "Country", "Metal", "Punk", "HipHop", "R&B", "Electronic", "Classical", "Soundtrack", "Folk", "Reggae", "Other"], "subgenre": ["ClassicRock", "HardRock", "Alternative", "Indie", "ProgressiveRock", "NewWave", "HeavyMetal", "ThrashMetal", "PunkRock", "HipHopClassic", "HipHopGoldenEra", "JazzFusion", "Bebop", "Soul", "Funk", "CountryClassic", "ElectronicHouse", "ElectronicTechno", "ReggaeRoots", "SoundtrackFilm", "Other"] }}
This is ready to implement as the v1.0 RecordAlbum enum dictionary.
If you want, I can now prepare:
RecordAlbum v1.0: Validation Ruleset
(what is required, what is optional, what must match enum, what must be boolean)
Or:
RecordAlbum v1.0: Admin UI field map
(the exact fields Divya should show in the minting dashboard)
Which one do you want next?