Parse Xi Project
tools.parse_xi_project
parse_xi_project.py
Parse an ElevenLabs Studio project JSON export into a normalized pipeline-ready structure for xil-pipeline / ruffcut-pipeline.
Usage
python parse_xi_project.py
Output schema
{ "project": { meta }, "voice_map": { voice_id -> character info }, "chapters": [ { chapter meta } ], "assets": [ { normalized asset } ] }
FILENAME_TYPE_RULES
module-attribute
FILENAME_TYPE_RULES = [('ambien(ce|t|s)', 'ambiance'), ('music|score|theme|ost|soundtrack|legacy.*(intro|one)|intro.*413', 'music'), ('sign[-_]?on|bumper', 'music'), ('behind.the.scene|interview|beyond.the.scene', 'bonus'), ('wind|rain|storm|crowd|walla|room.tone|noise|static', 'ambiance'), ('footstep|walk|step', 'sfx'), ('door|knock|creak', 'sfx'), ('lamp|light|switch|click', 'sfx'), ('paper|rustle|rustle', 'sfx'), ('key|keys|rattle|jingle', 'sfx'), ('throat|cough|sneeze|breath', 'sfx'), ('notif|ding|ping|alert|chime', 'sfx'), ('download', 'unknown')]
classify_filename
ms_to_timecode
Convert milliseconds to MM:SS.mmm string.
Source code in tools/parse_xi_project.py
build_voice_map
Merge voices (project settings) with base_voices (full metadata). Returns { voice_id: { character, alias, settings, meta } }