https://github.com/codeofandrin/exifoo
Organize your photos by adding the date and time to the filenames
https://github.com/codeofandrin/exifoo
electron exif exif-metadata python3 react
Last synced: about 2 months ago
JSON representation
Organize your photos by adding the date and time to the filenames
- Host: GitHub
- URL: https://github.com/codeofandrin/exifoo
- Owner: codeofandrin
- License: mit
- Created: 2024-11-03T11:03:35.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-07-06T21:15:32.000Z (11 months ago)
- Last Synced: 2025-07-06T21:19:45.681Z (11 months ago)
- Topics: electron, exif, exif-metadata, python3, react
- Language: TypeScript
- Homepage: https://exifoo.vercel.app
- Size: 2.79 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Shoot more. Organize less.
---
exifoo helps you keep your photos and videos organized by adding the date and time of capture to the filename.
Visit: exifoo.vercel.app
## Features
- **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.
## Tech Stack
**Frontend**
- Electron
- React + TypeScript
- Flowbite
- TailwindCSS + Framer Motion
- zustand
- Vite
**Backend**
- Python
- FastAPI with Uvicorn
## Getting Started
### Prerequisites
- [Node.js](https://nodejs.org/) (for Electron frontend)
- [Python 3.9+](https://www.python.org/) + [pip](https://pip.pypa.io/en/stable/) (for backend)
### Installation
1. **Clone the repository:**
```bash
git clone https://github.com/codeofandrin/exifoo.git
cd exifoo
```
2. **Create and activate venv**
```bash
# 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
```
3. **Install Python dependencies:**
```bash
pip install -r requirements.txt
```
4. **Install Node.js dependencies:**
```bash
# for concurrently
npm install
cd ../electron
npm install
```
### Environment Configuration
This project uses environment variables for configuration. Example files are provided:
- [`backend/env.example.py`](backend/env.example.py): Example Python environment variables for the backend. Copy this file to `env.py` and adjust values as needed.
- [`electron/.env.example`](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.
## Usage
### Development
```bash
# starts backend and electron app
npm run dev
```
### Build
#### Local Build
```bash
# builds the app for both architectures
npm run local-build:mac
```
#### Production Build
The github workflow ([`build.yml`](.github/workflows/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](https://github.com/codeofandrin/exifoo-releases) which is defined in
[`electron.vite.config.ts`](electron/electron.vite.config.ts):
```typescript
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")
}
}
})
```
## Project Structure
```
backend/ # Python backend (EXIF processing and file renaming, License Management)
electron/ # Electron frontend (Vite, React, TailwindCSS)
```
### License Management
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
Copyright (c) codeofandrin
This source code is licensed under the MIT license found in the
[LICENSE](LICENSE) file in the root directory of this source tree.
