[{"data":1,"prerenderedAt":2024},["ShallowReactive",2],{"\u002Fdocs\u002Fhelp":3,"doc-\u002Fdocs\u002Fhelp":1933},[4,401,786,928,1838],{"id":5,"title":6,"body":7,"description":393,"extension":394,"meta":395,"navigation":396,"path":397,"seo":398,"stem":399,"__hash__":400},"content\u002Fdocs\u002Fgetting-started.md","Getting Started",{"type":8,"value":9,"toc":373},"minimark",[10,14,18,21,26,29,50,59,62,64,68,75,78,83,86,113,117,123,126,146,150,157,159,163,166,183,186,188,192,205,207,211,214,234,242,244,248,251,269,271,275,278,280,284,287,307,310,312,316,319,333,335,339,346,348,352],[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],{},[71,72],"img",{"alt":73,"src":74},"Cirrus Files","\u002Fassets\u002Fimages\u002Ffiles.webp",[15,76,77],{},"Cirrus is the file browser. Think of it like a Google Drive or iCloud interface, except everything lives on your hardware at home.",[79,80,82],"h3",{"id":81},"browsing-your-files","Browsing your files",[15,84,85],{},"When you open Cirrus you'll see your files and folders listed. You can:",[87,88,89,95,101,107],"ul",{},[33,90,91,94],{},[40,92,93],{},"Click a folder"," to open it",[33,96,97,100],{},[40,98,99],{},"Click a file"," to download or preview it (images and common file types open in a viewer)",[33,102,103,106],{},[40,104,105],{},"Use the breadcrumb bar"," at the top to navigate back up the folder tree",[33,108,109,112],{},[40,110,111],{},"Click the home icon"," in the breadcrumb to jump back to the root",[79,114,116],{"id":115},"changing-the-view","Changing the view",[15,118,119],{},[71,120],{"alt":121,"src":122},"View Selection","\u002Fassets\u002Fimages\u002Fview-buttons.webp",[15,124,125],{},"Cirrus has three layouts — pick whichever works best for what you're doing:",[87,127,128,134,140],{},[33,129,130,133],{},[40,131,132],{},"List"," — a compact row-by-row view, good for lots of files",[33,135,136,139],{},[40,137,138],{},"Grid"," — larger thumbnails, good for photos",[33,141,142,145],{},[40,143,144],{},"Unified \u002F Per-device"," — toggle between seeing all your storage devices as one combined view, or seeing each device separately",[79,147,149],{"id":148},"searching-for-a-file","Searching for a file",[15,151,152,153,156],{},"Click the ",[40,154,155],{},"search icon"," in the top bar and type a filename. Cirrus will search across all your connected storage.",[19,158],{},[22,160,162],{"id":161},"uploading-files","Uploading Files",[15,164,165],{},"To add files to your AutoButler:",[30,167,168,171,177,180],{},[33,169,170],{},"Navigate to the folder you want to upload into",[33,172,152,173,176],{},[40,174,175],{},"Upload"," button in the top bar",[33,178,179],{},"Choose your files from your device",[33,181,182],{},"Wait for the upload to complete — a progress indicator will show you how it's going",[15,184,185],{},"You can upload multiple files at once. Large files may take a moment depending on your home network speed.",[19,187],{},[22,189,191],{"id":190},"creating-folders","Creating Folders",[30,193,194,197,202],{},[33,195,196],{},"Navigate to where you want the new folder",[33,198,152,199,176],{},[40,200,201],{},"New",[33,203,204],{},"Type a name and confirm",[19,206],{},[22,208,210],{"id":209},"moving-and-renaming-files","Moving and Renaming Files",[15,212,213],{},"Right-click (or long-press on mobile) any file or folder to open the action menu. From there you can:",[87,215,216,222,228],{},[33,217,218,221],{},[40,219,220],{},"Rename"," — change the name",[33,223,224,227],{},[40,225,226],{},"Move"," — move it to a different folder or storage device",[33,229,230,233],{},[40,231,232],{},"Delete"," — remove it permanently",[51,235,236],{},[15,237,238,241],{},[40,239,240],{},"Note:"," Deleting files is permanent. There is no recycle bin.",[19,243],{},[22,245,247],{"id":246},"storage-devices","Storage Devices",[15,249,250],{},"AutoButler can manage multiple storage devices (hard drives, USB drives) connected to your butler device. If you have more than one:",[87,252,253,260,266],{},[33,254,255,256,259],{},"Use the ",[40,257,258],{},"Unified view"," to see everything in one place",[33,261,255,262,265],{},[40,263,264],{},"Per-device view"," to see what's on each drive separately",[33,267,268],{},"When uploading, you may be prompted to choose which device to upload to",[19,270],{},[22,272,274],{"id":273},"photos","Photos",[15,276,277],{},"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,279],{},[22,281,283],{"id":282},"health","Health",[15,285,286],{},"The Health page shows you how your AutoButler is doing:",[87,288,289,295,301],{},[33,290,291,294],{},[40,292,293],{},"Disk usage"," — how much storage space is used vs. available",[33,296,297,300],{},[40,298,299],{},"Temperature"," — the device's current temperature (important for small devices like a Raspberry Pi)",[33,302,303,306],{},[40,304,305],{},"Uptime"," — how long the device has been running",[15,308,309],{},"If anything looks off (disk nearly full, temperature very high), this is where you'll see it first.",[19,311],{},[22,313,315],{"id":314},"settings","Settings",[15,317,318],{},"The Settings page lets you:",[87,320,321,327],{},[33,322,323,326],{},[40,324,325],{},"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,328,329,332],{},[40,330,331],{},"Export performance metrics"," — saves recent health data to a file you can share if you're troubleshooting with the team",[19,334],{},[22,336,338],{"id":337},"logging-out","Logging Out",[15,340,341,342,345],{},"Click your username or the settings icon and choose ",[40,343,344],{},"Log out"," when you're done. This is good practice on shared devices.",[19,347],{},[22,349,351],{"id":350},"next-steps","Next Steps",[87,353,354,364],{},[33,355,356,363],{},[40,357,358],{},[359,360,362],"a",{"href":361},"\u002Fdocs\u002Fhelp","Help & Support"," — troubleshooting and how to get in touch",[33,365,366,372],{},[40,367,368],{},[359,369,371],{"href":370},"\u002Fdocs\u002Fnerd-notes","Nerd Notes"," — technical details for self-hosters and tinkerers",{"title":374,"searchDepth":375,"depth":375,"links":376},"",2,[377,378,384,385,386,387,388,389,390,391,392],{"id":24,"depth":375,"text":25},{"id":66,"depth":375,"text":67,"children":379},[380,382,383],{"id":81,"depth":381,"text":82},3,{"id":115,"depth":381,"text":116},{"id":148,"depth":381,"text":149},{"id":161,"depth":375,"text":162},{"id":190,"depth":375,"text":191},{"id":209,"depth":375,"text":210},{"id":246,"depth":375,"text":247},{"id":273,"depth":375,"text":274},{"id":282,"depth":375,"text":283},{"id":314,"depth":375,"text":315},{"id":337,"depth":375,"text":338},{"id":350,"depth":375,"text":351},"Get up and running with AutoButler — adding files, managing storage, and finding your way around","md",{},{"title":6,"order":375},"\u002Fdocs\u002Fgetting-started",{"title":6,"description":393},"docs\u002Fgetting-started","HWBXZPJnLSW8h1Pq07RW3LYCzapZtbfRsb4fMoOFkTY",{"id":402,"title":403,"body":404,"description":777,"extension":394,"meta":778,"navigation":779,"path":782,"seo":783,"stem":784,"__hash__":785},"content\u002Fdocs\u002Fgoogle-takeout.md","Migrating from Google — Google Takeout Guide",{"type":8,"value":405,"toc":768},[406,409,416,418,422,485,488,504,506,510,513,524,526,530,533,562,569,571,575,578,602,634,637,639,643,650,667,669,673,679,685,691,711,713,717,720,747,750,752],[11,407,403],{"id":408},"migrating-from-google-google-takeout-guide",[15,410,411,412,415],{},"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,413,414],{},"on your own hardware, on your own home network"," — not on anyone else's server.",[19,417],{},[22,419,421],{"id":420},"step-1-request-your-google-takeout-export","Step 1: Request your Google Takeout export",[30,423,424,435,455,461,467,480],{},[33,425,38,426,434],{},[40,427,428],{},[359,429,433],{"href":430,"rel":431},"https:\u002F\u002Ftakeout.google.com",[432],"nofollow","takeout.google.com"," (sign in if prompted)",[33,436,437,438],{},"You'll see a list of Google products. Deselect everything, then check only the ones you want:\n",[87,439,440,446,452],{},[33,441,442,445],{},[40,443,444],{},"Google Photos"," — your photos and videos",[33,447,448,451],{},[40,449,450],{},"Google Drive"," — documents, spreadsheets, and files",[33,453,454],{},"(You can add others later — start small for your first export)",[33,456,457,458],{},"Click ",[40,459,460],{},"Next step",[33,462,463,464],{},"Under \"Delivery method,\" choose ",[40,465,466],{},"Send download link via email",[33,468,469,470,475,476,479],{},"Set file type to ",[40,471,472],{},[43,473,474],{},".zip"," and choose a size — ",[40,477,478],{},"2 GB"," works well (larger sizes can be harder to upload)",[33,481,457,482],{},[40,483,484],{},"Create export",[15,486,487],{},"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,489,490],{},[15,491,492,495,496,499,500,503],{},[40,493,494],{},"Heads up:"," Large Google Photos libraries often split into multiple zip files (e.g. ",[43,497,498],{},"takeout-20240101-001.zip",", ",[43,501,502],{},"takeout-20240101-002.zip","). That's normal — just repeat the upload steps below for each one.",[19,505],{},[22,507,509],{"id":508},"step-2-download-your-export","Step 2: Download your export",[15,511,512],{},"When Google emails you that your export is ready:",[30,514,515,518,521],{},[33,516,517],{},"Open the email from Google",[33,519,520],{},"Click the download link for each zip file",[33,522,523],{},"Save them somewhere you can find them (your Downloads folder works fine)",[19,525],{},[22,527,529],{"id":528},"step-3-upload-to-autobutler","Step 3: Upload to AutoButler",[15,531,532],{},"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,534,535,538,544,551,554,559],{},[33,536,537],{},"Make sure you're connected to your home WiFi",[33,539,540,541],{},"Open AutoButler in your browser and navigate to ",[40,542,543],{},"Files",[33,545,546,547,550],{},"Create a folder for your Google data if you want to keep things organized (e.g. ",[43,548,549],{},"Google Import",")",[33,552,553],{},"Navigate into that folder",[33,555,457,556,558],{},[40,557,175],{}," and select your Takeout zip file(s)",[33,560,561],{},"Wait for the upload to complete — large files may take a few minutes depending on your home network speed",[51,563,564],{},[15,565,566,568],{},[40,567,57],{}," You can upload multiple zip files at once by selecting them all in the file picker.",[19,570],{},[22,572,574],{"id":573},"step-4-extract-the-contents","Step 4: Extract the contents",[15,576,577],{},"Once uploaded, your zip file is sitting in AutoButler but still compressed. To get your actual photos and files out:",[30,579,580,586,593,599],{},[33,581,582,583,585],{},"Find the uploaded ",[43,584,474],{}," file in the Files view",[33,587,588,589,592],{},"Right-click it (or tap the ",[40,590,591],{},"⋮"," menu)",[33,594,595,596],{},"Select ",[40,597,598],{},"Extract here",[33,600,601],{},"AutoButler will unpack the zip in place — this may take a moment for large archives",[51,603,604],{},[15,605,606,609,610,612,613,616,617,620,621,623,624,499,627,499,630,633],{},[40,607,608],{},"About Google Photos' nested structure:"," Google Photos exports put your photos inside a folder called ",[43,611,444],{},", then inside year folders like ",[43,614,615],{},"Photos from 2022",". Inside each year folder you'll find your photos alongside ",[43,618,619],{},".json"," sidecar files containing metadata. The ",[43,622,619],{}," files are Google's metadata — you can keep them or delete them; your actual photos are the ",[43,625,626],{},".jpg",[43,628,629],{},".heic",[43,631,632],{},".mp4",", etc. files.",[15,635,636],{},"After extraction you can delete the original zip file to reclaim space.",[19,638],{},[22,640,642],{"id":641},"step-5-browse-your-files","Step 5: Browse your files",[15,644,645,646,649],{},"Your photos and documents are now stored on ",[40,647,648],{},"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:",[87,651,652,658,664],{},[33,653,654,655,657],{},"Browse them in the ",[40,656,543],{}," section",[33,659,660,661,663],{},"View photos in the ",[40,662,274],{}," section (AutoButler automatically finds images in your files)",[33,665,666],{},"Access them from any phone, tablet, or computer on your home network",[19,668],{},[22,670,672],{"id":671},"tips","Tips",[15,674,675,678],{},[40,676,677],{},"Start with a small export first."," Export just one year of photos to get comfortable with the process before importing everything.",[15,680,681,684],{},[40,682,683],{},"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,686,687,690],{},[40,688,689],{},"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,692,693,696,697,499,700,499,703,706,707,710],{},[40,694,695],{},"What about Google Docs files?"," Google Docs, Sheets, and Slides export as Microsoft Office formats (",[43,698,699],{},".docx",[43,701,702],{},".xlsx",[43,704,705],{},".pptx",") or as ",[43,708,709],{},".pdf",". They'll show up in your files just like any other document.",[19,712],{},[22,714,716],{"id":715},"what-about-other-google-services","What about other Google services?",[15,718,719],{},"This guide covers Photos and Drive, but Google Takeout supports many other products. Once you're comfortable with the process, you can also export:",[87,721,722,732,741],{},[33,723,724,727,728,731],{},[40,725,726],{},"Gmail"," (as ",[43,729,730],{},".mbox"," format) — email clients like Thunderbird can import these",[33,733,734,727,737,740],{},[40,735,736],{},"Google Calendar",[43,738,739],{},".ics",") — most calendar apps can import these",[33,742,743,746],{},[40,744,745],{},"YouTube"," — your videos, watch history, and liked videos",[15,748,749],{},"AutoButler is primarily a file and photo manager, so the Photos and Drive exports are the most useful to store there directly.",[19,751],{},[15,753,754],{},[755,756,757,758,762,763,767],"em",{},"Need help? Visit the ",[359,759,761],{"href":760},"\u002Fsupport","support page"," or ",[359,764,766],{"href":765},"\u002Fcommunity","community forums",".",{"title":374,"searchDepth":375,"depth":375,"links":769},[770,771,772,773,774,775,776],{"id":420,"depth":375,"text":421},{"id":508,"depth":375,"text":509},{"id":528,"depth":375,"text":529},{"id":573,"depth":375,"text":574},{"id":641,"depth":375,"text":642},{"id":671,"depth":375,"text":672},{"id":715,"depth":375,"text":716},"How to export your data from Google and import it into AutoButler using Google Takeout",{},{"title":780,"order":781},"Google Takeout Guide",5,"\u002Fdocs\u002Fgoogle-takeout",{"title":403,"description":777},"docs\u002Fgoogle-takeout","xtvgylRRB5jQWVoOWNOlIcwENaJq0GwT4-Jr4TkVPmo",{"id":787,"title":362,"body":788,"description":921,"extension":394,"meta":922,"navigation":923,"path":361,"seo":925,"stem":926,"__hash__":927},"content\u002Fdocs\u002Fhelp.md",{"type":8,"value":789,"toc":911},[790,793,795,799,803,820,824,837,841,844,848,880,884,887,889,893,903],[11,791,362],{"id":792},"help-support",[19,794],{},[22,796,798],{"id":797},"troubleshooting","Troubleshooting",[79,800,802],{"id":801},"i-cant-reach-autobutler-in-my-browser","I can't reach AutoButler in my browser",[87,804,805,808,811,817],{},[33,806,807],{},"Make sure the device running AutoButler is powered on",[33,809,810],{},"Make sure you're on the same WiFi network as the AutoButler device",[33,812,813,814,816],{},"Try ",[43,815,45],{}," — if you changed the hostname during setup, use that instead",[33,818,819],{},"Try restarting your router and the AutoButler device",[79,821,823],{"id":822},"im-getting-an-error-when-i-try-to-install-autobutler","I'm getting an error when I try to install AutoButler",[15,825,826,827,830,831,836],{},"Make sure you're using the installer for your operating system and architecture. The ",[359,828,829],{"href":370},"nerd notes"," page has installation details. If you're still stuck, ",[359,832,835],{"href":833,"rel":834},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Fissues",[432],"open a GitHub issue"," and someone will help.",[79,838,840],{"id":839},"autobutler-doesnt-work-with-my-vpn","AutoButler doesn't work with my VPN",[15,842,843],{},"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.)",[79,845,847],{"id":846},"im-having-performance-issues","I'm having performance issues",[30,849,850,856,867],{},[33,851,852,853,855],{},"Check the ",[40,854,283],{}," page in AutoButler — high disk usage or high temperatures can cause slowdowns",[33,857,858,859,862,863,866],{},"In Settings, click ",[40,860,861],{},"Export Performance Metrics"," — this saves recent health data to a ",[43,864,865],{},"metrics.sqlite"," file",[33,868,869,870,874,875,879],{},"Share that file in a ",[359,871,873],{"href":833,"rel":872},[432],"GitHub issue"," or email it to ",[359,876,878],{"href":877},"mailto:support@autobutler.org","support@autobutler.org"," and we'll take a look",[79,881,883],{"id":882},"my-files-arent-showing-up-after-i-uploaded-them","My files aren't showing up after I uploaded them",[15,885,886],{},"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,888],{},[22,890,892],{"id":891},"get-help","Get Help",[15,894,895,898,899],{},[40,896,897],{},"GitHub Issues"," for questions, bug reports, and feature requests:\n→ ",[359,900,902],{"href":833,"rel":901},[432],"github.com\u002Fautobutler-org\u002Fautobutler\u002Fissues",[15,904,905,908,909],{},[40,906,907],{},"Email"," for private matters:\n→ ",[359,910,878],{"href":877},{"title":374,"searchDepth":375,"depth":375,"links":912},[913,920],{"id":797,"depth":375,"text":798,"children":914},[915,916,917,918,919],{"id":801,"depth":381,"text":802},{"id":822,"depth":381,"text":823},{"id":839,"depth":381,"text":840},{"id":846,"depth":381,"text":847},{"id":882,"depth":381,"text":883},{"id":891,"depth":375,"text":892},"Get help and support for AutoButler",{},{"title":924,"order":381},"Help",{"title":362,"description":921},"docs\u002Fhelp","KIzN_caCbiC4jVL7cFoNR9g2HciVE1ac-NfsoJB5r_4",{"id":929,"title":371,"body":930,"description":1832,"extension":394,"meta":1833,"navigation":1834,"path":370,"seo":1835,"stem":1836,"__hash__":1837},"content\u002Fdocs\u002Fnerd-notes.md",{"type":8,"value":931,"toc":1815},[932,935,944,946,950,1057,1060,1062,1066,1070,1288,1299,1303,1306,1308,1312,1322,1326,1343,1418,1429,1433,1537,1539,1543,1549,1559,1577,1587,1597,1599,1603,1615,1670,1674,1719,1723,1778,1785,1787,1791,1811],[11,933,371],{"id":934},"nerd-notes",[15,936,937,938,943],{},"A technical mirror of the ",[359,939,942],{"href":940,"rel":941},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler",[432],"AutoButler README",".\nIf you want to understand what's running in your house, this is the page.",[19,945],{},[22,947,949],{"id":948},"stack","Stack",[951,952,953,966],"table",{},[954,955,956],"thead",{},[957,958,959,963],"tr",{},[960,961,962],"th",{},"Layer",[960,964,965],{},"Technology",[967,968,969,983,996,1009,1021,1033,1045],"tbody",{},[957,970,971,975],{},[972,973,974],"td",{},"Backend",[972,976,977,978],{},"Go + ",[359,979,982],{"href":980,"rel":981},"https:\u002F\u002Fgithub.com\u002Fgin-gonic\u002Fgin",[432],"Gin",[957,984,985,988],{},[972,986,987],{},"Frontend",[972,989,990,995],{},[359,991,994],{"href":992,"rel":993},"https:\u002F\u002Fflutter.dev",[432],"Flutter"," (web, iOS, Android)",[957,997,998,1001],{},[972,999,1000],{},"Database",[972,1002,1003,1004],{},"SQLite via ",[359,1005,1008],{"href":1006,"rel":1007},"https:\u002F\u002Fpkg.go.dev\u002Fmodernc.org\u002Fsqlite",[432],"modernc.org\u002Fsqlite",[957,1010,1011,1014],{},[972,1012,1013],{},"Migrations",[972,1015,1016],{},[359,1017,1020],{"href":1018,"rel":1019},"https:\u002F\u002Fgithub.com\u002Fgolang-migrate\u002Fmigrate",[432],"golang-migrate",[957,1022,1023,1026],{},[972,1024,1025],{},"DB queries",[972,1027,1028],{},[359,1029,1032],{"href":1030,"rel":1031},"https:\u002F\u002Fsqlc.dev",[432],"sqlc",[957,1034,1035,1038],{},[972,1036,1037],{},"API docs",[972,1039,1040],{},[359,1041,1044],{"href":1042,"rel":1043},"https:\u002F\u002Fgithub.com\u002Fswaggo\u002Fswag",[432],"Swagger\u002Fswag",[957,1046,1047,1050],{},[972,1048,1049],{},"Observability",[972,1051,1052],{},[359,1053,1056],{"href":1054,"rel":1055},"https:\u002F\u002Fopentelemetry.io",[432],"OpenTelemetry",[15,1058,1059],{},"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,1061],{},[22,1063,1065],{"id":1064},"installation","Installation",[79,1067,1069],{"id":1068},"download-and-install-a-release","Download and install a release",[1071,1072,1076],"pre",{"className":1073,"code":1074,"language":1075,"meta":374,"style":374},"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,1077,1078,1087,1103,1109,1138,1158,1176,1195,1213,1219,1224,1240,1260,1272,1277],{"__ignoreMap":374},[1079,1080,1083],"span",{"class":1081,"line":1082},"line",1,[1079,1084,1086],{"class":1085},"s1xnj","# Stop the running service if upgrading\n",[1079,1088,1089,1093,1097,1100],{"class":1081,"line":375},[1079,1090,1092],{"class":1091},"sGV_l","sudo",[1079,1094,1096],{"class":1095},"s9P1W"," systemctl",[1079,1098,1099],{"class":1095}," stop",[1079,1101,1102],{"class":1095}," autobutler\n",[1079,1104,1105],{"class":1081,"line":381},[1079,1106,1108],{"emptyLinePlaceholder":1107},true,"\n",[1079,1110,1112,1116,1120,1123,1127,1130,1133,1135],{"class":1081,"line":1111},4,[1079,1113,1115],{"class":1114},"siemi","OS",[1079,1117,1119],{"class":1118},"s4drQ","=",[1079,1121,1122],{"class":1095},"\"",[1079,1124,1126],{"class":1125},"sWMKd","$(",[1079,1128,1129],{"class":1091},"uname",[1079,1131,1132],{"class":1095}," -s",[1079,1134,550],{"class":1125},[1079,1136,1137],{"class":1095},"\"\n",[1079,1139,1140,1143,1145,1147,1149,1151,1154,1156],{"class":1081,"line":781},[1079,1141,1142],{"class":1114},"ARCH",[1079,1144,1119],{"class":1118},[1079,1146,1122],{"class":1095},[1079,1148,1126],{"class":1125},[1079,1150,1129],{"class":1091},[1079,1152,1153],{"class":1095}," -m",[1079,1155,550],{"class":1125},[1079,1157,1137],{"class":1095},[1079,1159,1161,1165,1168,1171,1173],{"class":1081,"line":1160},6,[1079,1162,1164],{"class":1163},"sFo6-","case",[1079,1166,1167],{"class":1095}," \"",[1079,1169,1170],{"class":1114},"$ARCH",[1079,1172,1122],{"class":1095},[1079,1174,1175],{"class":1163}," in\n",[1079,1177,1179,1182,1184,1187,1189,1192],{"class":1081,"line":1178},7,[1079,1180,1181],{"class":1095},"  aarch64",[1079,1183,550],{"class":1118},[1079,1185,1186],{"class":1114}," ARCH",[1079,1188,1119],{"class":1118},[1079,1190,1191],{"class":1095},"\"arm64\"",[1079,1193,1194],{"class":1125},";;\n",[1079,1196,1198,1201,1203,1206,1208,1211],{"class":1081,"line":1197},8,[1079,1199,1200],{"class":1095},"  x86_64",[1079,1202,550],{"class":1118},[1079,1204,1205],{"class":1114},"  ARCH",[1079,1207,1119],{"class":1118},[1079,1209,1210],{"class":1095},"\"x86_64\"",[1079,1212,1194],{"class":1125},[1079,1214,1216],{"class":1081,"line":1215},9,[1079,1217,1218],{"class":1163},"esac\n",[1079,1220,1222],{"class":1081,"line":1221},10,[1079,1223,1108],{"emptyLinePlaceholder":1107},[1079,1225,1227,1230,1233,1236],{"class":1081,"line":1226},11,[1079,1228,1229],{"class":1091},"curl",[1079,1231,1232],{"class":1095}," --fail",[1079,1234,1235],{"class":1095}," -L",[1079,1237,1239],{"class":1238},"sHteJ"," \\\n",[1079,1241,1243,1246,1249,1252,1255,1258],{"class":1081,"line":1242},12,[1079,1244,1245],{"class":1095},"  \"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Freleases\u002Flatest\u002Fdownload\u002Fautobutler_",[1079,1247,1248],{"class":1114},"${OS}",[1079,1250,1251],{"class":1095},"_",[1079,1253,1254],{"class":1114},"${ARCH}",[1079,1256,1257],{"class":1095},".tar.gz\"",[1079,1259,1239],{"class":1238},[1079,1261,1263,1266,1269],{"class":1081,"line":1262},13,[1079,1264,1265],{"class":1118},"  |",[1079,1267,1268],{"class":1091}," tar",[1079,1270,1271],{"class":1095}," -xvz\n",[1079,1273,1275],{"class":1081,"line":1274},14,[1079,1276,1108],{"emptyLinePlaceholder":1107},[1079,1278,1280,1282,1285],{"class":1081,"line":1279},15,[1079,1281,1092],{"class":1091},[1079,1283,1284],{"class":1095}," .\u002Fautobutler",[1079,1286,1287],{"class":1095}," install\n",[15,1289,1290,1291,1294,1295,1298],{},"The ",[43,1292,1293],{},"install"," command registers AutoButler as a systemd service and starts it.\nOnce running, open ",[43,1296,1297],{},"http:\u002F\u002F\u003Cdevice-ip>:80"," in a browser.",[79,1300,1302],{"id":1301},"first-boot","First boot",[15,1304,1305],{},"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,1307],{},[22,1309,1311],{"id":1310},"api","API",[15,1313,1314,1315,1318,1319,767],{},"The REST API is at ",[43,1316,1317],{},"\u002Fapi\u002Fv1\u002F",". Swagger UI is at ",[43,1320,1321],{},"http:\u002F\u002F\u003Chost>\u002Fswagger",[79,1323,1325],{"id":1324},"authentication","Authentication",[15,1327,1328,1329,499,1332,1335,1336,1339,1340,767],{},"All endpoints require a session token except ",[43,1330,1331],{},"\u002Fauth\u002Fsetup",[43,1333,1334],{},"\u002Fauth\u002Flogin",",\n",[43,1337,1338],{},"\u002Fauth\u002Frecover",", and ",[43,1341,1342],{},"\u002Fauth\u002Fstatus",[1071,1344,1346],{"className":1073,"code":1345,"language":1075,"meta":374,"style":374},"# Login\ncurl -s -X POST http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\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\u002Fv1\u002Fhealth \\\n  -H \"Authorization: Bearer \u003Ctoken>\"\n",[43,1347,1348,1353,1370,1380,1388,1393,1397,1402,1411],{"__ignoreMap":374},[1079,1349,1350],{"class":1081,"line":1082},[1079,1351,1352],{"class":1085},"# Login\n",[1079,1354,1355,1357,1359,1362,1365,1368],{"class":1081,"line":375},[1079,1356,1229],{"class":1091},[1079,1358,1132],{"class":1095},[1079,1360,1361],{"class":1095}," -X",[1079,1363,1364],{"class":1095}," POST",[1079,1366,1367],{"class":1095}," http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\u002Fauth\u002Flogin",[1079,1369,1239],{"class":1238},[1079,1371,1372,1375,1378],{"class":1081,"line":381},[1079,1373,1374],{"class":1095},"  -H",[1079,1376,1377],{"class":1095}," \"Content-Type: application\u002Fjson\"",[1079,1379,1239],{"class":1238},[1079,1381,1382,1385],{"class":1081,"line":1111},[1079,1383,1384],{"class":1095},"  -d",[1079,1386,1387],{"class":1095}," '{\"username\":\"you\",\"password\":\"your-password\"}'\n",[1079,1389,1390],{"class":1081,"line":781},[1079,1391,1392],{"class":1085},"# → {\"token\":\"\u003C64-char hex token>\"}\n",[1079,1394,1395],{"class":1081,"line":1160},[1079,1396,1108],{"emptyLinePlaceholder":1107},[1079,1398,1399],{"class":1081,"line":1178},[1079,1400,1401],{"class":1085},"# Use the token\n",[1079,1403,1404,1406,1409],{"class":1081,"line":1197},[1079,1405,1229],{"class":1091},[1079,1407,1408],{"class":1095}," http:\u002F\u002Flocalhost\u002Fapi\u002Fv1\u002Fhealth",[1079,1410,1239],{"class":1238},[1079,1412,1413,1415],{"class":1081,"line":1215},[1079,1414,1374],{"class":1095},[1079,1416,1417],{"class":1095}," \"Authorization: Bearer \u003Ctoken>\"\n",[15,1419,1420,1421,1424,1425,1428],{},"Tokens are valid for 30 days. Pass them as ",[43,1422,1423],{},"Authorization: Bearer \u003Ctoken>"," or as a\n",[43,1426,1427],{},"session"," cookie.",[79,1430,1432],{"id":1431},"key-endpoints","Key endpoints",[951,1434,1435,1448],{},[954,1436,1437],{},[957,1438,1439,1442,1445],{},[960,1440,1441],{},"Method",[960,1443,1444],{},"Path",[960,1446,1447],{},"What it does",[967,1449,1450,1463,1475,1488,1500,1513,1525],{},[957,1451,1452,1455,1460],{},[972,1453,1454],{},"GET",[972,1456,1457],{},[43,1458,1459],{},"\u002Fapi\u002Fv1\u002Fhealth",[972,1461,1462],{},"System health (CPU, memory, disk, temperature)",[957,1464,1465,1467,1472],{},[972,1466,1454],{},[972,1468,1469],{},[43,1470,1471],{},"\u002Fapi\u002Fv1\u002Fcirrus",[972,1473,1474],{},"List files",[957,1476,1477,1480,1485],{},[972,1478,1479],{},"POST",[972,1481,1482],{},[43,1483,1484],{},"\u002Fapi\u002Fv1\u002Fcirrus\u002Fupload\u002F{path}",[972,1486,1487],{},"Upload a file",[957,1489,1490,1492,1497],{},[972,1491,1454],{},[972,1493,1494],{},[43,1495,1496],{},"\u002Fapi\u002Fv1\u002Fstorage\u002Fdevices\u002Fstatus",[972,1498,1499],{},"List storage devices",[957,1501,1502,1505,1510],{},[972,1503,1504],{},"PATCH",[972,1506,1507],{},[43,1508,1509],{},"\u002Fapi\u002Fv1\u002Fstorage\u002Fdevices\u002F{devicePath}\u002Fname",[972,1511,1512],{},"Rename a device",[957,1514,1515,1517,1522],{},[972,1516,1454],{},[972,1518,1519],{},[43,1520,1521],{},"\u002Fapi\u002Fv1\u002Fversion",[972,1523,1524],{},"Installed version",[957,1526,1527,1529,1534],{},[972,1528,1479],{},[972,1530,1531],{},[43,1532,1533],{},"\u002Fapi\u002Fv1\u002Fversion\u002Flatest",[972,1535,1536],{},"Update to latest release",[19,1538],{},[22,1540,1542],{"id":1541},"architecture-notes","Architecture notes",[15,1544,1545,1548],{},[40,1546,1547],{},"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,1550,1551,1554,1555,1558],{},[40,1552,1553],{},"SQLite."," All state lives in a SQLite database at ",[43,1556,1557],{},"\u002Fvar\u002Flib\u002Fautobutler\u002Fdata\u002Fautobutler.db",".\nMigrations run on startup — safe to upgrade without manual intervention.",[15,1560,1561,1564,1565,1568,1569,1572,1573,1576],{},[40,1562,1563],{},"Device detection."," On Linux, AutoButler reads ",[43,1566,1567],{},"\u002Fproc\u002Fmounts"," to discover storage devices.\nUSB device detection uses the ",[43,1570,1571],{},"usbutil"," package. Mounting\u002Funmounting USB storage requires\nroot — run with ",[43,1574,1575],{},"AS_ROOT=1"," in development.",[15,1578,1579,1582,1583,1586],{},[40,1580,1581],{},"Auth."," Passwords are bcrypt-hashed (cost 12). Session tokens are 32 bytes of\n",[43,1584,1585],{},"crypto\u002Frand"," (256-bit entropy). The recovery phrase is a 6-word phrase from a 256-word\nwordlist (~48 bits — deliberate tradeoff for usability on a home device).",[15,1588,1589,1592,1593,1596],{},[40,1590,1591],{},"Updates."," The butler can update itself in-place via the ",[43,1594,1595],{},"\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,1598],{},[22,1600,1602],{"id":1601},"development","Development",[15,1604,1605,1608,1609,1614],{},[40,1606,1607],{},"Prerequisites:"," Go, Flutter, Make, ",[359,1610,1613],{"href":1611,"rel":1612},"https:\u002F\u002Fgithub.com\u002Fair-verse\u002Fair",[432],"air",", sqlc, swag",[1071,1616,1618],{"className":1073,"code":1617,"language":1075,"meta":374,"style":374},"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,1619,1620,1631,1639,1650,1660],{"__ignoreMap":374},[1079,1621,1622,1625,1628],{"class":1081,"line":1082},[1079,1623,1624],{"class":1091},"git",[1079,1626,1627],{"class":1095}," clone",[1079,1629,1630],{"class":1095}," https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler.git\n",[1079,1632,1633,1637],{"class":1081,"line":375},[1079,1634,1636],{"class":1635},"skFXB","cd",[1079,1638,1102],{"class":1095},[1079,1640,1641,1644,1647],{"class":1081,"line":381},[1079,1642,1643],{"class":1091},"make",[1079,1645,1646],{"class":1095}," setup",[1079,1648,1649],{"class":1085},"      # install dev tools\n",[1079,1651,1652,1654,1657],{"class":1081,"line":1111},[1079,1653,1643],{"class":1091},[1079,1655,1656],{"class":1095}," generate",[1079,1658,1659],{"class":1085},"   # sqlc + swag + flutter icons + sbom\n",[1079,1661,1662,1664,1667],{"class":1081,"line":781},[1079,1663,1643],{"class":1091},[1079,1665,1666],{"class":1095}," build",[1079,1668,1669],{"class":1085},"      # build everything\n",[79,1671,1673],{"id":1672},"run-locally","Run locally",[1071,1675,1677],{"className":1073,"code":1676,"language":1075,"meta":374,"style":374},"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,1678,1679,1689,1699,1709],{"__ignoreMap":374},[1079,1680,1681,1683,1686],{"class":1081,"line":1082},[1079,1682,1643],{"class":1091},[1079,1684,1685],{"class":1095}," watch\u002Fbackend",[1079,1687,1688],{"class":1085},"          # backend with hot reload\n",[1079,1690,1691,1693,1696],{"class":1081,"line":375},[1079,1692,1643],{"class":1091},[1079,1694,1695],{"class":1095}," serve\u002Ffrontend",[1079,1697,1698],{"class":1085},"         # Flutter web\n",[1079,1700,1701,1703,1706],{"class":1081,"line":381},[1079,1702,1643],{"class":1091},[1079,1704,1705],{"class":1095}," emulate\u002Fandroid",[1079,1707,1708],{"class":1085},"        # Android emulator\n",[1079,1710,1711,1713,1716],{"class":1081,"line":1111},[1079,1712,1643],{"class":1091},[1079,1714,1715],{"class":1095}," serve\u002Ffrontend\u002Fmobile",[1079,1717,1718],{"class":1085},"  # Flutter mobile (after emulator is running)\n",[79,1720,1722],{"id":1721},"useful-targets","Useful targets",[1071,1724,1726],{"className":1073,"code":1725,"language":1075,"meta":374,"style":374},"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,1727,1728,1738,1748,1758,1768],{"__ignoreMap":374},[1079,1729,1730,1732,1735],{"class":1081,"line":1082},[1079,1731,1643],{"class":1091},[1079,1733,1734],{"class":1095}," check",[1079,1736,1737],{"class":1085},"          # lint (Go + Flutter)\n",[1079,1739,1740,1742,1745],{"class":1081,"line":375},[1079,1741,1643],{"class":1091},[1079,1743,1744],{"class":1095}," format",[1079,1746,1747],{"class":1085},"         # auto-format\n",[1079,1749,1750,1752,1755],{"class":1081,"line":381},[1079,1751,1643],{"class":1091},[1079,1753,1754],{"class":1095}," test",[1079,1756,1757],{"class":1085},"           # run all tests\n",[1079,1759,1760,1762,1765],{"class":1081,"line":1111},[1079,1761,1643],{"class":1091},[1079,1763,1764],{"class":1095}," coverage",[1079,1766,1767],{"class":1085},"       # test coverage report\n",[1079,1769,1770,1772,1775],{"class":1081,"line":781},[1079,1771,1643],{"class":1091},[1079,1773,1774],{"class":1095}," help",[1079,1776,1777],{"class":1085},"           # list all targets\n",[15,1779,1780,1781,1784],{},"Swagger UI is at ",[43,1782,1783],{},"http:\u002F\u002Flocalhost:8080\u002Fswagger"," when the backend is running locally.",[19,1786],{},[22,1788,1790],{"id":1789},"source","Source",[87,1792,1793,1800,1803],{},[33,1794,1795,1796],{},"GitHub: ",[359,1797,1799],{"href":940,"rel":1798},[432],"autobutler-org\u002Fautobutler",[33,1801,1802],{},"License: MIT",[33,1804,1805,1806],{},"Contributing:\n",[359,1807,1810],{"href":1808,"rel":1809},"https:\u002F\u002Fgithub.com\u002Fautobutler-org\u002Fautobutler\u002Fblob\u002Fmain\u002FCONTRIBUTING.md",[432],"CONTRIBUTING.md",[1812,1813,1814],"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":374,"searchDepth":375,"depth":375,"links":1816},[1817,1818,1822,1826,1827,1831],{"id":948,"depth":375,"text":949},{"id":1064,"depth":375,"text":1065,"children":1819},[1820,1821],{"id":1068,"depth":381,"text":1069},{"id":1301,"depth":381,"text":1302},{"id":1310,"depth":375,"text":1311,"children":1823},[1824,1825],{"id":1324,"depth":381,"text":1325},{"id":1431,"depth":381,"text":1432},{"id":1541,"depth":375,"text":1542},{"id":1601,"depth":375,"text":1602,"children":1828},[1829,1830],{"id":1672,"depth":381,"text":1673},{"id":1721,"depth":381,"text":1722},{"id":1789,"depth":375,"text":1790},"Technical overview of AutoButler — stack, architecture, installation, and development.",{},{"title":371,"order":1111},{"title":371,"description":1832},"docs\u002Fnerd-notes","zwoz20IR7MJbthCpLE94DLcNV52A9kimZ74MTdowWtU",{"id":1839,"title":1840,"body":1841,"description":1926,"extension":394,"meta":1927,"navigation":1928,"path":1929,"seo":1930,"stem":1931,"__hash__":1932},"content\u002Fdocs\u002Fwelcome.md","Welcome",{"type":8,"value":1842,"toc":1919},[1843,1847,1851,1854,1858,1864,1871,1878,1882,1891,1893,1899,1903],[11,1844,1846],{"id":1845},"welcome-to-autobutler","Welcome to AutoButler",[22,1848,1850],{"id":1849},"what-is-autobutler","What is AutoButler?",[15,1852,1853],{},"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,1855,1857],{"id":1856},"how-does-autobutler-work-securely","How does AutoButler work securely?",[15,1859,1860],{},[71,1861],{"alt":1862,"src":1863},"AutoButler Architecture","\u002Fassets\u002Fimages\u002Fautobutler-architecture.webp",[15,1865,1866,1867,1870],{},"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 ",[755,1868,1869],{},"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,1872,1873,1874,767],{},"When you access the butler, all you're doing is asking your router to find the autobutler on your local network, as\nyou can see in the image above. The 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",[359,1875,1877],{"href":940,"rel":1876},[432],"our Github",[22,1879,1881],{"id":1880},"how-can-we-trust-you-guys","How can we trust you guys?",[15,1883,1884,1885,1890],{},"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 ",[359,1886,1889],{"href":1887,"rel":1888},"https:\u002F\u002Fwww.reddit.com\u002Fr\u002Fautobutler\u002F",[432],"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,1892,6],{"id":13},[15,1894,1895,1896,767],{},"Ready to dive in? Check out the ",[359,1897,1898],{"href":397},"Getting Started Guide",[22,1900,1902],{"id":1901},"need-help","Need Help?",[87,1904,1905,1912],{},[33,1906,1907,1911],{},[40,1908,1909],{},[359,1910,6],{"href":397}," - Step-by-step tutorials",[33,1913,1914,1918],{},[40,1915,1916],{},[359,1917,362],{"href":361}," - Troubleshooting and community resources",{"title":374,"searchDepth":375,"depth":375,"links":1920},[1921,1922,1923,1924,1925],{"id":1849,"depth":375,"text":1850},{"id":1856,"depth":375,"text":1857},{"id":1880,"depth":375,"text":1881},{"id":13,"depth":375,"text":6},{"id":1901,"depth":375,"text":1902},"Welcome to AutoButler - your intelligent automation platform",{},{"title":1840,"order":1082},"\u002Fdocs\u002Fwelcome",{"title":1840,"description":1926},"docs\u002Fwelcome","trQmwoSIcDR9m2MOLY2PvprdKnuHjW2k_MrCYPKWlw0",{"id":787,"title":362,"body":1934,"description":921,"extension":394,"meta":2021,"navigation":2022,"path":361,"seo":2023,"stem":926,"__hash__":927},{"type":8,"value":1935,"toc":2011},[1936,1938,1940,1942,1944,1956,1958,1965,1967,1969,1971,1990,1992,1994,1996,1998,2005],[11,1937,362],{"id":792},[19,1939],{},[22,1941,798],{"id":797},[79,1943,802],{"id":801},[87,1945,1946,1948,1950,1954],{},[33,1947,807],{},[33,1949,810],{},[33,1951,813,1952,816],{},[43,1953,45],{},[33,1955,819],{},[79,1957,823],{"id":822},[15,1959,826,1960,830,1962,836],{},[359,1961,829],{"href":370},[359,1963,835],{"href":833,"rel":1964},[432],[79,1966,840],{"id":839},[15,1968,843],{},[79,1970,847],{"id":846},[30,1972,1973,1977,1983],{},[33,1974,852,1975,855],{},[40,1976,283],{},[33,1978,858,1979,862,1981,866],{},[40,1980,861],{},[43,1982,865],{},[33,1984,869,1985,874,1988,879],{},[359,1986,873],{"href":833,"rel":1987},[432],[359,1989,878],{"href":877},[79,1991,883],{"id":882},[15,1993,886],{},[19,1995],{},[22,1997,892],{"id":891},[15,1999,2000,898,2002],{},[40,2001,897],{},[359,2003,902],{"href":833,"rel":2004},[432],[15,2006,2007,908,2009],{},[40,2008,907],{},[359,2010,878],{"href":877},{"title":374,"searchDepth":375,"depth":375,"links":2012},[2013,2020],{"id":797,"depth":375,"text":798,"children":2014},[2015,2016,2017,2018,2019],{"id":801,"depth":381,"text":802},{"id":822,"depth":381,"text":823},{"id":839,"depth":381,"text":840},{"id":846,"depth":381,"text":847},{"id":882,"depth":381,"text":883},{"id":891,"depth":375,"text":892},{},{"title":924,"order":381},{"title":362,"description":921},1775094991876]