[{"data":1,"prerenderedAt":2737},["ShallowReactive",2],{"\u002Fdocs\u002Fsecurity-guide":3,"doc-\u002Fdocs\u002Fsecurity-guide":2482},[4,390,774,916,1118,2025,2393],{"id":5,"title":6,"body":7,"description":382,"extension":383,"meta":384,"navigation":385,"path":386,"seo":387,"stem":388,"__hash__":389},"content\u002Fdocs\u002Fgetting-started.md","Getting Started",{"type":8,"value":9,"toc":360},"minimark",[10,14,18,21,26,29,50,59,62,64,68,71,76,79,106,110,113,133,137,144,146,150,153,170,173,175,179,192,194,198,201,221,229,231,235,238,256,258,262,265,267,271,274,294,297,299,303,306,320,322,326,333,335,339],[11,12,6],"h1",{"id":13},"getting-started",[15,16,17],"p",{},"This guide walks you through everything you need to know to use AutoButler day-to-day. No technical knowledge required.",[19,20],"hr",{},[22,23,25],"h2",{"id":24},"accessing-autobutler","Accessing AutoButler",[15,27,28],{},"Once AutoButler is set up on your home network, you can reach it from any device on your WiFi:",[30,31,32,36,47],"ol",{},[33,34,35],"li",{},"Open a browser on your phone, tablet, or computer",[33,37,38,39,46],{},"Go to ",[40,41,42],"strong",{},[43,44,45],"code",{},"http:\u002F\u002Fautobutler.home.local"," (or whatever hostname your device was given during setup)",[33,48,49],{},"Log in with your username and password",[51,52,53],"blockquote",{},[15,54,55,58],{},[40,56,57],{},"Tip:"," Bookmark the address so you don't have to type it every time.",[15,60,61],{},"If you can't reach the address, make sure the device running AutoButler is powered on and connected to the same WiFi network you're on. AutoButler only works on your local network — this is by design to keep your files private.",[19,63],{},[22,65,67],{"id":66},"cirrus-your-files","Cirrus — Your Files",[15,69,70],{},"Cirrus is the file browser. Think of it like a Google Drive or iCloud interface, except everything lives on your hardware at home.",[72,73,75],"h3",{"id":74},"browsing-your-files","Browsing your files",[15,77,78],{},"When you open Cirrus you'll see your files and folders listed. You can:",[80,81,82,88,94,100],"ul",{},[33,83,84,87],{},[40,85,86],{},"Click a folder"," to open it",[33,89,90,93],{},[40,91,92],{},"Click a file"," to download or preview it (images and common file types open in a viewer)",[33,95,96,99],{},[40,97,98],{},"Use the breadcrumb bar"," at the top to navigate back up the folder tree",[33,101,102,105],{},[40,103,104],{},"Click the home icon"," in the breadcrumb to jump back to the root",[72,107,109],{"id":108},"changing-the-view","Changing the view",[15,111,112],{},"Cirrus has three layouts — pick whichever works best for what you're doing:",[80,114,115,121,127],{},[33,116,117,120],{},[40,118,119],{},"List"," — a compact row-by-row view, good for lots of files",[33,122,123,126],{},[40,124,125],{},"Grid"," — larger thumbnails, good for photos",[33,128,129,132],{},[40,130,131],{},"Unified \u002F Per-device"," — toggle between seeing all your storage devices as one combined view, or seeing each device separately",[72,134,136],{"id":135},"searching-for-a-file","Searching for a file",[15,138,139,140,143],{},"Click the ",[40,141,142],{},"search icon"," in the top bar and type a filename. Cirrus will search across all your connected storage.",[19,145],{},[22,147,149],{"id":148},"uploading-files","Uploading Files",[15,151,152],{},"To add files to your AutoButler:",[30,154,155,158,164,167],{},[33,156,157],{},"Navigate to the folder you want to upload into",[33,159,139,160,163],{},[40,161,162],{},"Upload"," button in the top bar",[33,165,166],{},"Choose your files from your device",[33,168,169],{},"Wait for the upload to complete — a progress indicator will show you how it's going",[15,171,172],{},"You can upload multiple files at once. Large files may take a moment depending on your home network speed.",[19,174],{},[22,176,178],{"id":177},"creating-folders","Creating Folders",[30,180,181,184,189],{},[33,182,183],{},"Navigate to where you want the new folder",[33,185,139,186,163],{},[40,187,188],{},"New",[33,190,191],{},"Type a name and confirm",[19,193],{},[22,195,197],{"id":196},"moving-and-renaming-files","Moving and Renaming Files",[15,199,200],{},"Right-click (or long-press on mobile) any file or folder to open the action menu. From there you can:",[80,202,203,209,215],{},[33,204,205,208],{},[40,206,207],{},"Rename"," — change the name",[33,210,211,214],{},[40,212,213],{},"Move"," — move it to a different folder or storage device",[33,216,217,220],{},[40,218,219],{},"Delete"," — remove it permanently",[51,222,223],{},[15,224,225,228],{},[40,226,227],{},"Note:"," Deleting files is permanent. There is no recycle bin.",[19,230],{},[22,232,234],{"id":233},"storage-devices","Storage Devices",[15,236,237],{},"AutoButler can manage multiple storage devices (hard drives, USB drives) connected to your butler device. If you have more than one:",[80,239,240,247,253],{},[33,241,242,243,246],{},"Use the ",[40,244,245],{},"Unified view"," to see everything in one place",[33,248,242,249,252],{},[40,250,251],{},"Per-device view"," to see what's on each drive separately",[33,254,255],{},"When uploading, you may be prompted to choose which device to upload to",[19,257],{},[22,259,261],{"id":260},"photos","Photos",[15,263,264],{},"The Photos section shows your images organized by time. You can browse, view, and download your photos from here. Photos works best when your images are stored in a dedicated photos folder on your storage device.",[19,266],{},[22,268,270],{"id":269},"health","Health",[15,272,273],{},"The Health page shows you how your AutoButler is doing:",[80,275,276,282,288],{},[33,277,278,281],{},[40,279,280],{},"Disk usage"," — how much storage space is used vs. available",[33,283,284,287],{},[40,285,286],{},"Temperature"," — the device's current temperature (important for small devices like a Raspberry Pi)",[33,289,290,293],{},[40,291,292],{},"Uptime"," — how long the device has been running",[15,295,296],{},"If anything looks off (disk nearly full, temperature very high), this is where you'll see it first.",[19,298],{},[22,300,302],{"id":301},"settings","Settings",[15,304,305],{},"The Settings page lets you:",[80,307,308,314],{},[33,309,310,313],{},[40,311,312],{},"Toggle automatic updates"," — turn on to have AutoButler update itself overnight when a new version is available; turn off if you want to control updates manually",[33,315,316,319],{},[40,317,318],{},"Export performance metrics"," — saves recent health data to a file you can share if you're troubleshooting with the team",[19,321],{},[22,323,325],{"id":324},"logging-out","Logging Out",[15,327,328,329,332],{},"Click your username or the settings icon and choose ",[40,330,331],{},"Log out"," when you're done. This is good practice on shared devices.",[19,334],{},[22,336,338],{"id":337},"next-steps","Next Steps",[80,340,341,351],{},[33,342,343,350],{},[40,344,345],{},[346,347,349],"a",{"href":348},"\u002Fdocs\u002Fhelp","Help & Support"," — troubleshooting and how to get in touch",[33,352,353,359],{},[40,354,355],{},[346,356,358],{"href":357},"\u002Fdocs\u002Fnerd-notes","Nerd Notes"," — technical details for self-hosters and tinkerers",{"title":361,"searchDepth":362,"depth":363,"links":364},"",6,5,[365,367,373,374,375,376,377,378,379,380,381],{"id":24,"depth":366,"text":25},2,{"id":66,"depth":366,"text":67,"children":368},[369,371,372],{"id":74,"depth":370,"text":75},3,{"id":108,"depth":370,"text":109},{"id":135,"depth":370,"text":136},{"id":148,"depth":366,"text":149},{"id":177,"depth":366,"text":178},{"id":196,"depth":366,"text":197},{"id":233,"depth":366,"text":234},{"id":260,"depth":366,"text":261},{"id":269,"depth":366,"text":270},{"id":301,"depth":366,"text":302},{"id":324,"depth":366,"text":325},{"id":337,"depth":366,"text":338},"Get up and running with AutoButler — adding files, managing storage, and finding your way around","md",{},{"title":6,"order":366},"\u002Fdocs\u002Fgetting-started",{"title":6,"description":382},"docs\u002Fgetting-started","RabD8HWyQS7xEsI959JkOgYHGnntDaLj___ybUd1t5E",{"id":391,"title":392,"body":393,"description":766,"extension":383,"meta":767,"navigation":768,"path":770,"seo":771,"stem":772,"__hash__":773},"content\u002Fdocs\u002Fgoogle-takeout.md","Migrating from Google — Google Takeout Guide",{"type":8,"value":394,"toc":757},[395,398,405,407,411,474,477,493,495,499,502,513,515,519,522,551,558,560,564,567,591,623,626,628,632,639,656,658,662,668,674,680,700,702,706,709,736,739,741],[11,396,392],{"id":397},"migrating-from-google-google-takeout-guide",[15,399,400,401,404],{},"Google Takeout lets you download a copy of everything you've stored with Google — your photos, Drive files, emails, and more. This guide walks you through exporting your Google data and importing it into AutoButler, where it lives ",[40,402,403],{},"on your own hardware, on your own home network"," — not on anyone else's server.",[19,406],{},[22,408,410],{"id":409},"step-1-request-your-google-takeout-export","Step 1: Request your Google Takeout export",[30,412,413,424,444,450,456,469],{},[33,414,38,415,423],{},[40,416,417],{},[346,418,422],{"href":419,"rel":420},"https:\u002F\u002Ftakeout.google.com",[421],"nofollow","takeout.google.com"," (sign in if prompted)",[33,425,426,427],{},"You'll see a list of Google products. Deselect everything, then check only the ones you want:\n",[80,428,429,435,441],{},[33,430,431,434],{},[40,432,433],{},"Google Photos"," — your photos and videos",[33,436,437,440],{},[40,438,439],{},"Google Drive"," — documents, spreadsheets, and files",[33,442,443],{},"(You can add others later — start small for your first export)",[33,445,446,447],{},"Click ",[40,448,449],{},"Next step",[33,451,452,453],{},"Under \"Delivery method,\" choose ",[40,454,455],{},"Send download link via email",[33,457,458,459,464,465,468],{},"Set file type to ",[40,460,461],{},[43,462,463],{},".zip"," and choose a size — ",[40,466,467],{},"2 GB"," works well (larger sizes can be harder to upload)",[33,470,446,471],{},[40,472,473],{},"Create export",[15,475,476],{},"Google will take anywhere from a few minutes to a few days to prepare your export, depending on how much data you have. You'll get an email when it's ready.",[51,478,479],{},[15,480,481,484,485,488,489,492],{},[40,482,483],{},"Heads up:"," Large Google Photos libraries often split into multiple zip files (e.g. ",[43,486,487],{},"takeout-20240101-001.zip",", ",[43,490,491],{},"takeout-20240101-002.zip","). That's normal — just repeat the upload steps below for each one.",[19,494],{},[22,496,498],{"id":497},"step-2-download-your-export","Step 2: Download your export",[15,500,501],{},"When Google emails you that your export is ready:",[30,503,504,507,510],{},[33,505,506],{},"Open the email from Google",[33,508,509],{},"Click the download link for each zip file",[33,511,512],{},"Save them somewhere you can find them (your Downloads folder works fine)",[19,514],{},[22,516,518],{"id":517},"step-3-upload-to-autobutler","Step 3: Upload to AutoButler",[15,520,521],{},"AutoButler runs on your home network — your files go from your computer directly to the device in your home, without passing through the internet or any cloud service.",[30,523,524,527,533,540,543,548],{},[33,525,526],{},"Make sure you're connected to your home WiFi",[33,528,529,530],{},"Open AutoButler in your browser and navigate to ",[40,531,532],{},"Files",[33,534,535,536,539],{},"Create a folder for your Google data if you want to keep things organized (e.g. ",[43,537,538],{},"Google Import",")",[33,541,542],{},"Navigate into that folder",[33,544,446,545,547],{},[40,546,162],{}," and select your Takeout zip file(s)",[33,549,550],{},"Wait for the upload to complete — large files may take a few minutes depending on your home network speed",[51,552,553],{},[15,554,555,557],{},[40,556,57],{}," You can upload multiple zip files at once by selecting them all in the file picker.",[19,559],{},[22,561,563],{"id":562},"step-4-extract-the-contents","Step 4: Extract the contents",[15,565,566],{},"Once uploaded, your zip file is sitting in AutoButler but still compressed. To get your actual photos and files out:",[30,568,569,575,582,588],{},[33,570,571,572,574],{},"Find the uploaded ",[43,573,463],{}," file in the Files view",[33,576,577,578,581],{},"Right-click it (or tap the ",[40,579,580],{},"⋮"," menu)",[33,583,584,585],{},"Select ",[40,586,587],{},"Extract here",[33,589,590],{},"AutoButler will unpack the zip in place — this may take a moment for large archives",[51,592,593],{},[15,594,595,598,599,601,602,605,606,609,610,612,613,488,616,488,619,622],{},[40,596,597],{},"About Google Photos' nested structure:"," Google Photos exports put your photos inside a folder called ",[43,600,433],{},", then inside year folders like ",[43,603,604],{},"Photos from 2022",". Inside each year folder you'll find your photos alongside ",[43,607,608],{},".json"," sidecar files containing metadata. The ",[43,611,608],{}," files are Google's metadata — you can keep them or delete them; your actual photos are the ",[43,614,615],{},".jpg",[43,617,618],{},".heic",[43,620,621],{},".mp4",", etc. files.",[15,624,625],{},"After extraction you can delete the original zip file to reclaim space.",[19,627],{},[22,629,631],{"id":630},"step-5-browse-your-files","Step 5: Browse your files",[15,633,634,635,638],{},"Your photos and documents are now stored on ",[40,636,637],{},"your device, in your home"," — not on Google's servers, not on anyone else's. You can access them from any device connected to your home WiFi:",[80,640,641,647,653],{},[33,642,643,644,646],{},"Browse them in the ",[40,645,532],{}," section",[33,648,649,650,652],{},"View photos in the ",[40,651,261],{}," section (AutoButler automatically finds images in your files)",[33,654,655],{},"Access them from any phone, tablet, or computer on your home network",[19,657],{},[22,659,661],{"id":660},"tips","Tips",[15,663,664,667],{},[40,665,666],{},"Start with a small export first."," Export just one year of photos to get comfortable with the process before importing everything.",[15,669,670,673],{},[40,671,672],{},"Multiple zip files?"," Upload and extract each one the same way. Google splits large libraries into separate zips — they all contain different files, so you want to import all of them.",[15,675,676,679],{},[40,677,678],{},"Zip inside a zip?"," Google sometimes packages exports as a zip containing other zips. If you see nested zips after extracting, just extract those too — AutoButler handles zip extraction at any level.",[15,681,682,685,686,488,689,488,692,695,696,699],{},[40,683,684],{},"What about Google Docs files?"," Google Docs, Sheets, and Slides export as Microsoft Office formats (",[43,687,688],{},".docx",[43,690,691],{},".xlsx",[43,693,694],{},".pptx",") or as ",[43,697,698],{},".pdf",". They'll show up in your files just like any other document.",[19,701],{},[22,703,705],{"id":704},"what-about-other-google-services","What about other Google services?",[15,707,708],{},"This guide covers Photos and Drive, but Google Takeout supports many other products. Once you're comfortable with the process, you can also export:",[80,710,711,721,730],{},[33,712,713,716,717,720],{},[40,714,715],{},"Gmail"," (as ",[43,718,719],{},".mbox"," format) — email clients like Thunderbird can import these",[33,722,723,716,726,729],{},[40,724,725],{},"Google Calendar",[43,727,728],{},".ics",") — most calendar apps can import these",[33,731,732,735],{},[40,733,734],{},"YouTube"," — your videos, watch history, and liked videos",[15,737,738],{},"AutoButler is primarily a file and photo manager, so the Photos and Drive exports are the most useful to store there directly.",[19,740],{},[15,742,743],{},[744,745,746,747,751,752,756],"em",{},"Need help? Visit the ",[346,748,750],{"href":749},"\u002Fsupport","support page"," or ",[346,753,755],{"href":754},"\u002Fcommunity","community forums",".",{"title":361,"searchDepth":362,"depth":363,"links":758},[759,760,761,762,763,764,765],{"id":409,"depth":366,"text":410},{"id":497,"depth":366,"text":498},{"id":517,"depth":366,"text":518},{"id":562,"depth":366,"text":563},{"id":630,"depth":366,"text":631},{"id":660,"depth":366,"text":661},{"id":704,"depth":366,"text":705},"How to export your data from Google and import it into AutoButler using Google Takeout",{},{"title":769,"order":363},"Google Takeout Guide","\u002Fdocs\u002Fgoogle-takeout",{"title":392,"description":766},"docs\u002Fgoogle-takeout","ROgJbRGl4oLnOyLE9FPNMa4d8AtPRDdicUkYqzS2rU4",{"id":775,"title":349,"body":776,"description":909,"extension":383,"meta":910,"navigation":911,"path":348,"seo":913,"stem":914,"__hash__":915},"content\u002Fdocs\u002Fhelp.md",{"type":8,"value":777,"toc":899},[778,781,783,787,791,808,812,825,829,832,836,868,872,875,877,881,891],[11,779,349],{"id":780},"help-support",[19,782],{},[22,784,786],{"id":785},"troubleshooting","Troubleshooting",[72,788,790],{"id":789},"i-cant-reach-autobutler-in-my-browser","I can't reach AutoButler in my browser",[80,792,793,796,799,805],{},[33,794,795],{},"Make sure the device running AutoButler is powered on",[33,797,798],{},"Make sure you're on the same WiFi network as the AutoButler device",[33,800,801,802,804],{},"Try ",[43,803,45],{}," — if you changed the hostname during setup, use that instead",[33,806,807],{},"Try restarting your router and the AutoButler device",[72,809,811],{"id":810},"im-getting-an-error-when-i-try-to-install-autobutler","I'm getting an error when I try to install AutoButler",[15,813,814,815,818,819,824],{},"Make sure you're using the installer for your operating system and architecture. The ",[346,816,817],{"href":357},"nerd notes"," page has installation details. If you're still stuck, ",[346,820,823],{"href":821,"rel":822},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Fissues",[421],"open a GitHub issue"," and someone will help.",[72,826,828],{"id":827},"autobutler-doesnt-work-with-my-vpn","AutoButler doesn't work with my VPN",[15,830,831],{},"This is expected. AutoButler runs entirely on your local network — connecting through a VPN routes traffic outside your home, so the two conflict. Disable your VPN when accessing AutoButler on your home network. (We're working on built-in remote access so you won't need a third-party VPN to reach your butler from outside your home.)",[72,833,835],{"id":834},"im-having-performance-issues","I'm having performance issues",[30,837,838,844,855],{},[33,839,840,841,843],{},"Check the ",[40,842,270],{}," page in AutoButler — high disk usage or high temperatures can cause slowdowns",[33,845,846,847,850,851,854],{},"In Settings, click ",[40,848,849],{},"Export Performance Metrics"," — this saves recent health data to a ",[43,852,853],{},"metrics.sqlite"," file",[33,856,857,858,862,863,867],{},"Share that file in a ",[346,859,861],{"href":821,"rel":860},[421],"GitHub issue"," or email it to ",[346,864,866],{"href":865},"mailto:support@autobutler.org","support@autobutler.org"," and we'll take a look",[72,869,871],{"id":870},"my-files-arent-showing-up-after-i-uploaded-them","My files aren't showing up after I uploaded them",[15,873,874],{},"Try refreshing the page. If they still don't appear, check that your upload completed successfully (the progress indicator should have reached 100%). Very large files can take a minute.",[19,876],{},[22,878,880],{"id":879},"get-help","Get Help",[15,882,883,886,887],{},[40,884,885],{},"GitHub Issues"," for questions, bug reports, and feature requests:\n→ ",[346,888,890],{"href":821,"rel":889},[421],"github.com\u002Fautobutler-org\u002Fautobutler\u002Fissues",[15,892,893,896,897],{},[40,894,895],{},"Email"," for private matters:\n→ ",[346,898,866],{"href":865},{"title":361,"searchDepth":362,"depth":363,"links":900},[901,908],{"id":785,"depth":366,"text":786,"children":902},[903,904,905,906,907],{"id":789,"depth":370,"text":790},{"id":810,"depth":370,"text":811},{"id":827,"depth":370,"text":828},{"id":834,"depth":370,"text":835},{"id":870,"depth":370,"text":871},{"id":879,"depth":366,"text":880},"Get help and support for AutoButler",{},{"title":912,"order":370},"Help",{"title":349,"description":909},"docs\u002Fhelp","VOS7CemJDQXAvob4uMdbTaVutcVola_YKus3sSAu7VM",{"id":917,"title":918,"body":919,"description":1109,"extension":383,"meta":1110,"navigation":1111,"path":1114,"seo":1115,"stem":1116,"__hash__":1117},"content\u002Fdocs\u002Fhow-it-works.md","How AutoButler Works",{"type":8,"value":920,"toc":1100},[921,924,927,930,934,938,965,967,970,973,977,980,1013,1015,1017,1020,1023,1027,1030,1033,1036,1054,1056,1058,1061,1064,1068,1071,1097],[11,922,918],{"id":923},"how-autobutler-works",[15,925,926],{},"AutoButler is a small device that sits on your home network and stores\nyour files on hard drives you own. Nothing leaves your house.",[15,928,929],{},"Here's what that looks like.",[22,931,933],{"id":932},"your-files-your-network","Your files, your network",[22,935,937],{"id":936},"mermaid","::mermaid",[15,939,940,941,945,946,949,950,953,954,957,958,961,962,945],{},"code: |\ngraph LR\nPhone",[942,943,944],"span",{},"\"📱 Your Phone\""," -->|WiFi| Router",[942,947,948],{},"\"🏠 Home Router\"","\nRouter --> Butler",[942,951,952],{},"\"🤖 AutoButler\"","\nButler --> Drive",[942,955,956],{},"\"💾 Your Drive\"","\nLaptop",[942,959,960],{},"\"💻 Your Laptop\""," -->|WiFi| Router\nTablet",[942,963,964],{},"\"📱 Tablet\"",[19,966],{},[15,968,969],{},"::",[15,971,972],{},"Every device on your home WiFi can access AutoButler.\nYour files are stored on the hard drive you plug in —\nnot on Google's servers, not on Apple's servers, not anywhere else.",[22,974,976],{"id":975},"how-this-is-different-from-icloud-or-google-photos","How this is different from iCloud or Google Photos",[22,978,937],{"id":979},"mermaid-1",[15,981,982,983,986,987,989,990,993,994,996,997,1000,1001,1003,1004,1006,1007,1009,1010,1012],{},"code: |\ngraph TD\nsubgraph cloud",[942,984,985],{},"\"❌ Cloud Storage — your data leaves home\"","\nP1",[942,988,944],{}," -->|Internet| CS",[942,991,992],{},"\"☁️ Google \u002F Apple Servers\"","\nCS -->|Internet| P2",[942,995,960],{},"\nend\nsubgraph local",[942,998,999],{},"\"✅ AutoButler — your data stays home\"","\nP3",[942,1002,944],{}," -->|Local WiFi| AB",[942,1005,952],{},"\nAB --> D",[942,1008,956],{},"\nAB -->|Local WiFi| P4",[942,1011,960],{},"\nend",[19,1014],{},[15,1016,969],{},[15,1018,1019],{},"With cloud storage, your photos and files travel over the internet\nto a server you don't own. Every photo you take, every document you\nsave — it all goes to someone else's computer first.",[15,1021,1022],{},"With AutoButler, your files go straight to a device sitting in your\nhome. You own the hardware, you own the data.",[22,1024,1026],{"id":1025},"accessing-from-outside-your-home-coming-soon","Accessing from outside your home (coming soon)",[15,1028,1029],{},"We're adding the ability to access your files from anywhere — at\nwork, traveling, or on your phone's data connection.",[15,1031,1032],{},"When you set up AutoButler, your phone and your device establish a\nprivate, encrypted tunnel between them. This happens automatically —\nyou don't need to configure anything.",[22,1034,937],{"id":1035},"mermaid-2",[15,1037,1038,1039,1042,1043,1046,1047,1050,1051,1053],{},"code: |\ngraph TD\nPhone",[942,1040,1041],{},"\"📱 Your Phone\\n(anywhere in the world)\"","\nPi",[942,1044,1045],{},"\"🤖 AutoButler\\n(at home)\"","\nCoord",[942,1048,1049],{},"\"AutoButler\\nCoordination Server\"","\nDrive",[942,1052,956],{},"\nPhone \u003C-->|\"Encrypted direct tunnel\"| Pi\nPi --- Drive\nPhone -.->|\"Connection setup only\"| Coord\nCoord -.->|\"Connection setup only\"| Pi",[19,1055],{},[15,1057,969],{},[15,1059,1060],{},"The coordination server only helps your phone and your AutoButler\nfind each other. Once they're connected, all your actual data travels\ndirectly between them — encrypted, and never passing through our\nservers.",[15,1062,1063],{},"Think of it like FaceTime — Apple helps your devices find each other,\nbut your actual call goes directly between them.",[22,1065,1067],{"id":1066},"what-autobutler-stores","What AutoButler stores",[15,1069,1070],{},"When you plug a drive into AutoButler, it organizes your files into a\nsimple structure:",[80,1072,1073,1079,1085,1091],{},[33,1074,1075,1078],{},[40,1076,1077],{},"Photos & Videos"," — Synced from your phone or uploaded from your\ncomputer. Organized by date, easy to browse.",[33,1080,1081,1084],{},[40,1082,1083],{},"Documents"," — PDFs, spreadsheets, notes — anything you want to\nkeep safe on your own hardware.",[33,1086,1087,1090],{},[40,1088,1089],{},"Backups"," — Back up one drive to another with a single tap, so\nyou always have a second copy.",[33,1092,1093,1096],{},[40,1094,1095],{},"Books & Media"," — Read EPUBs, watch videos, and browse your\nfiles from any device on your network.",[15,1098,1099],{},"Everything is stored in plain folders on your drive. No proprietary\nformat, no lock-in. If you ever want to unplug and move to something\nelse, your files are just files.",{"title":361,"searchDepth":362,"depth":363,"links":1101},[1102,1103,1104,1105,1106,1107,1108],{"id":932,"depth":366,"text":933},{"id":936,"depth":366,"text":937},{"id":975,"depth":366,"text":976},{"id":979,"depth":366,"text":937},{"id":1025,"depth":366,"text":1026},{"id":1035,"depth":366,"text":937},{"id":1066,"depth":366,"text":1067},"How your files stay on your home network — no cloud required",{},{"title":1112,"order":1113},"How It Works",4,"\u002Fdocs\u002Fhow-it-works",{"title":918,"description":1109},"docs\u002Fhow-it-works","Eo6KSnwg8gwODKF4zDlsPRw8ZTSQoQXpFGk5f9BRddk",{"id":1119,"title":358,"body":1120,"description":2019,"extension":383,"meta":2020,"navigation":2021,"path":357,"seo":2022,"stem":2023,"__hash__":2024},"content\u002Fdocs\u002Fnerd-notes.md",{"type":8,"value":1121,"toc":2002},[1122,1125,1134,1136,1140,1247,1250,1252,1256,1260,1475,1486,1490,1493,1495,1499,1509,1513,1530,1605,1616,1620,1724,1726,1730,1736,1746,1764,1774,1784,1786,1790,1802,1857,1861,1906,1910,1965,1972,1974,1978,1998],[11,1123,358],{"id":1124},"nerd-notes",[15,1126,1127,1128,1133],{},"A technical mirror of the ",[346,1129,1132],{"href":1130,"rel":1131},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler",[421],"AutoButler README",".\nIf you want to understand what's running in your house, this is the page.",[19,1135],{},[22,1137,1139],{"id":1138},"stack","Stack",[1141,1142,1143,1156],"table",{},[1144,1145,1146],"thead",{},[1147,1148,1149,1153],"tr",{},[1150,1151,1152],"th",{},"Layer",[1150,1154,1155],{},"Technology",[1157,1158,1159,1173,1186,1199,1211,1223,1235],"tbody",{},[1147,1160,1161,1165],{},[1162,1163,1164],"td",{},"Backend",[1162,1166,1167,1168],{},"Go + ",[346,1169,1172],{"href":1170,"rel":1171},"https:\u002F\u002Fgithub.com\u002Fgin-gonic\u002Fgin",[421],"Gin",[1147,1174,1175,1178],{},[1162,1176,1177],{},"Frontend",[1162,1179,1180,1185],{},[346,1181,1184],{"href":1182,"rel":1183},"https:\u002F\u002Fflutter.dev",[421],"Flutter"," (web, iOS, Android)",[1147,1187,1188,1191],{},[1162,1189,1190],{},"Database",[1162,1192,1193,1194],{},"SQLite via ",[346,1195,1198],{"href":1196,"rel":1197},"https:\u002F\u002Fpkg.go.dev\u002Fmodernc.org\u002Fsqlite",[421],"modernc.org\u002Fsqlite",[1147,1200,1201,1204],{},[1162,1202,1203],{},"Migrations",[1162,1205,1206],{},[346,1207,1210],{"href":1208,"rel":1209},"https:\u002F\u002Fgithub.com\u002Fgolang-migrate\u002Fmigrate",[421],"golang-migrate",[1147,1212,1213,1216],{},[1162,1214,1215],{},"DB queries",[1162,1217,1218],{},[346,1219,1222],{"href":1220,"rel":1221},"https:\u002F\u002Fsqlc.dev",[421],"sqlc",[1147,1224,1225,1228],{},[1162,1226,1227],{},"API docs",[1162,1229,1230],{},[346,1231,1234],{"href":1232,"rel":1233},"https:\u002F\u002Fgithub.com\u002Fswaggo\u002Fswag",[421],"Swagger\u002Fswag",[1147,1236,1237,1240],{},[1162,1238,1239],{},"Observability",[1162,1241,1242],{},[346,1243,1246],{"href":1244,"rel":1245},"https:\u002F\u002Fopentelemetry.io",[421],"OpenTelemetry",[15,1248,1249],{},"The backend is a single Go binary that serves both the REST API and the Flutter web build.\nOn first boot it runs database migrations automatically.",[19,1251],{},[22,1253,1255],{"id":1254},"installation","Installation",[72,1257,1259],{"id":1258},"download-and-install-a-release","Download and install a release",[1261,1262,1266],"pre",{"className":1263,"code":1264,"language":1265,"meta":361,"style":361},"language-bash shiki shiki-themes catppuccin-mocha catppuccin-mocha catppuccin-latte","# Stop the running service if upgrading\nsudo systemctl stop autobutler\n\nOS=\"$(uname -s)\"\nARCH=\"$(uname -m)\"\ncase \"$ARCH\" in\n  aarch64) ARCH=\"arm64\";;\n  x86_64)  ARCH=\"x86_64\";;\nesac\n\ncurl --fail -L \\\n  \"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Freleases\u002Flatest\u002Fdownload\u002Fautobutler_${OS}_${ARCH}.tar.gz\" \\\n  | tar -xvz\n\nsudo .\u002Fautobutler install\n","bash",[43,1267,1268,1276,1292,1298,1326,1346,1363,1382,1400,1406,1411,1427,1447,1459,1464],{"__ignoreMap":361},[942,1269,1272],{"class":1270,"line":1271},"line",1,[942,1273,1275],{"class":1274},"s1xnj","# Stop the running service if upgrading\n",[942,1277,1278,1282,1286,1289],{"class":1270,"line":366},[942,1279,1281],{"class":1280},"sGV_l","sudo",[942,1283,1285],{"class":1284},"s9P1W"," systemctl",[942,1287,1288],{"class":1284}," stop",[942,1290,1291],{"class":1284}," autobutler\n",[942,1293,1294],{"class":1270,"line":370},[942,1295,1297],{"emptyLinePlaceholder":1296},true,"\n",[942,1299,1300,1304,1308,1311,1315,1318,1321,1323],{"class":1270,"line":1113},[942,1301,1303],{"class":1302},"siemi","OS",[942,1305,1307],{"class":1306},"s4drQ","=",[942,1309,1310],{"class":1284},"\"",[942,1312,1314],{"class":1313},"sWMKd","$(",[942,1316,1317],{"class":1280},"uname",[942,1319,1320],{"class":1284}," -s",[942,1322,539],{"class":1313},[942,1324,1325],{"class":1284},"\"\n",[942,1327,1328,1331,1333,1335,1337,1339,1342,1344],{"class":1270,"line":363},[942,1329,1330],{"class":1302},"ARCH",[942,1332,1307],{"class":1306},[942,1334,1310],{"class":1284},[942,1336,1314],{"class":1313},[942,1338,1317],{"class":1280},[942,1340,1341],{"class":1284}," -m",[942,1343,539],{"class":1313},[942,1345,1325],{"class":1284},[942,1347,1348,1352,1355,1358,1360],{"class":1270,"line":362},[942,1349,1351],{"class":1350},"sFo6-","case",[942,1353,1354],{"class":1284}," \"",[942,1356,1357],{"class":1302},"$ARCH",[942,1359,1310],{"class":1284},[942,1361,1362],{"class":1350}," in\n",[942,1364,1366,1369,1371,1374,1376,1379],{"class":1270,"line":1365},7,[942,1367,1368],{"class":1284},"  aarch64",[942,1370,539],{"class":1306},[942,1372,1373],{"class":1302}," ARCH",[942,1375,1307],{"class":1306},[942,1377,1378],{"class":1284},"\"arm64\"",[942,1380,1381],{"class":1313},";;\n",[942,1383,1385,1388,1390,1393,1395,1398],{"class":1270,"line":1384},8,[942,1386,1387],{"class":1284},"  x86_64",[942,1389,539],{"class":1306},[942,1391,1392],{"class":1302},"  ARCH",[942,1394,1307],{"class":1306},[942,1396,1397],{"class":1284},"\"x86_64\"",[942,1399,1381],{"class":1313},[942,1401,1403],{"class":1270,"line":1402},9,[942,1404,1405],{"class":1350},"esac\n",[942,1407,1409],{"class":1270,"line":1408},10,[942,1410,1297],{"emptyLinePlaceholder":1296},[942,1412,1414,1417,1420,1423],{"class":1270,"line":1413},11,[942,1415,1416],{"class":1280},"curl",[942,1418,1419],{"class":1284}," --fail",[942,1421,1422],{"class":1284}," -L",[942,1424,1426],{"class":1425},"sHteJ"," \\\n",[942,1428,1430,1433,1436,1439,1442,1445],{"class":1270,"line":1429},12,[942,1431,1432],{"class":1284},"  \"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Freleases\u002Flatest\u002Fdownload\u002Fautobutler_",[942,1434,1435],{"class":1302},"${OS}",[942,1437,1438],{"class":1284},"_",[942,1440,1441],{"class":1302},"${ARCH}",[942,1443,1444],{"class":1284},".tar.gz\"",[942,1446,1426],{"class":1425},[942,1448,1450,1453,1456],{"class":1270,"line":1449},13,[942,1451,1452],{"class":1306},"  |",[942,1454,1455],{"class":1280}," tar",[942,1457,1458],{"class":1284}," -xvz\n",[942,1460,1462],{"class":1270,"line":1461},14,[942,1463,1297],{"emptyLinePlaceholder":1296},[942,1465,1467,1469,1472],{"class":1270,"line":1466},15,[942,1468,1281],{"class":1280},[942,1470,1471],{"class":1284}," .\u002Fautobutler",[942,1473,1474],{"class":1284}," install\n",[15,1476,1477,1478,1481,1482,1485],{},"The ",[43,1479,1480],{},"install"," command registers AutoButler as a systemd service and starts it.\nOnce running, open ",[43,1483,1484],{},"http:\u002F\u002F\u003Cdevice-ip>:80"," in a browser.",[72,1487,1489],{"id":1488},"first-boot","First boot",[15,1491,1492],{},"On first boot, the web UI shows a setup screen. Create your owner account — you'll get a\nrecovery phrase shown exactly once. Write it down. It's the only way to reset your password.",[19,1494],{},[22,1496,1498],{"id":1497},"api","API",[15,1500,1501,1502,1505,1506,756],{},"The REST API lives under ",[43,1503,1504],{},"\u002Fapi\u002Fv0\u002F",". Swagger UI is at ",[43,1507,1508],{},"http:\u002F\u002F\u003Chost>\u002Fswagger",[72,1510,1512],{"id":1511},"authentication","Authentication",[15,1514,1515,1516,488,1519,1522,1523,1526,1527,756],{},"All endpoints require a session token except ",[43,1517,1518],{},"\u002Fapi\u002Fv0\u002Fauth\u002Fsetup",[43,1520,1521],{},"\u002Fapi\u002Fv0\u002Fauth\u002Flogin",",\n",[43,1524,1525],{},"\u002Fapi\u002Fv0\u002Fauth\u002Frecover",", and ",[43,1528,1529],{},"\u002Fapi\u002Fv0\u002Fauth\u002Fstatus",[1261,1531,1533],{"className":1263,"code":1532,"language":1265,"meta":361,"style":361},"# Login\ncurl -s -X POST http:\u002F\u002Flocalhost\u002Fapi\u002Fv0\u002Fauth\u002Flogin \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"username\":\"you\",\"password\":\"your-password\"}'\n# → {\"token\":\"\u003C64-char hex token>\"}\n\n# Use the token\ncurl http:\u002F\u002Flocalhost\u002Fapi\u002Fv0\u002Fhealth \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[43,1534,1535,1540,1557,1567,1575,1580,1584,1589,1598],{"__ignoreMap":361},[942,1536,1537],{"class":1270,"line":1271},[942,1538,1539],{"class":1274},"# Login\n",[942,1541,1542,1544,1546,1549,1552,1555],{"class":1270,"line":366},[942,1543,1416],{"class":1280},[942,1545,1320],{"class":1284},[942,1547,1548],{"class":1284}," -X",[942,1550,1551],{"class":1284}," POST",[942,1553,1554],{"class":1284}," http:\u002F\u002Flocalhost\u002Fapi\u002Fv0\u002Fauth\u002Flogin",[942,1556,1426],{"class":1425},[942,1558,1559,1562,1565],{"class":1270,"line":370},[942,1560,1561],{"class":1284},"  -H",[942,1563,1564],{"class":1284}," \"Content-Type: application\u002Fjson\"",[942,1566,1426],{"class":1425},[942,1568,1569,1572],{"class":1270,"line":1113},[942,1570,1571],{"class":1284},"  -d",[942,1573,1574],{"class":1284}," '{\"username\":\"you\",\"password\":\"your-password\"}'\n",[942,1576,1577],{"class":1270,"line":363},[942,1578,1579],{"class":1274},"# → {\"token\":\"\u003C64-char hex token>\"}\n",[942,1581,1582],{"class":1270,"line":362},[942,1583,1297],{"emptyLinePlaceholder":1296},[942,1585,1586],{"class":1270,"line":1365},[942,1587,1588],{"class":1274},"# Use the token\n",[942,1590,1591,1593,1596],{"class":1270,"line":1384},[942,1592,1416],{"class":1280},[942,1594,1595],{"class":1284}," http:\u002F\u002Flocalhost\u002Fapi\u002Fv0\u002Fhealth",[942,1597,1426],{"class":1425},[942,1599,1600,1602],{"class":1270,"line":1402},[942,1601,1561],{"class":1284},[942,1603,1604],{"class":1284}," \"Authorization: Bearer \u003Ctoken>\"\n",[15,1606,1607,1608,1611,1612,1615],{},"Tokens are valid for 30 days. Pass them as ",[43,1609,1610],{},"Authorization: Bearer \u003Ctoken>"," or as a\n",[43,1613,1614],{},"session"," cookie. The session cookie is also accepted (set automatically by the web UI).",[72,1617,1619],{"id":1618},"key-endpoints","Key endpoints",[1141,1621,1622,1635],{},[1144,1623,1624],{},[1147,1625,1626,1629,1632],{},[1150,1627,1628],{},"Method",[1150,1630,1631],{},"Path",[1150,1633,1634],{},"What it does",[1157,1636,1637,1650,1662,1675,1687,1700,1712],{},[1147,1638,1639,1642,1647],{},[1162,1640,1641],{},"GET",[1162,1643,1644],{},[43,1645,1646],{},"\u002Fapi\u002Fv0\u002Fhealth",[1162,1648,1649],{},"System health (CPU, memory, disk, temperature, S.M.A.R.T.)",[1147,1651,1652,1654,1659],{},[1162,1653,1641],{},[1162,1655,1656],{},[43,1657,1658],{},"\u002Fapi\u002Fv0\u002Fcirrus",[1162,1660,1661],{},"List files",[1147,1663,1664,1667,1672],{},[1162,1665,1666],{},"POST",[1162,1668,1669],{},[43,1670,1671],{},"\u002Fapi\u002Fv0\u002Fcirrus\u002Fupload\u002F{path}",[1162,1673,1674],{},"Upload a file",[1147,1676,1677,1679,1684],{},[1162,1678,1641],{},[1162,1680,1681],{},[43,1682,1683],{},"\u002Fapi\u002Fv0\u002Fstorage\u002Fdevices\u002Fstatus",[1162,1685,1686],{},"List storage devices",[1147,1688,1689,1692,1697],{},[1162,1690,1691],{},"PATCH",[1162,1693,1694],{},[43,1695,1696],{},"\u002Fapi\u002Fv0\u002Fstorage\u002Fdevices\u002F{devicePath}\u002Fname",[1162,1698,1699],{},"Rename a device",[1147,1701,1702,1704,1709],{},[1162,1703,1641],{},[1162,1705,1706],{},[43,1707,1708],{},"\u002Fapi\u002Fv0\u002Fversion",[1162,1710,1711],{},"Installed version",[1147,1713,1714,1716,1721],{},[1162,1715,1666],{},[1162,1717,1718],{},[43,1719,1720],{},"\u002Fapi\u002Fv0\u002Fversion\u002Flatest",[1162,1722,1723],{},"Update to latest release",[19,1725],{},[22,1727,1729],{"id":1728},"architecture-notes","Architecture notes",[15,1731,1732,1735],{},[40,1733,1734],{},"Single binary."," The Go backend embeds the Flutter web build at compile time and serves it\nalongside the API. No separate web server needed.",[15,1737,1738,1741,1742,1745],{},[40,1739,1740],{},"SQLite."," All state lives in a SQLite database at ",[43,1743,1744],{},"\u002Fvar\u002Flib\u002Fautobutler\u002Fdata\u002Fautobutler.db",".\nMigrations run on startup — safe to upgrade without manual intervention.",[15,1747,1748,1751,1752,1755,1756,1759,1760,1763],{},[40,1749,1750],{},"Device detection."," On Linux, AutoButler reads ",[43,1753,1754],{},"\u002Fproc\u002Fmounts"," to discover storage devices.\nUSB device detection uses the ",[43,1757,1758],{},"usbutil"," package. Mounting\u002Funmounting USB storage requires\nroot — run with ",[43,1761,1762],{},"AS_ROOT=1"," in development.",[15,1765,1766,1769,1770,1773],{},[40,1767,1768],{},"Auth."," Passwords are bcrypt-hashed (cost 12). Session tokens are 32 bytes of\n",[43,1771,1772],{},"crypto\u002Frand"," (256-bit entropy), stored as SHA-256 hashes at rest — a leaked database\nfile does not yield valid bearer credentials. The recovery phrase is a 6-word phrase\nfrom a 256-word wordlist (~48 bits — deliberate tradeoff for usability on a home device).",[15,1775,1776,1779,1780,1783],{},[40,1777,1778],{},"Updates."," The butler can update itself in-place via the ",[43,1781,1782],{},"\u002Fversion\u002Fupdate"," API. It downloads\nthe new binary as a tarball, extracts it, and atomically renames it over the running binary.\nThe process exits and systemd restarts it.",[19,1785],{},[22,1787,1789],{"id":1788},"development","Development",[15,1791,1792,1795,1796,1801],{},[40,1793,1794],{},"Prerequisites:"," Go, Flutter, Make, ",[346,1797,1800],{"href":1798,"rel":1799},"https:\u002F\u002Fgithub.com\u002Fair-verse\u002Fair",[421],"air",", sqlc, swag",[1261,1803,1805],{"className":1263,"code":1804,"language":1265,"meta":361,"style":361},"git clone https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler.git\ncd autobutler\nmake setup      # install dev tools\nmake generate   # sqlc + swag + flutter icons + sbom\nmake build      # build everything\n",[43,1806,1807,1818,1826,1837,1847],{"__ignoreMap":361},[942,1808,1809,1812,1815],{"class":1270,"line":1271},[942,1810,1811],{"class":1280},"git",[942,1813,1814],{"class":1284}," clone",[942,1816,1817],{"class":1284}," https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler.git\n",[942,1819,1820,1824],{"class":1270,"line":366},[942,1821,1823],{"class":1822},"skFXB","cd",[942,1825,1291],{"class":1284},[942,1827,1828,1831,1834],{"class":1270,"line":370},[942,1829,1830],{"class":1280},"make",[942,1832,1833],{"class":1284}," setup",[942,1835,1836],{"class":1274},"      # install dev tools\n",[942,1838,1839,1841,1844],{"class":1270,"line":1113},[942,1840,1830],{"class":1280},[942,1842,1843],{"class":1284}," generate",[942,1845,1846],{"class":1274},"   # sqlc + swag + flutter icons + sbom\n",[942,1848,1849,1851,1854],{"class":1270,"line":363},[942,1850,1830],{"class":1280},[942,1852,1853],{"class":1284}," build",[942,1855,1856],{"class":1274},"      # build everything\n",[72,1858,1860],{"id":1859},"run-locally","Run locally",[1261,1862,1864],{"className":1263,"code":1863,"language":1265,"meta":361,"style":361},"make watch\u002Fbackend          # backend with hot reload\nmake serve\u002Ffrontend         # Flutter web\nmake emulate\u002Fandroid        # Android emulator\nmake serve\u002Ffrontend\u002Fmobile  # Flutter mobile (after emulator is running)\n",[43,1865,1866,1876,1886,1896],{"__ignoreMap":361},[942,1867,1868,1870,1873],{"class":1270,"line":1271},[942,1869,1830],{"class":1280},[942,1871,1872],{"class":1284}," watch\u002Fbackend",[942,1874,1875],{"class":1274},"          # backend with hot reload\n",[942,1877,1878,1880,1883],{"class":1270,"line":366},[942,1879,1830],{"class":1280},[942,1881,1882],{"class":1284}," serve\u002Ffrontend",[942,1884,1885],{"class":1274},"         # Flutter web\n",[942,1887,1888,1890,1893],{"class":1270,"line":370},[942,1889,1830],{"class":1280},[942,1891,1892],{"class":1284}," emulate\u002Fandroid",[942,1894,1895],{"class":1274},"        # Android emulator\n",[942,1897,1898,1900,1903],{"class":1270,"line":1113},[942,1899,1830],{"class":1280},[942,1901,1902],{"class":1284}," serve\u002Ffrontend\u002Fmobile",[942,1904,1905],{"class":1274},"  # Flutter mobile (after emulator is running)\n",[72,1907,1909],{"id":1908},"useful-targets","Useful targets",[1261,1911,1913],{"className":1263,"code":1912,"language":1265,"meta":361,"style":361},"make check          # lint (Go + Flutter)\nmake format         # auto-format\nmake test           # run all tests\nmake coverage       # test coverage report\nmake help           # list all targets\n",[43,1914,1915,1925,1935,1945,1955],{"__ignoreMap":361},[942,1916,1917,1919,1922],{"class":1270,"line":1271},[942,1918,1830],{"class":1280},[942,1920,1921],{"class":1284}," check",[942,1923,1924],{"class":1274},"          # lint (Go + Flutter)\n",[942,1926,1927,1929,1932],{"class":1270,"line":366},[942,1928,1830],{"class":1280},[942,1930,1931],{"class":1284}," format",[942,1933,1934],{"class":1274},"         # auto-format\n",[942,1936,1937,1939,1942],{"class":1270,"line":370},[942,1938,1830],{"class":1280},[942,1940,1941],{"class":1284}," test",[942,1943,1944],{"class":1274},"           # run all tests\n",[942,1946,1947,1949,1952],{"class":1270,"line":1113},[942,1948,1830],{"class":1280},[942,1950,1951],{"class":1284}," coverage",[942,1953,1954],{"class":1274},"       # test coverage report\n",[942,1956,1957,1959,1962],{"class":1270,"line":363},[942,1958,1830],{"class":1280},[942,1960,1961],{"class":1284}," help",[942,1963,1964],{"class":1274},"           # list all targets\n",[15,1966,1967,1968,1971],{},"Swagger UI is at ",[43,1969,1970],{},"http:\u002F\u002Flocalhost:8080\u002Fswagger"," when the backend is running locally.",[19,1973],{},[22,1975,1977],{"id":1976},"source","Source",[80,1979,1980,1987,1990],{},[33,1981,1982,1983],{},"GitHub: ",[346,1984,1986],{"href":1130,"rel":1985},[421],"autobutler-org\u002Fautobutler",[33,1988,1989],{},"License: MIT",[33,1991,1992,1993],{},"Contributing:\n",[346,1994,1997],{"href":1995,"rel":1996},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Fblob\u002Fmain\u002FCONTRIBUTING.md",[421],"CONTRIBUTING.md",[1999,2000,2001],"style",{},"html pre.shiki code .s1xnj, html code.shiki .s1xnj{--shiki-default:#9399B2;--shiki-default-font-style:italic;--shiki-dark:#9399B2;--shiki-dark-font-style:italic;--shiki-light:#7C7F93;--shiki-light-font-style:italic}html pre.shiki code .sGV_l, html code.shiki .sGV_l{--shiki-default:#89B4FA;--shiki-default-font-style:italic;--shiki-dark:#89B4FA;--shiki-dark-font-style:italic;--shiki-light:#1E66F5;--shiki-light-font-style:italic}html pre.shiki code .s9P1W, html code.shiki .s9P1W{--shiki-default:#A6E3A1;--shiki-dark:#A6E3A1;--shiki-light:#40A02B}html pre.shiki code .siemi, html code.shiki .siemi{--shiki-default:#CDD6F4;--shiki-dark:#CDD6F4;--shiki-light:#4C4F69}html pre.shiki code .s4drQ, html code.shiki .s4drQ{--shiki-default:#94E2D5;--shiki-dark:#94E2D5;--shiki-light:#179299}html pre.shiki code .sWMKd, html code.shiki .sWMKd{--shiki-default:#9399B2;--shiki-dark:#9399B2;--shiki-light:#7C7F93}html pre.shiki code .sFo6-, html code.shiki .sFo6-{--shiki-default:#CBA6F7;--shiki-dark:#CBA6F7;--shiki-light:#8839EF}html pre.shiki code .sHteJ, html code.shiki .sHteJ{--shiki-default:#F5C2E7;--shiki-dark:#F5C2E7;--shiki-light:#EA76CB}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 .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 pre.shiki code .skFXB, html code.shiki .skFXB{--shiki-default:#F38BA8;--shiki-default-font-style:italic;--shiki-dark:#F38BA8;--shiki-dark-font-style:italic;--shiki-light:#D20F39;--shiki-light-font-style:italic}",{"title":361,"searchDepth":362,"depth":363,"links":2003},[2004,2005,2009,2013,2014,2018],{"id":1138,"depth":366,"text":1139},{"id":1254,"depth":366,"text":1255,"children":2006},[2007,2008],{"id":1258,"depth":370,"text":1259},{"id":1488,"depth":370,"text":1489},{"id":1497,"depth":366,"text":1498,"children":2010},[2011,2012],{"id":1511,"depth":370,"text":1512},{"id":1618,"depth":370,"text":1619},{"id":1728,"depth":366,"text":1729},{"id":1788,"depth":366,"text":1789,"children":2015},[2016,2017],{"id":1859,"depth":370,"text":1860},{"id":1908,"depth":370,"text":1909},{"id":1976,"depth":366,"text":1977},"Technical overview of AutoButler — stack, architecture, installation, and development.",{},{"title":358,"order":363},{"title":358,"description":2019},"docs\u002Fnerd-notes","B4HYW3b0Z5DbbpVQIe-fRmASGWyMvPO4W5OKilo4HLM",{"id":2026,"title":2027,"body":2028,"description":2385,"extension":383,"meta":2386,"navigation":2387,"path":2389,"seo":2390,"stem":2391,"__hash__":2392},"content\u002Fdocs\u002Fsecurity-guide.md","Things You Should Know (Security Guide)",{"type":8,"value":2029,"toc":2374},[2030,2034,2037,2040,2042,2046,2049,2054,2065,2076,2082,2084,2088,2091,2096,2114,2117,2119,2123,2126,2129,2149,2152,2158,2160,2164,2167,2172,2183,2188,2196,2198,2202,2205,2210,2221,2226,2237,2239,2243,2246,2249,2269,2272,2274,2278,2281,2313,2316,2318,2322,2325,2345,2348,2350,2354,2371],[11,2031,2033],{"id":2032},"things-you-should-know","Things You Should Know",[15,2035,2036],{},"AutoButler is designed so your files stay private by default. But \"private by design\" doesn't mean \"impossible to lose.\" This page covers a handful of things every butler owner should do.",[15,2038,2039],{},"None of this is scary. You've probably done most of it already for other important things in your life.",[19,2041],{},[22,2043,2045],{"id":2044},"your-master-password","Your Master Password",[15,2047,2048],{},"The vault — where AutoButler stores sensitive things like credentials and recovery phrases — is encrypted with your master password. That encryption is done with Argon2id, a modern algorithm designed to be slow on purpose. Even if someone stole your butler's hard drive, cracking the vault would take them years of compute time if your password is reasonable.",[15,2050,2051],{},[40,2052,2053],{},"What makes a reasonable password:",[80,2055,2056,2059,2062],{},[33,2057,2058],{},"At least 12 characters",[33,2060,2061],{},"Not a dictionary word on its own",[33,2063,2064],{},"Not something you've used elsewhere",[15,2066,2067,2068,2071,2072,2075],{},"A passphrase like ",[43,2069,2070],{},"correct-horse-battery-staple"," is better than ",[43,2073,2074],{},"P@ssw0rd1"," — longer beats cleverer.",[15,2077,2078,2081],{},[40,2079,2080],{},"There is no \"forgot password\" button."," This is intentional. Your master password is never sent anywhere, never stored, and never recoverable by anyone — including us. If you forget it, the vault is gone. Write it down somewhere physical and store it safely.",[19,2083],{},[22,2085,2087],{"id":2086},"your-recovery-phrase","Your Recovery Phrase",[15,2089,2090],{},"When you first set up AutoButler, it gave you a 6-word recovery phrase. That phrase is your emergency key — it can unlock the vault if you forget your master password.",[15,2092,2093],{},[40,2094,2095],{},"What to do with it:",[80,2097,2098,2101,2104,2111],{},[33,2099,2100],{},"Write it on paper. Not a sticky note.",[33,2102,2103],{},"Store it somewhere you'd store an important document — a fireproof box, a filing cabinet with a lock, or a safety deposit box.",[33,2105,2106,2107,2110],{},"Do ",[40,2108,2109],{},"not"," store it in a Google Doc, Dropbox, or iCloud note. That defeats the purpose.",[33,2112,2113],{},"Make sure your spouse or a trusted person knows where it is. If something happens to you, they'll need it.",[15,2115,2116],{},"You only see this phrase once. If you've lost it and still have your password, you can generate a new one in Settings → Security.",[19,2118],{},[22,2120,2122],{"id":2121},"the-3-2-1-backup-rule","The 3-2-1 Backup Rule",[15,2124,2125],{},"AutoButler stores your files. But AutoButler is a physical device that can fail, flood, or burn.",[15,2127,2128],{},"The 3-2-1 rule is simple:",[80,2130,2131,2137,2143],{},[33,2132,2133,2136],{},[40,2134,2135],{},"3"," copies of your data",[33,2138,2139,2142],{},[40,2140,2141],{},"2"," different storage types (e.g., the butler's internal drive + an external USB drive)",[33,2144,2145,2148],{},[40,2146,2147],{},"1"," offsite copy (e.g., a hard drive at a relative's house)",[15,2150,2151],{},"AutoButler helps with the first two: it can mirror your files to an attached external drive automatically. The third copy is on you. A USB drive at your parents' house that you swap out once a month is enough.",[15,2153,2154,2155],{},"There is no backup strategy that can save you from ",[744,2156,2157],{},"no backup at all.",[19,2159],{},[22,2161,2163],{"id":2162},"physical-security","Physical Security",[15,2165,2166],{},"Your butler is a small computer that holds your files. Treat it accordingly.",[15,2168,2169],{},[40,2170,2171],{},"Where to put it:",[80,2173,2174,2177,2180],{},[33,2175,2176],{},"Inside your home, not in an unheated garage or shed where it can overheat or freeze",[33,2178,2179],{},"Off the floor — water and flooding are real risks",[33,2181,2182],{},"Out of sight if possible — you don't need to advertise that there's a storage device on your network",[15,2184,2185],{},[40,2186,2187],{},"Your backup drives:",[80,2189,2190,2193],{},[33,2191,2192],{},"Don't keep your only backup drive right next to the butler. If there's a fire or a break-in, you lose both.",[33,2194,2195],{},"A fireproof bag or small safe is a worthwhile investment for a drive holding years of family photos.",[19,2197],{},[22,2199,2201],{"id":2200},"network-security","Network Security",[15,2203,2204],{},"AutoButler runs on your local network. It does not need the public internet to function, and by default it's not reachable from outside your home.",[15,2206,2207],{},[40,2208,2209],{},"What this means in practice:",[80,2211,2212,2215,2218],{},[33,2213,2214],{},"Someone sitting at a coffee shop cannot reach your butler.",[33,2216,2217],{},"Your ISP cannot see your files (they flow entirely on your local network).",[33,2219,2220],{},"The butler doesn't \"call home\" to any AutoButler servers. Our code is public if you want to verify.",[15,2222,2223],{},[40,2224,2225],{},"What you need to do:",[80,2227,2228,2231,2234],{},[33,2229,2230],{},"Password-protect your WiFi with WPA2 or WPA3. If it's still open, fix that first.",[33,2232,2233],{},"Don't give your WiFi password to people you don't trust.",[33,2235,2236],{},"If you enable remote access via Tailscale, treat your Tailscale account as carefully as your AutoButler password — it's the key to your network.",[19,2238],{},[22,2240,2242],{"id":2241},"estate-planning","Estate Planning",[15,2244,2245],{},"If something happens to you, can your family access the files you've stored?",[15,2247,2248],{},"Consider:",[30,2250,2251,2257,2263],{},[33,2252,2253,2256],{},[40,2254,2255],{},"Writing down"," your AutoButler login and master password (or recovery phrase) and storing them with your important documents — will, insurance policies, that kind of thing.",[33,2258,2259,2262],{},[40,2260,2261],{},"Telling a trusted person"," where the butler is, what it does, and where the login info is stored.",[33,2264,2265,2268],{},[40,2266,2267],{},"AutoButler's trusted contact feature"," (coming soon) will let you designate someone who can request access after a configurable waiting period.",[15,2270,2271],{},"This isn't morbid — it's the same reason you keep a spare key with a neighbor.",[19,2273],{},[22,2275,2277],{"id":2276},"if-you-think-your-device-was-compromised","If You Think Your Device Was Compromised",[15,2279,2280],{},"If you suspect someone unauthorized has accessed your butler:",[30,2282,2283,2289,2295,2301,2307],{},[33,2284,2285,2288],{},[40,2286,2287],{},"Change your password immediately."," Go to Settings → Security → Change Password.",[33,2290,2291,2294],{},[40,2292,2293],{},"Review active sessions."," Settings → Security → Sessions shows every device currently logged in. Revoke anything you don't recognize.",[33,2296,2297,2300],{},[40,2298,2299],{},"Rotate your API tokens"," if you use them.",[33,2302,2303,2306],{},[40,2304,2305],{},"Change your WiFi password"," if you suspect your network was the entry point.",[33,2308,2309,2312],{},[40,2310,2311],{},"Review your files"," for anything unexpected — deletions, new folders, modified timestamps.",[15,2314,2315],{},"If you use Tailscale for remote access, also rotate your Tailscale auth keys and remove any unrecognized nodes from your tailnet.",[19,2317],{},[22,2319,2321],{"id":2320},"what-autobutler-does-not-do","What AutoButler Does Not Do",[15,2323,2324],{},"To be direct about the limits:",[80,2326,2327,2333,2339],{},[33,2328,2329,2332],{},[40,2330,2331],{},"It doesn't scan for viruses or malware"," in your uploaded files. It stores what you give it.",[33,2334,2335,2338],{},[40,2336,2337],{},"It doesn't protect against physical theft"," of the device — if someone takes the hardware, encryption protects the vault, but your files are readable unless you've enabled per-file encryption (a future feature).",[33,2340,2341,2344],{},[40,2342,2343],{},"It doesn't protect you if your WiFi password is compromised."," Someone on your network can reach the butler. The password prompt protects specific sensitive areas, but not file browsing.",[15,2346,2347],{},"Knowing the limits helps you make good decisions about what you store and how.",[19,2349],{},[22,2351,2353],{"id":2352},"the-short-version","The Short Version",[30,2355,2356,2359,2362,2365,2368],{},[33,2357,2358],{},"Pick a strong master password. Write it down. Store it safely.",[33,2360,2361],{},"Keep your recovery phrase somewhere physical and fireproof.",[33,2363,2364],{},"Set up an external backup drive. Swap it out periodically.",[33,2366,2367],{},"Use WPA2\u002FWPA3 on your WiFi.",[33,2369,2370],{},"Tell someone you trust how to access things if you can't.",[15,2372,2373],{},"That's it. AutoButler handles the rest.",{"title":361,"searchDepth":362,"depth":363,"links":2375},[2376,2377,2378,2379,2380,2381,2382,2383,2384],{"id":2044,"depth":366,"text":2045},{"id":2086,"depth":366,"text":2087},{"id":2121,"depth":366,"text":2122},{"id":2162,"depth":366,"text":2163},{"id":2200,"depth":366,"text":2201},{"id":2241,"depth":366,"text":2242},{"id":2276,"depth":366,"text":2277},{"id":2320,"depth":366,"text":2321},{"id":2352,"depth":366,"text":2353},"Practical security guidance for AutoButler owners — written in plain English, not jargon.",{},{"title":2388,"order":362},"Security Guide","\u002Fdocs\u002Fsecurity-guide",{"title":2027,"description":2385},"docs\u002Fsecurity-guide","zGWxc4CMKxhapezEU02juNXKEfLwMXJtbf1p5m3ecIc",{"id":2394,"title":2395,"body":2396,"description":2475,"extension":383,"meta":2476,"navigation":2477,"path":2478,"seo":2479,"stem":2480,"__hash__":2481},"content\u002Fdocs\u002Fwelcome.md","Welcome",{"type":8,"value":2397,"toc":2468},[2398,2402,2406,2409,2413,2420,2427,2431,2440,2442,2448,2452],[11,2399,2401],{"id":2400},"welcome-to-autobutler","Welcome to AutoButler",[22,2403,2405],{"id":2404},"what-is-autobutler","What is AutoButler?",[15,2407,2408],{},"AutoButler is many things - the simplest way to explain it is like a Google Drive or iCloud service, but it lives\nentirely inside your house. No big tech, no data outside of your home, just your files on your stuff in your house.",[22,2410,2412],{"id":2411},"how-does-autobutler-work-securely","How does AutoButler work securely?",[15,2414,2415,2416,2419],{},"You know how you can't use your home printer when you leave your WiFi network? Autobutler also works entirely\nlocally, meaning that public internet can't really access the Butler. (We are working on secure ways to access the\ndevice from outside your home - for the nerds, this would be a reverse VPN going ",[744,2417,2418],{},"into"," your home that only trusted\ndevices have installed) - but the short version is that the only traffic that can access your files has to come from\non your WiFi network. The technologies that your router uses to protect your devices work so well, most folks don't\nknow they even exist - which is the kind of security we kind of like using. Just make sure your WiFi is password\nprotected.",[15,2421,2422,2423,756],{},"When you access the butler, all you're doing is asking your router to find the autobutler on your local network.\nThe router does the hard work of figuring out which device is which - think of the\nrouter like a post office, remembering which zip code is where. The only connection the butler makes with the outside\ninternet is the Update feature. Don't believe us? Our code is hosted online for free at\n",[346,2424,2426],{"href":1130,"rel":2425},[421],"our Github",[22,2428,2430],{"id":2429},"how-can-we-trust-you-guys","How can we trust you guys?",[15,2432,2433,2434,2439],{},"Brandon here. First and foremost - this is a product for my parents. We don't take any money from venture\ncapitalists, we don't have any subscriptions (so we can't change pricing), and the way our stuff works is public on\nthe internet. We're active on our Reddit page at ",[346,2435,2438],{"href":2436,"rel":2437},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fautobutler\u002F",[421],"r\u002Fautobutler"," if you want to\ntalk to us or the community about concerns. The only price catch is if the hardware breaks, but we designed this so\nthat if you ever want to get a new device, your data is all backed up on your hard drives, so it should be a painless\n1:1 swap.",[22,2441,6],{"id":13},[15,2443,2444,2445,756],{},"Ready to dive in? Check out the ",[346,2446,2447],{"href":386},"Getting Started Guide",[22,2449,2451],{"id":2450},"need-help","Need Help?",[80,2453,2454,2461],{},[33,2455,2456,2460],{},[40,2457,2458],{},[346,2459,6],{"href":386}," - Step-by-step tutorials",[33,2462,2463,2467],{},[40,2464,2465],{},[346,2466,349],{"href":348}," - Troubleshooting and community resources",{"title":361,"searchDepth":362,"depth":363,"links":2469},[2470,2471,2472,2473,2474],{"id":2404,"depth":366,"text":2405},{"id":2411,"depth":366,"text":2412},{"id":2429,"depth":366,"text":2430},{"id":13,"depth":366,"text":6},{"id":2450,"depth":366,"text":2451},"Welcome to AutoButler - your intelligent automation platform",{},{"title":2395,"order":1271},"\u002Fdocs\u002Fwelcome",{"title":2395,"description":2475},"docs\u002Fwelcome","Z2Rtyk_zh-wEgpzkkLmmr0cxMJ-D1eDPMNaPpehvzCk",{"id":2026,"title":2027,"body":2483,"description":2385,"extension":383,"meta":2734,"navigation":2735,"path":2389,"seo":2736,"stem":2391,"__hash__":2392},{"type":8,"value":2484,"toc":2723},[2485,2487,2489,2491,2493,2495,2497,2501,2509,2515,2519,2521,2523,2525,2529,2541,2543,2545,2547,2549,2551,2565,2567,2571,2573,2575,2577,2581,2589,2593,2599,2601,2603,2605,2609,2617,2621,2629,2631,2633,2635,2637,2651,2653,2655,2657,2659,2681,2683,2685,2687,2689,2703,2705,2707,2709,2721],[11,2486,2033],{"id":2032},[15,2488,2036],{},[15,2490,2039],{},[19,2492],{},[22,2494,2045],{"id":2044},[15,2496,2048],{},[15,2498,2499],{},[40,2500,2053],{},[80,2502,2503,2505,2507],{},[33,2504,2058],{},[33,2506,2061],{},[33,2508,2064],{},[15,2510,2067,2511,2071,2513,2075],{},[43,2512,2070],{},[43,2514,2074],{},[15,2516,2517,2081],{},[40,2518,2080],{},[19,2520],{},[22,2522,2087],{"id":2086},[15,2524,2090],{},[15,2526,2527],{},[40,2528,2095],{},[80,2530,2531,2533,2535,2539],{},[33,2532,2100],{},[33,2534,2103],{},[33,2536,2106,2537,2110],{},[40,2538,2109],{},[33,2540,2113],{},[15,2542,2116],{},[19,2544],{},[22,2546,2122],{"id":2121},[15,2548,2125],{},[15,2550,2128],{},[80,2552,2553,2557,2561],{},[33,2554,2555,2136],{},[40,2556,2135],{},[33,2558,2559,2142],{},[40,2560,2141],{},[33,2562,2563,2148],{},[40,2564,2147],{},[15,2566,2151],{},[15,2568,2154,2569],{},[744,2570,2157],{},[19,2572],{},[22,2574,2163],{"id":2162},[15,2576,2166],{},[15,2578,2579],{},[40,2580,2171],{},[80,2582,2583,2585,2587],{},[33,2584,2176],{},[33,2586,2179],{},[33,2588,2182],{},[15,2590,2591],{},[40,2592,2187],{},[80,2594,2595,2597],{},[33,2596,2192],{},[33,2598,2195],{},[19,2600],{},[22,2602,2201],{"id":2200},[15,2604,2204],{},[15,2606,2607],{},[40,2608,2209],{},[80,2610,2611,2613,2615],{},[33,2612,2214],{},[33,2614,2217],{},[33,2616,2220],{},[15,2618,2619],{},[40,2620,2225],{},[80,2622,2623,2625,2627],{},[33,2624,2230],{},[33,2626,2233],{},[33,2628,2236],{},[19,2630],{},[22,2632,2242],{"id":2241},[15,2634,2245],{},[15,2636,2248],{},[30,2638,2639,2643,2647],{},[33,2640,2641,2256],{},[40,2642,2255],{},[33,2644,2645,2262],{},[40,2646,2261],{},[33,2648,2649,2268],{},[40,2650,2267],{},[15,2652,2271],{},[19,2654],{},[22,2656,2277],{"id":2276},[15,2658,2280],{},[30,2660,2661,2665,2669,2673,2677],{},[33,2662,2663,2288],{},[40,2664,2287],{},[33,2666,2667,2294],{},[40,2668,2293],{},[33,2670,2671,2300],{},[40,2672,2299],{},[33,2674,2675,2306],{},[40,2676,2305],{},[33,2678,2679,2312],{},[40,2680,2311],{},[15,2682,2315],{},[19,2684],{},[22,2686,2321],{"id":2320},[15,2688,2324],{},[80,2690,2691,2695,2699],{},[33,2692,2693,2332],{},[40,2694,2331],{},[33,2696,2697,2338],{},[40,2698,2337],{},[33,2700,2701,2344],{},[40,2702,2343],{},[15,2704,2347],{},[19,2706],{},[22,2708,2353],{"id":2352},[30,2710,2711,2713,2715,2717,2719],{},[33,2712,2358],{},[33,2714,2361],{},[33,2716,2364],{},[33,2718,2367],{},[33,2720,2370],{},[15,2722,2373],{},{"title":361,"searchDepth":362,"depth":363,"links":2724},[2725,2726,2727,2728,2729,2730,2731,2732,2733],{"id":2044,"depth":366,"text":2045},{"id":2086,"depth":366,"text":2087},{"id":2121,"depth":366,"text":2122},{"id":2162,"depth":366,"text":2163},{"id":2200,"depth":366,"text":2201},{"id":2241,"depth":366,"text":2242},{"id":2276,"depth":366,"text":2277},{"id":2320,"depth":366,"text":2321},{"id":2352,"depth":366,"text":2353},{},{"title":2388,"order":362},{"title":2027,"description":2385},1787743740864]