exifoo helps you keep your photos and videos organized by adding the date and time of capture to the filename.
Visit: exifoo.vercel.app
- Select unlimited files: Rename multiple files at once with no limits. Easily organize your entire photo and video collection in just a few clicks.
- Flexible file naming: Customize filenames to your needs. Choose the year and time format and add custom text to recognize files even better.
- Live Preview: See your customization in action with a real-time example. Instantly preview how your filenames will look before renaming your photos and videos.
- Status Report: Get a detailed status report after every renaming process, showing the number of successful and failed renames.
- Privacy first: All files are processed offline, directly on your device. Your images never leave your computer.
- No registration: Start using exifoo right away. No sign up for an account, newsletter or anything else.
- Simple and modern: Clean, modern and easy-to-use interface. No technical knowledge required.
- Node.js (for Electron frontend)
- Python 3.9+ + pip (for backend)
- Clone the repository:
git clone https://github.com/codeofandrin/exifoo.git cd exifoo - Create and activate venv
# for arm64 (Apple Silicon) python3.9 -m venv venv source venv/bin/activate # for x64 (Intel) python3.9 -m venv venv_x64 eval \"$(/usr/local/bin/brew shellenv)\" && source venv_x64/bin/activate
- Install Python dependencies:
pip install -r requirements.txt
- Install Node.js dependencies:
# for concurrently npm install cd ../electron npm install
This project uses environment variables for configuration. Example files are provided:
backend/env.example.py: Example Python environment variables for the backend. Copy this file toenv.pyand adjust values as needed.electron/.env.example: Example environment variables for the Electron/frontend. Copy this file to.envand adjust values as needed.
For the production build workflow, add following variables to the repository secrets:
GH_TOKENMAC_API_KEYMAC_API_KEY_IDMAC_API_KEY_ISSUER_IDMAC_CERTSMAC_CERTS_PASSWORDSENTRY_AUTH_TOKENSTORAGE_KEYSUPABASE_KEY(not used anymore, therefore can be empty)SUPABASE_URL(not used anymore, therefore can be empty)
Make sure to configure these files before running the app in development or production.
# starts backend and electron app
npm run dev# builds the app for both architectures
npm run local-build:macThe github workflow (build.yml) will build the app for both architectures if a tag is
commited starting with v (e.g. v1.0.0)
The build artifacts are published to codeofandrin/exifoo-releases which is defined in
electron.vite.config.ts:
export default defineConfig({
main: {
// ...
define: {
__RELEASE_REPO__: s("https://github.com/codeofandrin/exifoo-releases")
}
},
// ...
renderer: {
// ...
define: {
// ...
__RELEASE_REPO__: s("https://github.com/codeofandrin/exifoo-releases")
}
}
})backend/ # Python backend (EXIF processing and file renaming, License Management)
electron/ # Electron frontend (Vite, React, TailwindCSS)
exifoo uses a license management system to enable free trials and full access. When starting the app, the license flow checks for a free trial or a valid license key.
Check it out on miro: https://miro.com/app/board/uXjVL9ViQRc=/
- 🟩 - Start
- 🟦 - Getting Started
- 🟧 - Main
Copyright (c) codeofandrin
This source code is licensed under the MIT license found in the LICENSE file in the root directory of this source tree.

