From zero to a fully working multi-account Google Drive dashboard. No cloud accounts, no paid services — just your machine and your Google credentials.
Fork the repository on GitHub to get your own copy, then clone it locally.
git clone https://github.com/saimon4u/GDriveGenie.git
cd GDriveGenieYou only need one Google Cloud project and one credentials file — no matter how many Drive accounts you want to add. All accounts authenticate through the same OAuth client.
http://localhost:8000/api/auth/callback.Place the downloaded credentials file in the config/ folder at the project root, named exactly credentials.json.
config/
└── credentials.json ← your single OAuth client fileconfig/ folder is intentionally excluded from Git — its contents are listed in .gitignore so your credentials are never accidentally committed. The folder itself is tracked as an empty placeholder (via .gitkeep), so it already exists after cloning. Just drop your downloaded JSON file inside it.Install Python dependencies, then run the setup script. It will prompt you for a dashboard PIN and write all secrets directly into the local database — no .env file needed.
pip install -r backend/requirements.txtpython backend/scripts/generate_secrets.pyWhat the script does
app_config table inside backend/gdriveGenie.db (or the gdriveGenie_data Docker volume when running with Docker Compose). Re-run the script at any time to change your PIN — it will ask before overwriting.The backend is a FastAPI app served by Uvicorn. On startup it creates the database tables, runs migrations, and syncs file metadata from all connected Drive accounts.
uvicorn backend.main:app --reload --port 8000The frontend is a Next.js (App Router) app. Install dependencies and start the dev server. It must run alongside the backend simultaneously.
cd frontend
npm install
npm run devOpen http://localhost:3000. The Next.js config rewrites all /api/* requests to http://localhost:8000/api/* automatically.
Each account must be authorized via Google OAuth once before GDriveGenie can access it.
Adding another Drive account takes seconds — no file changes, no restart needed.
N × 15 GB
No hard limit on accounts. 10 accounts = 150 GB free.
Feature Reference
FAQ
Is my data safe?
Yes. GDriveGenie runs entirely on your local machine. Files are stored in your own Google Drive accounts. OAuth tokens are encrypted with AES-128 (Fernet) before being written to the local database.
How many accounts can I add?
There is no limit. Click "Connect another account" in Settings for each additional Google account. Each one adds its full storage quota to the pool. 10 free accounts = 150 GB.
What happens if an account is full?
GDriveGenie always routes to the account with the most free space. If all accounts are full, the upload fails with a 503 error. Add another account to fix it.
Can I access files I added directly in Google Drive?
Yes. Click Sync in the Files page. GDriveGenie syncs only metadata — not file content — so it's fast.
Can I move files between accounts?
Within one account, drag any file and drop it into a folder from the slide-in panel. Cross-account moves are not supported — the Drive API does not allow transferring file ownership.
Does it work on Windows / Mac / Linux?
Yes. Python and Node.js are both cross-platform.
Can I run it with Docker?
Yes. Each service has its own Dockerfile (backend/Dockerfile, frontend/Dockerfile). Drop your credentials.json into the config/ folder, then: (1) docker compose build, (2) docker compose run --rm backend python scripts/generate_secrets.py — enter a PIN when prompted, (3) docker compose up -d. The database lives in the gdriveGenie_data named volume and survives rebuilds.
Can I expose it on the internet?
GDriveGenie is designed for local/self-hosted use. If you put it behind a reverse proxy (nginx, Caddy) with HTTPS, you must update FRONTEND_URL to your public frontend URL, BACKEND_URL to your public backend URL, and add the new callback URL (BACKEND_URL + /api/auth/callback) to your Google Cloud Console authorized redirect URIs.
Troubleshooting
!Backend fails to start — config key missing
Run python backend/scripts/generate_secrets.py (local) or docker compose run --rm backend python scripts/generate_secrets.py (Docker). The script creates the app_config table and inserts the three required keys.
!OAuth callback returns 400 invalid_request (Docker)
The BACKEND_URL environment variable must match the URL registered in Google Cloud Console. By default it is http://localhost:8000. If your backend is on a different host or port, update BACKEND_URL in docker-compose.yml and add the new callback URL (BACKEND_URL + /api/auth/callback) to your authorized redirect URIs.
!OAuth callback returns an error (local)
Check that the authorized redirect URI in Google Cloud Console is exactly http://localhost:8000/api/auth/callback. Also confirm the Google account you're signing in with is added as a test user on the OAuth consent screen.
!Files don't appear after uploading directly in Drive
GDriveGenie doesn't watch Drive in real time. Click the Sync button in the Files page to pull in new files.
!Upload fails with 503
All connected accounts are full. Go to Settings, click "Connect another account", and authorize a new Google account.
!Account shows Disconnected after restart
The refresh token may have been revoked by Google. Go to Settings and reconnect via OAuth.
!CORS error in the browser
Ensure both servers are running — backend on :8000, frontend on :3000. The Next.js dev proxy handles /api/* rewrites automatically. For Docker, check that both containers started with docker compose ps.
GDriveGenie is free and open source. View on GitHub.