A local web app that scans a folder tree and visualizes how much data was created each day — drill down from Year → Month → Day, and list the actual files behind any period.
- Scans a folder recursively, recording each file's size and creation date.
- Drill-down bar chart: Years → Months (within a year) → Days (within a month).
- Summary cards: total size, total files, busiest period.
- Jump straight to a year via dropdown to list every file created that year.
- File list for any month or specific day — sorted largest → smallest, paginated (100 files per page), searchable, and sortable by column.
- Right-click a file to open it or open its containing folder in Explorer.
- Scan progress is tracked in the background and persists across page reloads.
- Multiple scanned folders are remembered; rescan or delete their data anytime.
Use Settings in the top bar to choose Auto, Dark, or Light appearance. Auto (the default) follows the system preference reported by your browser, including changes while the app is open. Your choice is saved in this browser.
The interface uses rounded clay-style surfaces in both themes. Below the chart, a responsive yearly overview lists storage in MB or GB across balanced columns. Select any year to view its files. The chart and yearly overview can be collapsed independently; their states are saved in browser storage and restored after reloads or restarts.
Use Export HTML above the file list to download a standalone report of all files matching the selected period and search filter (all pages). Choose size ascending/descending, creation date oldest/newest first, or an alphabetical directory tree with nested folder headings. Reports include absolute paths, sizes, creation dates, and totals, and open offline. Each path has an open-file icon with an encoded local file URL; it points to the original file, whose opening behavior depends on the browser and file type.
- Python 3.9+
- Flask (see requirements.txt)
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt.venv\Scripts\python.exe app.pyThen open http://127.0.0.1:5000 in your browser and click Scan Folder….
The server binds to
127.0.0.1only. It can open arbitrary local files/folders on request, so it must never be exposed beyond localhost.
app.py Flask routes / API
scanner.py Background folder scanner + SQLite storage
static/index.html Page markup
static/app.js Frontend logic (charts, drill-down, file table, context menu)
static/style.css Styling
diskuse.db SQLite database created on first scan (git-ignored)
| Endpoint | Description |
|---|---|
POST /api/scan |
Start scanning a folder path |
GET /api/scan/status |
Poll progress of the current scan |
GET /api/roots |
List previously scanned folders |
DELETE /api/roots?root= |
Forget a scanned folder's data |
GET /api/years?root= |
Size/count per year |
GET /api/months?root=&year= |
Size/count per month |
GET /api/days?root=&year=&month= |
Size/count per day |
GET /api/files?root=&year=&month=&day= |
Paginated, sortable, searchable file list |
GET /api/files/export |
Download a filtered HTML report with the selected organization |
POST /api/open |
Open a scanned file or reveal its folder |
- Scanned data (
diskuse.db) is stored locally and git-ignored — it can contain real file paths and sizes from your machine, so don't commit it.