[{"data":1,"prerenderedAt":1512},["ShallowReactive",2],{"docs":3,"doc:\u002Fdocs\u002Fformat\u002Ffileref":88},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84],{"path":5,"title":6,"description":7},"\u002Fdocs\u002Fcodemods","Codemods","A codemod is a small program that changes Live Sets. livesaver runs it over folders of sets, shows\nwhat would change, and with --apply writes the changes the same way every livesaver command\ndoes: the result must be well-formed XML, Live's backup scheme is followed\n(Backup\u002F\u003Cset> [date time].als), the run is journaled, and livesaver undo \u003Crun> puts every set\nback.",{"path":9,"title":10,"description":11},"\u002Fdocs\u002Fformat","Ableton Live file formats — what livesaver relies on","Facts collected from Live's own files (verified against real sets) and public research\n(Steinberg VST3 SDK, JUCE, Ableton's maxdevtools). Each page names its sources.",{"path":13,"title":14,"description":15},"\u002Fdocs\u002Fformat\u002Fcontainers","Containers and id spaces","How Live's files are packed: which are gzip-compressed XML and which are binary, what lies beside them, and how the ids inside a document are numbered.",{"path":17,"title":18,"description":19},"\u002Fdocs\u002Fformat\u002Ffileref","FileRef","A \u003CFileRef> locates one file. It appears in many containers, but only some are real dependencies.",{"path":21,"title":22,"description":23},"\u002Fdocs\u002Fformat\u002Ffinder","Finder tags, comments and plug-in bundles (macOS)","What status, reorg and the plug-in inventory read and write outside Live's own files.",{"path":25,"title":26,"description":27},"\u002Fdocs\u002Fformat\u002Ffingerprints","Fingerprints","How Live recognises a file again: the size and the checksum it stores with every reference, where vendors and pack updates break that, and what livesaver compares instead.",{"path":29,"title":30,"description":31},"\u002Fdocs\u002Fformat\u002Flive-setup","Live installation and library locations","Where Live keeps its app resources, its library folders and its own databases, and how livesaver finds them without being told. Everything below was read on a Mac; Windows is at the end, from Ableton's documentation.",{"path":33,"title":34,"description":35},"\u002Fdocs\u002Fformat\u002Fplugins","Plug-ins in Live Sets","How a Live Set stores a plug-in in each format, how the same plug-in is recognised across formats, and what an upgrade from VST2 to VST3 has to carry over.",{"path":37,"title":38,"description":39},"\u002Fdocs\u002Fformat\u002Fversions","\u003CAbleton> root attributes per Live version","The root is \u003CAbleton MajorVersion MinorVersion SchemaChangeCount Creator Revision>. Creator is \"Ableton Live x.y.z\".",{"path":41,"title":42,"description":43},"\u002Fdocs\u002Fguide\u002Fbrowser","In the browser","The app also runs on its own, as a page in your browser. It reads the folders you give it and changes nothing: good for a first look, or on a computer where you cannot install anything. In Chrome and Edge it can also fix samples and upgrade plug-ins, if you switch that on: see Fixing in the page.",{"path":45,"title":46,"description":47},"\u002Fdocs\u002Fguide\u002Fcommand-line","The command line","Everything the app does, the livesaver command does too, and more: project status in Finder, a catalog of your sets to search, and codemods. Every command only plans unless you pass --apply.",{"path":49,"title":50,"description":51},"\u002Fdocs\u002Fguide\u002Fgetting-started","Getting started","livesaver finds the samples your Ableton Live sets have lost, collects them into their projects, and shows which plug-ins are missing. This page takes you from nothing to your first scan.",{"path":53,"title":54,"description":55},"\u002Fdocs\u002Fguide\u002Fhistory","History and undo","Everything livesaver changes is written down as a run: what it was asked, every step it took, and the original of every set it rewrote. That is what makes an undo possible, also weeks later.",{"path":57,"title":58,"description":59},"\u002Fdocs\u002Fguide\u002Fmissing","When samples stay missing","A fix can only find what is in the folders it searches. What stays missing is listed by where it came from, because what helps differs: a pack is installed again, an old drive is plugged in, a folder is added.",{"path":61,"title":62,"description":63},"\u002Fdocs\u002Fguide\u002Fplugins","Plug-ins","Live finds a plug-in by its format and its id, never by its name. livesaver reads which plug-ins your sets use and compares them with what is installed, the way Live does, so you know before you open a set what will be missing in it.",{"path":65,"title":66,"description":67},"\u002Fdocs\u002Fguide\u002Fquestions","Questions and answers","Short answers to what comes up first. If yours is not here, ask on GitHub.",{"path":69,"title":70,"description":71},"\u002Fdocs\u002Fguide\u002Fsafety","How your work is kept safe","livesaver edits the files your music lives in. These are the rules it keeps, so that nothing is lost.",{"path":73,"title":74,"description":75},"\u002Fdocs\u002Fguide\u002Fsamples","Fix missing samples","A set that has lost its samples opens in Live with “Media files are missing”. livesaver finds the files again by what they are, puts them into the project, and points the set at them, for every project at once.",{"path":77,"title":78,"description":79},"\u002Fdocs\u002Fguide\u002Fwindows","livesaver on Windows","livesaver is made and tested on a Mac. Windows is new: it is built from what Ableton documents about Live on Windows and from the way sets that were saved on Windows store their files. No one has tried it on a Windows computer with Live yet. This page says what is there, what differs from a Mac, and what is not known.",{"path":81,"title":82,"description":83},"\u002Fdocs\u002Fverification","Verification","What is checked, and how to repeat it. Checks on a real library are read-only; everything that\nwrites runs on temporary copies.",{"path":85,"title":86,"description":87},"\u002Fdocs\u002Fweb","The web app","apps\u002Fweb is one app (Vite, Vue, Nuxt UI) that runs in two situations:",{"id":89,"title":18,"body":90,"description":19,"extension":1506,"meta":1507,"navigation":1508,"path":17,"seo":1509,"stem":1510,"__hash__":1511},"docs\u002Fdocs\u002Fformat\u002Ffileref.md",{"type":91,"value":92,"toc":1497},"minimark",[93,97,106,187,202,207,244,526,551,555,948,984,990,993,1066,1069,1072,1210,1213,1231,1234,1237,1299,1329,1364,1372,1376,1482,1493],[94,95,18],"h1",{"id":96},"fileref",[98,99,100,101,105],"p",{},"A ",[102,103,104],"code",{},"\u003CFileRef>"," locates one file. It appears in many containers, but only some are real dependencies.",[107,108,109,125],"table",{},[110,111,112],"thead",{},[113,114,115,119,122],"tr",{},[116,117,118],"th",{},"Container",[116,120,121],{},"Meaning",[116,123,124],{},"livesaver",[126,127,128,147,167],"tbody",{},[113,129,130,141,144],{},[131,132,133,136,137,140],"td",{},[102,134,135],{},"SampleRef"," (optionally ",[102,138,139],{},"Id=\"N\"",")",[131,142,143],{},"a sample Live loads",[131,145,146],{},"parsed and patched",[113,148,149,159,165],{},[131,150,151,154,155,158],{},[102,152,153],{},"MxPatchRef"," (Live 12), ",[102,156,157],{},"MxDPatchRef"," (≤ 11)",[131,160,161,162,140],{},"a Max for Live device (",[102,163,164],{},".amxd",[131,166,146],{},[113,168,169,181,184],{},[131,170,171,174,175,174,178],{},[102,172,173],{},"OriginalFileRef",", ",[102,176,177],{},"FilePresetRef",[102,179,180],{},"AbletonDefaultPresetRef",[131,182,183],{},"where embedded content came from",[131,185,186],{},"reported only; Live doesn't need them to load",[98,188,189,190,193,194,197,198,201],{},"livesaver recognises the pattern ",[102,191,192],{},"\u003C(SampleRef|MxPatchRef|MxDPatchRef)( Id=\"\\d+\")?>"," with whitespace, then ",[102,195,196],{},"\u003CFileRef>…\u003C\u002FFileRef>",", then optionally whitespace and ",[102,199,200],{},"\u003CLastModDate Value=\"…\" \u002F>",".",[203,204,206],"h2",{"id":205},"new-format-live-11","New format (Live 11+)",[98,208,209,210,174,213,216,217,220,221,224,225,174,228,174,231,174,234,174,237,240,241,201],{},"Children in order: ",[102,211,212],{},"RelativePathType",[102,214,215],{},"RelativePath"," (string, ",[102,218,219],{},"\u002F","-separated), ",[102,222,223],{},"Path"," (absolute, forward slashes even on Windows), ",[102,226,227],{},"Type",[102,229,230],{},"LivePackName",[102,232,233],{},"LivePackId",[102,235,236],{},"OriginalFileSize",[102,238,239],{},"OriginalCrc",", and from 12.4 also ",[102,242,243],{},"SourceHint",[245,246,251],"pre",{"className":247,"code":248,"language":249,"meta":250,"style":250},"language-xml shiki shiki-themes material-theme-lighter github-light github-dark","\u003CSampleRef>\n  \u003CFileRef>\n    \u003CRelativePathType Value=\"3\" \u002F>\n    \u003CRelativePath Value=\"Samples\u002FImported\u002F1.wav\" \u002F>\n    \u003CPath Value=\"\u002FUsers\u002Fme\u002FMusic\u002FSong Project\u002FSamples\u002FImported\u002F1.wav\" \u002F>\n    \u003CType Value=\"2\" \u002F>\n    \u003CLivePackName Value=\"\" \u002F>\n    \u003CLivePackId Value=\"\" \u002F>\n    \u003COriginalFileSize Value=\"2000324\" \u002F>\n    \u003COriginalCrc Value=\"17226\" \u002F>\n    \u003CSourceHint Value=\"\" \u002F>\n  \u003C\u002FFileRef>\n  \u003CLastModDate Value=\"1790703000\" \u002F>\n  \u003CSourceContext \u002F>…\u003CDefaultSampleRate Value=\"44100\" \u002F>\n\u003C\u002FSampleRef>\n","xml","",[102,252,253,268,278,306,326,346,366,382,397,417,437,452,462,483,516],{"__ignoreMap":250},[254,255,258,262,265],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"sP7_E","\u003C",[254,263,135],{"class":264},"sQzsp",[254,266,267],{"class":260},">\n",[254,269,271,274,276],{"class":256,"line":270},2,[254,272,273],{"class":260},"  \u003C",[254,275,18],{"class":264},[254,277,267],{"class":260},[254,279,281,284,286,290,293,297,301,303],{"class":256,"line":280},3,[254,282,283],{"class":260},"    \u003C",[254,285,212],{"class":264},[254,287,289],{"class":288},"s9AJx"," Value",[254,291,292],{"class":260},"=",[254,294,296],{"class":295},"sjJ54","\"",[254,298,300],{"class":299},"s_sjI","3",[254,302,296],{"class":295},[254,304,305],{"class":260}," \u002F>\n",[254,307,309,311,313,315,317,319,322,324],{"class":256,"line":308},4,[254,310,283],{"class":260},[254,312,215],{"class":264},[254,314,289],{"class":288},[254,316,292],{"class":260},[254,318,296],{"class":295},[254,320,321],{"class":299},"Samples\u002FImported\u002F1.wav",[254,323,296],{"class":295},[254,325,305],{"class":260},[254,327,329,331,333,335,337,339,342,344],{"class":256,"line":328},5,[254,330,283],{"class":260},[254,332,223],{"class":264},[254,334,289],{"class":288},[254,336,292],{"class":260},[254,338,296],{"class":295},[254,340,341],{"class":299},"\u002FUsers\u002Fme\u002FMusic\u002FSong Project\u002FSamples\u002FImported\u002F1.wav",[254,343,296],{"class":295},[254,345,305],{"class":260},[254,347,349,351,353,355,357,359,362,364],{"class":256,"line":348},6,[254,350,283],{"class":260},[254,352,227],{"class":264},[254,354,289],{"class":288},[254,356,292],{"class":260},[254,358,296],{"class":295},[254,360,361],{"class":299},"2",[254,363,296],{"class":295},[254,365,305],{"class":260},[254,367,369,371,373,375,377,380],{"class":256,"line":368},7,[254,370,283],{"class":260},[254,372,230],{"class":264},[254,374,289],{"class":288},[254,376,292],{"class":260},[254,378,379],{"class":295},"\"\"",[254,381,305],{"class":260},[254,383,385,387,389,391,393,395],{"class":256,"line":384},8,[254,386,283],{"class":260},[254,388,233],{"class":264},[254,390,289],{"class":288},[254,392,292],{"class":260},[254,394,379],{"class":295},[254,396,305],{"class":260},[254,398,400,402,404,406,408,410,413,415],{"class":256,"line":399},9,[254,401,283],{"class":260},[254,403,236],{"class":264},[254,405,289],{"class":288},[254,407,292],{"class":260},[254,409,296],{"class":295},[254,411,412],{"class":299},"2000324",[254,414,296],{"class":295},[254,416,305],{"class":260},[254,418,420,422,424,426,428,430,433,435],{"class":256,"line":419},10,[254,421,283],{"class":260},[254,423,239],{"class":264},[254,425,289],{"class":288},[254,427,292],{"class":260},[254,429,296],{"class":295},[254,431,432],{"class":299},"17226",[254,434,296],{"class":295},[254,436,305],{"class":260},[254,438,440,442,444,446,448,450],{"class":256,"line":439},11,[254,441,283],{"class":260},[254,443,243],{"class":264},[254,445,289],{"class":288},[254,447,292],{"class":260},[254,449,379],{"class":295},[254,451,305],{"class":260},[254,453,455,458,460],{"class":256,"line":454},12,[254,456,457],{"class":260},"  \u003C\u002F",[254,459,18],{"class":264},[254,461,267],{"class":260},[254,463,465,467,470,472,474,476,479,481],{"class":256,"line":464},13,[254,466,273],{"class":260},[254,468,469],{"class":264},"LastModDate",[254,471,289],{"class":288},[254,473,292],{"class":260},[254,475,296],{"class":295},[254,477,478],{"class":299},"1790703000",[254,480,296],{"class":295},[254,482,305],{"class":260},[254,484,486,488,491,494,498,500,503,505,507,509,512,514],{"class":256,"line":485},14,[254,487,273],{"class":260},[254,489,490],{"class":264},"SourceContext",[254,492,493],{"class":260}," \u002F>",[254,495,497],{"class":496},"su5hD","…",[254,499,261],{"class":260},[254,501,502],{"class":264},"DefaultSampleRate",[254,504,289],{"class":288},[254,506,292],{"class":260},[254,508,296],{"class":295},[254,510,511],{"class":299},"44100",[254,513,296],{"class":295},[254,515,305],{"class":260},[254,517,519,522,524],{"class":256,"line":518},15,[254,520,521],{"class":260},"\u003C\u002F",[254,523,135],{"class":264},[254,525,267],{"class":260},[98,527,528,529,531,532,535,536,174,539,542,543,174,546,174,549,201],{},"Siblings of the FileRef: ",[102,530,469],{}," (Unix seconds), ",[102,533,534],{},"SourceContext\u002F…\u002FOriginalFileRef"," + ",[102,537,538],{},"BrowserContentPath",[102,540,541],{},"LocalFiltersJson"," (12), ",[102,544,545],{},"SampleUsageHint",[102,547,548],{},"DefaultDuration",[102,550,502],{},[203,552,554],{"id":553},"old-format-live-8210","Old format (Live 8.2–10)",[245,556,558],{"className":247,"code":557,"language":249,"meta":250,"style":250},"\u003CFileRef>\n  \u003CHasRelativePath Value=\"true\" \u002F>\n  \u003CRelativePathType Value=\"1\" \u002F>\n  \u003CRelativePath>\n    \u003CRelativePathElement Id=\"239\" Dir=\"\" \u002F>            \u003C!-- Dir=\"\" means \"..\" ; Id only in Live 10 -->\n    \u003CRelativePathElement Id=\"240\" Dir=\"Other Project\" \u002F>\n  \u003C\u002FRelativePath>\n  \u003CName Value=\"1.wav\" \u002F>\n  \u003CType Value=\"1\" \u002F>\n  \u003CData>…hex…\u003C\u002FData>                                   \u003C!-- absolute path, see below -->\n  \u003CRefersToFolder Value=\"false\" \u002F>\n  \u003CSearchHint>\n    \u003CPathHint>\u003CRelativePathElement Id=\"25\" Dir=\"Users\" \u002F>…\u003C\u002FPathHint>\n    \u003CFileSize Value=\"2000324\" \u002F>\n    \u003CCrc Value=\"17226\" \u002F>\n    \u003CMaxCrcSize Value=\"16384\" \u002F>                        \u003C!-- 0 when HasExtendedInfo is false -->\n    \u003CHasExtendedInfo Value=\"true\" \u002F>\n  \u003C\u002FSearchHint>\n  \u003CLivePackName Value=\"\" \u002F>\n  \u003CLivePackId Value=\"\" \u002F>\n\u003C\u002FFileRef>\n",[102,559,560,568,588,607,615,647,677,685,705,723,745,765,774,818,837,856,880,900,909,924,939],{"__ignoreMap":250},[254,561,562,564,566],{"class":256,"line":257},[254,563,261],{"class":260},[254,565,18],{"class":264},[254,567,267],{"class":260},[254,569,570,572,575,577,579,581,584,586],{"class":256,"line":270},[254,571,273],{"class":260},[254,573,574],{"class":264},"HasRelativePath",[254,576,289],{"class":288},[254,578,292],{"class":260},[254,580,296],{"class":295},[254,582,583],{"class":299},"true",[254,585,296],{"class":295},[254,587,305],{"class":260},[254,589,590,592,594,596,598,600,603,605],{"class":256,"line":280},[254,591,273],{"class":260},[254,593,212],{"class":264},[254,595,289],{"class":288},[254,597,292],{"class":260},[254,599,296],{"class":295},[254,601,602],{"class":299},"1",[254,604,296],{"class":295},[254,606,305],{"class":260},[254,608,609,611,613],{"class":256,"line":308},[254,610,273],{"class":260},[254,612,215],{"class":264},[254,614,267],{"class":260},[254,616,617,619,622,625,627,629,632,634,637,639,641,643],{"class":256,"line":328},[254,618,283],{"class":260},[254,620,621],{"class":264},"RelativePathElement",[254,623,624],{"class":288}," Id",[254,626,292],{"class":260},[254,628,296],{"class":295},[254,630,631],{"class":299},"239",[254,633,296],{"class":295},[254,635,636],{"class":288}," Dir",[254,638,292],{"class":260},[254,640,379],{"class":295},[254,642,493],{"class":260},[254,644,646],{"class":645},"sutJx","            \u003C!-- Dir=\"\" means \"..\" ; Id only in Live 10 -->\n",[254,648,649,651,653,655,657,659,662,664,666,668,670,673,675],{"class":256,"line":348},[254,650,283],{"class":260},[254,652,621],{"class":264},[254,654,624],{"class":288},[254,656,292],{"class":260},[254,658,296],{"class":295},[254,660,661],{"class":299},"240",[254,663,296],{"class":295},[254,665,636],{"class":288},[254,667,292],{"class":260},[254,669,296],{"class":295},[254,671,672],{"class":299},"Other Project",[254,674,296],{"class":295},[254,676,305],{"class":260},[254,678,679,681,683],{"class":256,"line":368},[254,680,457],{"class":260},[254,682,215],{"class":264},[254,684,267],{"class":260},[254,686,687,689,692,694,696,698,701,703],{"class":256,"line":384},[254,688,273],{"class":260},[254,690,691],{"class":264},"Name",[254,693,289],{"class":288},[254,695,292],{"class":260},[254,697,296],{"class":295},[254,699,700],{"class":299},"1.wav",[254,702,296],{"class":295},[254,704,305],{"class":260},[254,706,707,709,711,713,715,717,719,721],{"class":256,"line":399},[254,708,273],{"class":260},[254,710,227],{"class":264},[254,712,289],{"class":288},[254,714,292],{"class":260},[254,716,296],{"class":295},[254,718,602],{"class":299},[254,720,296],{"class":295},[254,722,305],{"class":260},[254,724,725,727,730,733,736,738,740,742],{"class":256,"line":419},[254,726,273],{"class":260},[254,728,729],{"class":264},"Data",[254,731,732],{"class":260},">",[254,734,735],{"class":496},"…hex…",[254,737,521],{"class":260},[254,739,729],{"class":264},[254,741,732],{"class":260},[254,743,744],{"class":645},"                                   \u003C!-- absolute path, see below -->\n",[254,746,747,749,752,754,756,758,761,763],{"class":256,"line":439},[254,748,273],{"class":260},[254,750,751],{"class":264},"RefersToFolder",[254,753,289],{"class":288},[254,755,292],{"class":260},[254,757,296],{"class":295},[254,759,760],{"class":299},"false",[254,762,296],{"class":295},[254,764,305],{"class":260},[254,766,767,769,772],{"class":256,"line":454},[254,768,273],{"class":260},[254,770,771],{"class":264},"SearchHint",[254,773,267],{"class":260},[254,775,776,778,781,784,786,788,790,792,795,797,799,801,803,806,808,810,812,814,816],{"class":256,"line":464},[254,777,283],{"class":260},[254,779,780],{"class":264},"PathHint",[254,782,783],{"class":260},">\u003C",[254,785,621],{"class":264},[254,787,624],{"class":288},[254,789,292],{"class":260},[254,791,296],{"class":295},[254,793,794],{"class":299},"25",[254,796,296],{"class":295},[254,798,636],{"class":288},[254,800,292],{"class":260},[254,802,296],{"class":295},[254,804,805],{"class":299},"Users",[254,807,296],{"class":295},[254,809,493],{"class":260},[254,811,497],{"class":496},[254,813,521],{"class":260},[254,815,780],{"class":264},[254,817,267],{"class":260},[254,819,820,822,825,827,829,831,833,835],{"class":256,"line":485},[254,821,283],{"class":260},[254,823,824],{"class":264},"FileSize",[254,826,289],{"class":288},[254,828,292],{"class":260},[254,830,296],{"class":295},[254,832,412],{"class":299},[254,834,296],{"class":295},[254,836,305],{"class":260},[254,838,839,841,844,846,848,850,852,854],{"class":256,"line":518},[254,840,283],{"class":260},[254,842,843],{"class":264},"Crc",[254,845,289],{"class":288},[254,847,292],{"class":260},[254,849,296],{"class":295},[254,851,432],{"class":299},[254,853,296],{"class":295},[254,855,305],{"class":260},[254,857,859,861,864,866,868,870,873,875,877],{"class":256,"line":858},16,[254,860,283],{"class":260},[254,862,863],{"class":264},"MaxCrcSize",[254,865,289],{"class":288},[254,867,292],{"class":260},[254,869,296],{"class":295},[254,871,872],{"class":299},"16384",[254,874,296],{"class":295},[254,876,493],{"class":260},[254,878,879],{"class":645},"                        \u003C!-- 0 when HasExtendedInfo is false -->\n",[254,881,883,885,888,890,892,894,896,898],{"class":256,"line":882},17,[254,884,283],{"class":260},[254,886,887],{"class":264},"HasExtendedInfo",[254,889,289],{"class":288},[254,891,292],{"class":260},[254,893,296],{"class":295},[254,895,583],{"class":299},[254,897,296],{"class":295},[254,899,305],{"class":260},[254,901,903,905,907],{"class":256,"line":902},18,[254,904,457],{"class":260},[254,906,771],{"class":264},[254,908,267],{"class":260},[254,910,912,914,916,918,920,922],{"class":256,"line":911},19,[254,913,273],{"class":260},[254,915,230],{"class":264},[254,917,289],{"class":288},[254,919,292],{"class":260},[254,921,379],{"class":295},[254,923,305],{"class":260},[254,925,927,929,931,933,935,937],{"class":256,"line":926},20,[254,928,273],{"class":260},[254,930,233],{"class":264},[254,932,289],{"class":288},[254,934,292],{"class":260},[254,936,379],{"class":295},[254,938,305],{"class":260},[254,940,942,944,946],{"class":256,"line":941},21,[254,943,521],{"class":260},[254,945,18],{"class":264},[254,947,267],{"class":260},[949,950,951,959,977],"ul",{},[952,953,954,955,958],"li",{},"The format is chosen by ",[102,956,957],{},"\"\u003CHasRelativePath \""," appearing in the body.",[952,960,961,962,965,966,969,970,973,974,201],{},"Live 9 has no ",[102,963,964],{},"Id"," attributes. ",[102,967,968],{},"HasRelativePath=\"false\""," comes with ",[102,971,972],{},"\u003CRelativePath \u002F>"," and ",[102,975,976],{},"\u003CData \u002F>",[952,978,979,980,983],{},"The hint path is ",[102,981,982],{},"\"\u002F\" + PathHint dirs + \"\u002F\" + Name",", used only when both are present.",[985,986,988],"h3",{"id":987},"data",[102,989,729],{},[98,991,992],{},"Hex text (whitespace ignored) decoded to bytes:",[949,994,995,1009],{},[952,996,997,1001,1002,973,1005,1008],{},[998,999,1000],"strong",{},"Windows:"," ",[102,1003,1004],{},"raw[1] == 0",[102,1006,1007],{},"raw[2:4] == \":\\0\""," → UTF-16LE path up to the first NUL.",[952,1010,1011,1014],{},[998,1012,1013],{},"macOS classic alias, version 2:",[949,1015,1016,1024,1039,1053],{},[952,1017,1018,973,1021],{},[102,1019,1020],{},"len ≥ 150",[102,1022,1023],{},"u16be(raw[6:8]) == 2",[952,1025,1026,1027,1030,1031,1034,1035,1038],{},"tagged records start at offset 150: ",[102,1028,1029],{},"i16be"," tag, ",[102,1032,1033],{},"u16be"," length, data, padded to an even length; tag ",[102,1036,1037],{},"-1"," ends the list",[952,1040,1041,1042,1045,1046,1049,1050],{},"tag ",[102,1043,1044],{},"0x12"," is the POSIX path relative to the volume; tag ",[102,1047,1048],{},"0x13"," is the mount point, giving ",[102,1051,1052],{},"mount.rstrip('\u002F') + '\u002F' + path.lstrip('\u002F')",[952,1054,1055,1056,1058,1059,1062,1063],{},"otherwise tag ",[102,1057,361],{}," is an HFS path ",[102,1060,1061],{},"Vol:dir:file"," in Mac Roman, giving ",[102,1064,1065],{},"'\u002F' + parts[1:].join('\u002F')",[203,1067,212],{"id":1068},"relativepathtype",[98,1070,1071],{},"Source: Mattijs Kneppers (maxdevtools author) on the Cycling '74 forum, confirmed against real sets.",[107,1073,1074,1087],{},[110,1075,1076],{},[113,1077,1078,1082,1084],{},[116,1079,1081],{"align":1080},"right","Value",[116,1083,121],{},[116,1085,1086],{},"Resolved against",[126,1088,1089,1099,1112,1129,1143,1156,1166,1186,1196],{},[113,1090,1091,1093,1096],{},[131,1092,1037],{"align":1080},[131,1094,1095],{},"invalid",[131,1097,1098],{},"—",[113,1100,1101,1104,1107],{},[131,1102,1103],{"align":1080},"0",[131,1105,1106],{},"unknown",[131,1108,1109,1110],{},"only ",[102,1111,223],{},[113,1113,1114,1116,1126],{},[131,1115,602],{"align":1080},[131,1117,1118,1119,1122,1123,140],{},"relative to the document (the folder of the ",[102,1120,1121],{},".als","; may climb with ",[102,1124,1125],{},"..",[131,1127,1128],{},"set folder, then project root",[113,1130,1131,1133,1136],{},[131,1132,361],{"align":1080},[131,1134,1135],{},"old library",[131,1137,1138,1139,1142],{},"only through ",[102,1140,1141],{},"filerefmap.db"," (type 2 → 5)",[113,1144,1145,1147,1153],{},[131,1146,300],{"align":1080},[131,1148,1149,1150,140],{},"relative to the project root (nearest folder upward with ",[102,1151,1152],{},"Ableton Project Info",[131,1154,1155],{},"project root, then set folder",[113,1157,1158,1161,1164],{},[131,1159,1160],{"align":1080},"4",[131,1162,1163],{},"reserved",[131,1165,1098],{},[113,1167,1168,1171,1180],{},[131,1169,1170],{"align":1080},"5",[131,1172,1173,1174,1176,1177,140],{},"factory pack \u002F Core Library (",[102,1175,233],{},", Core Library = ",[102,1178,1179],{},"www.ableton.com\u002F0",[131,1181,1182,1183],{},"Core Library, or ",[102,1184,1185],{},"Factory Packs\u002F\u003CLivePackName>",[113,1187,1188,1191,1194],{},[131,1189,1190],{"align":1080},"6",[131,1192,1193],{},"User Library",[131,1195,1193],{},[113,1197,1198,1201,1207],{},[131,1199,1200],{"align":1080},"7",[131,1202,1203,1204,140],{},"built-in content (",[102,1205,1206],{},"\u003CLive.app>\u002FContents\u002FApp-Resources\u002FBuiltin",[131,1208,1209],{},"Builtin",[98,1211,1212],{},"Counts in one real library (917 sets): 3 = 296,399; 1 = 289,371; 5 = 262,209; 0 = 56,934; 6 = 17,519; 2 = 398; 7 = 385.",[98,1214,1215,1218,1219,1221,1222,1224,1225,1230],{},[102,1216,1217],{},"FileRef\u002FType"," is 1 in every reference whose ",[102,1220,729],{}," holds a path of Windows and 2 in every one whose ",[102,1223,729],{}," is a Mac alias (see ",[1226,1227,1229],"a",{"href":1228},"#windows","Windows"," for the counts). That suggests it records the system the set was saved on, but this is unverified. livesaver leaves it as it is, on either system.",[203,1232,1229],{"id":1233},"windows",[98,1235,1236],{},"What references with a path of Windows store, counted read-only in one real library on a Mac (3,806 sets and backups):",[949,1238,1239,1272],{},[952,1240,1241,1244,1245,1247,1248,1251,1252,1254,1255,1257,1258,1261,1262,1265,1266,1268,1269,1271],{},[998,1242,1243],{},"Old format (Live 9 and 10 on Windows):"," 2,938,985 references in 2,103 sets hold a path of Windows in ",[102,1246,729],{},", with backslashes (",[102,1249,1250],{},"E:\\Samples\\Kick\\1.wav","). Every one has ",[102,1253,227],{}," 1. Where there is a ",[102,1256,780],{}," (2,464,731 of them), it holds the folders of that path ",[998,1259,1260],{},"without the drive",": its first element is never ",[102,1263,1264],{},"E:",". (The 468,425 references whose ",[102,1267,729],{}," is a Mac alias all have ",[102,1270,227],{}," 2.)",[952,1273,1274,1277,1278,1280,1281,1284,1285,1287,1288,1290,1291,1293,1294,174,1296,1298],{},[998,1275,1276],{},"New format:"," 22 references hold a drive in ",[102,1279,223],{},", written with forward slashes (",[102,1282,1283],{},"C:\u002FSamples\u002FKick\u002F1.wav","). All have ",[102,1286,212],{}," 0, the file's name alone as ",[102,1289,215],{},", and ",[102,1292,227],{}," 2: by that they were written on a Mac, when a newer Live saved a set that came from Windows. So Live writes a path with a drive into the new format with forward slashes; what a Live on Windows writes beside it (",[102,1295,227],{},[102,1297,215],{},") was not seen.",[98,1300,1301,1302,1304,1305,1308,1309,174,1312,1315,1316,174,1319,973,1322,1325,1326,201],{},"livesaver handles every path with ",[102,1303,219],{}," between its parts, and takes a drive as a root of its own (",[102,1306,1307],{},"C:\u002FUsers\u002F…","): ",[102,1310,1311],{},"posix.slashed",[102,1313,1314],{},"posix.drive"," and the drive-aware ",[102,1317,1318],{},"normpath",[102,1320,1321],{},"relpath",[102,1323,1324],{},"commonpath"," of ",[102,1327,1328],{},"@livesaver\u002Fcore",[949,1330,1331,1338,1352],{},[952,1332,1333,1334,1337],{},"A stored path of Windows is tried as a file only where the project itself lies on a drive, and a stored path of a Mac only where it does not: Windows would open ",[102,1335,1336],{},"\u002FUsers\u002Fyou\u002Fx.wav"," as a file of its current drive, which is not the file the set means.",[952,1339,1340,1341,973,1344,1347,1348,1351],{},"What a path says of Live's own content holds on both: ",[102,1342,1343],{},"\u002FApplications\u002FAbleton Live 9 Suite.app\u002FContents\u002FApp-Resources\u002F\u003Crest>",[102,1345,1346],{},"C:\u002FProgramData\u002FAbleton\u002FLive 9 Suite\u002FResources\u002F\u003Crest>"," are tried as ",[102,1349,1350],{},"\u003Crest>"," in the content of the Live at hand (the second where the project lies on a drive; that folder is as Ableton documents it, no set of the library names it).",[952,1353,1354,1355,1357,1358,1360,1361,1363],{},"Written on Windows: ",[102,1356,223],{}," with the drive and forward slashes, and in the old format the ",[102,1359,780],{}," without the drive. ",[102,1362,227],{}," stays.",[98,1365,1366,1367,1371],{},"None of this was tried in Live on Windows (see ",[1226,1368,1370],{"href":1369},"..\u002Fguide\u002Fwindows","the guide",").",[203,1373,1375],{"id":1374},"patching","Patching",[949,1377,1378,1384,1390,1407,1460,1468],{},[952,1379,1380,1383],{},[998,1381,1382],{},"Rewrite type:"," a target inside the project gets type 3, relative to the root; inside a pack, type 5 with the pack's name and id; otherwise type 1, relative to the set folder.",[952,1385,1386,1389],{},[998,1387,1388],{},"Path components:"," written in NFC.",[952,1391,1392,1394,1395,174,1397,174,1399,1401,1402,973,1404,1406],{},[998,1393,1276],{}," set ",[102,1396,212],{},[102,1398,215],{},[102,1400,223],{},", plus the pack fields for type 5. ",[102,1403,236],{},[102,1405,239],{}," stay: they describe the original file, as Live does.",[952,1408,1409,1412],{},[998,1410,1411],{},"Old format:",[949,1413,1414,1424,1440,1443,1446],{},[952,1415,1416,1417,174,1420,973,1422],{},"set ",[102,1418,1419],{},"HasRelativePath=\"true\"",[102,1421,212],{},[102,1423,691],{},[952,1425,1426,1427,1429,1430,1432,1433,1436,1437,1439],{},"rebuild the ",[102,1428,215],{}," list (",[102,1431,1125],{}," written as ",[102,1434,1435],{},"Dir=\"\"","), and the ",[102,1438,780],{}," list if present, keeping indentation plus a tab per element",[952,1441,1442],{},"reuse the old element Ids by position; new Ids are max + 1",[952,1444,1445],{},"write Ids if the document has any, or if Creator starts with \"Ableton Live 10\"",[952,1447,1448,174,1450,174,1452,973,1454,1456,1457,1459],{},[102,1449,729],{},[102,1451,227],{},[102,1453,824],{},[102,1455,843],{}," stay (Live 12 loads a stale ",[102,1458,729],{}," fine)",[952,1461,1462,1467],{},[998,1463,1464,1466],{},[102,1465,469],{},":"," set to the int mtime of the destination; stale-path fixes leave it alone.",[952,1469,1470,1473,1474,1477,1478,1481],{},[998,1471,1472],{},"Quoting:"," every rewritten value is written as ",[102,1475,1476],{},"\u003CTag Value=\"…\" \u002F>"," with ",[102,1479,1480],{},"& \u003C > \""," escaped.",[98,1483,1484,1485,1488,1489,1492],{},"Live itself does not check the fingerprint when loading, only in its automatic search; ",[102,1486,1487],{},"-_RelaxFileManagerSearch"," in ",[102,1490,1491],{},"Options.txt"," relaxes even that.",[1494,1495,1496],"style",{},"html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sQzsp, html code.shiki .sQzsp{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .s9AJx, html code.shiki .s9AJx{--shiki-light:#9C3EDA;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":250,"searchDepth":270,"depth":270,"links":1498},[1499,1500,1503,1504,1505],{"id":205,"depth":270,"text":206},{"id":553,"depth":270,"text":554,"children":1501},[1502],{"id":987,"depth":280,"text":729},{"id":1068,"depth":270,"text":212},{"id":1233,"depth":270,"text":1229},{"id":1374,"depth":270,"text":1375},"md",{},true,{"title":18,"description":19},"docs\u002Fformat\u002Ffileref","VwhSGVnVDXl3YKYOlj8NAGVx8vMEfznmeTBynoEpc1Q",1791245844201]