Claude-skill-registry-data mixmi-upload-system
Complete documentation of the mixmi content upload system including Quick and Advanced modes, metadata requirements, attribution configuration, and file handling
git clone https://github.com/majiayu000/claude-skill-registry-data
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry-data "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/mixmi-upload-system" ~/.claude/skills/majiayu000-claude-skill-registry-data-mixmi-upload-system && rm -rf "$T"
data/mixmi-upload-system/SKILL.mdmixmi Upload System
Documentation of the content upload process, metadata collection, and attribution configuration for the mixmi platform.
Overview
The upload system provides two modes for content submission:
- Quick Upload: 4 steps, ~2 minutes, solo creators
- Advanced Upload: 7 steps, ~5-7 minutes, detailed attribution
Both modes support various content types: 8-bar loops, loop packs, songs, and EPs.
Upload Modes
Quick Upload Mode
Target Users: Solo creators, simple uploads
Time to Complete: ~2 minutes
Attribution: 100% to uploader
Step 1: Basic Information
// Required Fields content_type: '8-bar-loop' | 'loop-pack' | 'song' | 'ep' title: string (conditional based on content_type) artist: string (with autosuggest) version?: string (optional remix identifier) // Content-specific fields pack_description?: string (Loop Packs only) loop_category?: 'instrumental' | 'vocal' | 'beat' | 'stem' | 'other' tell_us_more?: string (required if stem/other) // Technical metadata bpm?: number (required for loops/packs, optional for songs) key?: string (optional, hidden for EPs)
Step 2: File Uploads
// Cover Artwork cover_image_url: string (upload or URL input) imageInputType: 'upload' | 'url' // Audio Files audio_url?: string (single file for loop/song) loop_files?: File[] (2-5 files for loop pack) ep_files?: File[] (2-5 files for EP) // Auto-detected duration: number (from audio analysis) bpm?: number (if not manually specified)
Step 3: Licensing & Pricing
8-Bar Loop:
: true (required)allow_remixing
: 1 STX (fixed)remix_price_stx
: boolean (optional)allow_downloads
: number (if downloads enabled)download_price_stx
Loop Pack:
: true (required per loop)allow_remixing
: 1 STX per loop (fixed)remix_price_stx
: boolean (optional)allow_downloads
: numberprice_per_loop
: auto-calculated totaldownload_price_stx
Song:
: numberdownload_price
: same as download_priceprice_stx
EP:
: numberprice_per_song
: auto-calculated totalprice_stx
Step 4: Review & Submit
- Read-only summary of all entered data
- Edit buttons for each section
- Final submission
Advanced Upload Mode
Target Users: Collaborations, detailed attribution
Time to Complete: ~5-7 minutes
Attribution: Customizable splits
Steps 1-4: Same as Quick Upload
Step 2 (Advanced): Composition Splits
// Who wrote it? (up to 3 contributors) composition_split_1_wallet: string (auto-filled from uploader) composition_split_1_percentage: number composition_split_2_wallet?: string composition_split_2_percentage?: number composition_split_3_wallet?: string composition_split_3_percentage?: number // Must sum to 100%
Step 3 (Advanced): Production Splits
// Who recorded it? (up to 3 contributors) production_split_1_wallet: string (auto-filled from uploader) production_split_1_percentage: number production_split_2_wallet?: string production_split_2_percentage?: number production_split_3_wallet?: string production_split_3_percentage?: number // Must sum to 100%
Step 4 (Advanced): Industry Identifiers
isrc?: string // International Standard Recording Code
Steps 5-7: Continue with file upload, licensing, and review
Location Tagging
Available in both modes, added during submission:
User Input
locationInput: string // User's search query selectedLocations: string[] // Array of location names selectedLocationCoords: Array<{ lat: number, lng: number, name: string }>
Database Storage
location_lat: number // Primary latitude location_lng: number // Primary longitude primary_location: string // Main location name locations: Location[] // All location objects tags: string[] // Auto-appended with "🌍 {location}"
Database Schema
ip_tracks Table Structure
Basic Fields
id UUID PRIMARY KEY title VARCHAR artist VARCHAR wallet_address VARCHAR -- Uploader's wallet version VARCHAR -- Version/remix identifier created_at TIMESTAMP updated_at TIMESTAMP
Content Type Fields
content_type VARCHAR -- 'loop' | 'loop_pack' | 'song' | 'ep' loop_category VARCHAR -- For loops only pack_description TEXT -- For loop packs tell_us_more TEXT -- Additional description
File Storage
audio_url TEXT -- Single audio file URL cover_image_url TEXT -- Cover art URL loop_files JSONB -- Array of loop file URLs (packs) ep_files JSONB -- Array of song file URLs (EPs) duration INTEGER -- Duration in seconds
Technical Metadata
bpm INTEGER key VARCHAR tags TEXT[] -- Array of tags notes TEXT -- Internal notes
Attribution Fields (7 slots each)
-- Composition splits composition_split_1_wallet VARCHAR composition_split_1_percentage INTEGER -- ... up to composition_split_7_* -- Production splits production_split_1_wallet VARCHAR production_split_1_percentage INTEGER -- ... up to production_split_7_*
Licensing Fields
allow_remixing BOOLEAN allow_downloads BOOLEAN remix_price_stx DECIMAL(10,2) download_price_stx DECIMAL(10,2) license_type VARCHAR -- 'remix_only' | 'remix_external' | 'custom' license_selection VARCHAR -- 'platform_remix' | 'platform_download'
Location Fields
location_lat DECIMAL location_lng DECIMAL primary_location VARCHAR locations JSONB -- Array of location objects
Remix Tracking
remix_depth INTEGER DEFAULT 0 source_track_ids UUID[] generation INTEGER
Future/Inactive Fields
-- Currently in database but not active open_to_commercial BOOLEAN open_to_collaboration BOOLEAN commercial_contact VARCHAR commercial_contact_fee DECIMAL collab_contact VARCHAR collab_contact_fee DECIMAL uploader_wallet_override VARCHAR -- Temporary cleanup field
File Handling
Audio Files
- Formats: MP3, WAV, AIFF, FLAC
- Max Size: 50MB per file
- Processing:
- BPM detection
- Waveform generation
- Duration calculation
- Format normalization
Cover Images
- Formats: JPG, PNG, GIF, WebP
- Max Size: 5MB
- Processing:
- Resize to standard dimensions
- Generate thumbnails
- Optimize for web
Storage Strategy
// Upload flow 1. Upload to Vercel Blob (temporary) 2. Process and validate 3. Move to Supabase Storage (permanent) 4. Update database with URLs 5. Clean up temporary files
Validation Rules
Title Validation
- Required for all content types
- Max 100 characters
- No special characters except: - _ ' " &
Attribution Validation
- Percentages must sum to exactly 100%
- Wallet addresses must be valid
- Maximum 3 contributors in Quick mode
- Maximum 7 contributors in Advanced mode (future)
Pricing Validation
- Minimum price: 0.1 STX
- Maximum price: 10,000 STX
- Remix price fixed at 1 STX per loop
- Download price must be > 0 if downloads enabled
File Validation
- Audio file required
- Cover image required (or default assigned)
- Loop packs: 2-5 loops
- EPs: 2-5 songs
API Endpoints
Upload Initiation
POST /api/upload/start Response: { uploadId: string, uploadUrls: { audio: string, cover: string } }
File Upload
POST /api/upload/audio Body: FormData with audio file Response: { url: string, duration: number, bpm?: number }
Metadata Submission
POST /api/upload/metadata Body: { ...all form fields } Response: { trackId: string, success: boolean }
Upload Status
GET /api/upload/status/:uploadId Response: { status: 'uploading' | 'processing' | 'complete' | 'failed', progress: number, trackId?: string }
UI/UX Considerations
Progress Indicators
- Step counter (1 of 4 or 1 of 7)
- Progress bar
- Save draft capability
- Back navigation
Form Behavior
- Auto-save to localStorage
- Field validation on blur
- Clear error messages
- Contextual help text
Mobile Optimization
- Responsive forms
- Touch-friendly inputs
- Camera access for cover photos
- Simplified location picker
Error Handling
Common Errors
- File too large: Show size limit, suggest compression
- Invalid format: List accepted formats
- Network timeout: Auto-retry with exponential backoff
- Validation failure: Highlight specific fields
- Server error: Save draft, allow retry
Recovery Mechanisms
- Save form state to localStorage
- Allow resume from draft
- Retry failed uploads
- Contact support option
Future Enhancements
Planned Features
- Bulk upload for multiple tracks
- Template system for frequent uploaders
- Auto-fill from previous uploads
- Collaborative upload sessions
- AI-assisted metadata extraction
- More granular licensing options
Attribution Expansion
- Support for 7+ contributors
- AI attribution fields
- Community attribution
- Place/venue attribution (beyond TBD wallets)
Integration Improvements
- Direct DAW upload plugins
- Mobile app with offline capability
- API for third-party tools
- Batch processing system
Testing Checklist
Critical Paths
- Quick Upload: Solo loop upload
- Advanced Upload: 3-way collaboration
- Loop Pack: 5 loops with metadata
- EP Upload: 5 songs with pricing
- Location Tagging: Multiple locations
- Draft Recovery: Interrupted upload
Edge Cases
- Exactly 100% split calculation
- Maximum file sizes
- Special characters in titles
- Network interruption mid-upload
- Duplicate file detection
Note: This documentation reflects current upload system. Features marked as "planned" or "future" are not yet implemented.