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.py
and adjust values as needed.electron/.env.example
: Example environment variables for the Electron/frontend. Copy this file to.env
and adjust values as needed.
For the production build workflow, add following variables to the repository secrets:
GH_TOKEN
MAC_API_KEY
MAC_API_KEY_ID
MAC_API_KEY_ISSUER_ID
MAC_CERTS
MAC_CERTS_PASSWORD
SENTRY_AUTH_TOKEN
STORAGE_KEY
SUPABASE_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:mac
The 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.