Fover is an app for your self-hosted photo server that lets you manage and view your photos all in one place, thanks to a clean and intuitive interface. Your photos are automatically synced across all your devices via your own private server, without relying on a third-party cloud service, which means your memories will always be within reach.
- Synchronize data between all your devices
- Edit your photos and videos (crop, rotate, add filters, etc)
- Create albums and organize your photos
- Hide your photos with a password or a biometric lock
- Search your photos by date, location, or content
- The Text Recognition feature is only available on iOS devices.
- View your photos on a map based on their geolocation data
- Liquid Glass on iOS 26+
- Windows and macOS support
- Swipe cards to quickly navigate through your photos
- Import your photos from other services (Google Photos, iCloud, etc)
- Compatibility with Freebox
- Share your photos with friends and family through private links
Please check the release page
Requires Docker
It won't take more than 10 minutes.
Note: The following instructions are for setting up Copyparty, a self-hosted file server, to serve your medias.
- Create the "Fover" directory and a subdirectory "FoverServer"
mkdir -p Fover/FoverServer- Create a docker-compose.yml file in the "Fover" directory with the following content:
services:
copyparty:
image: copyparty/ac:latest
container_name: copyparty
restart: unless-stopped
ports:
- "3923:3923"
volumes:
- /path/to/Fover/FoverServer:/mnt/photos
- /opt/copyparty/config:/cfg
command: >
-v /mnt/photos:photos:rwdgr,you
-a you:yourPassword
-e2dsa
--no-robots
# Change "you" to your username and "yourPassword" to a secure password- Create a docker-compose.yml file in the "Fover" directory with the following content:
services:
copyparty:
build:
context: .
dockerfile: Dockerfile
container_name: copyparty
restart: unless-stopped
ports:
- "3923:3923"
volumes:
- /path/to/Fover/FoverServer:/mnt/photos
- /opt/copyparty/config:/cfg
command:
- "-v"
- "/mnt/photos:photos:rwdgr,you"
- "--th-size"
- "300x300"
- "--th-ff-jpg"
- "--th-poke"
- "1"
- "--th-dec"
- "vips,ff"
- "-a"
- "you:yourPassword"
- "-e2dsa"
- "-e2ts"
- "--no-robots"
# Change "you" to your username and "yourPassword" to a secure password
Create a Dockerfile in the same directory with the following content:
FROM debian:bookworm-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends \
python3 \
python3-pip \
ffmpeg \
libvips \
libheif1 && \
rm -f /usr/lib/python3.*/EXTERNALLY-MANAGED && \
pip3 install --no-cache-dir copyparty pyvips && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["copyparty"]- Start the Copyparty server with the following command in the "Fover" directory:
docker-compose up -dNow we have to make it accessible from the Internet.
For that, you have two options:
Configure your router to forward incoming traffic on a specific port (e.g., 3923) to the local IP address of the machine running Copyparty. This allows you to access your server using your public IP address and the forwarded port.
- Find your local IP address
ip route get 1.1.1.1 | grep -oP 'src \K\S+'- Open the port on your router
Access your router's admin interface usually http://192.168.0.1 or http://192.168.1.1 and create a port forwarding rule:
| Field | Value |
|---|---|
| Destination IP | Your server's local IP (see above) |
| External port | 3923 |
| Internal port | 3923 |
| Protocol | TCP |
You can now log in to the app by entering http://your-public-ip:3923 in the IP Address field.
If your ISP blocks port forwarding, Cloudflare Tunnel is an alternative that requires no open ports.
⚠️ Privacy notice: Unlike port forwarding, your photos will transit through Cloudflare's servers. Cloudflare states they do not analyze your content, but they technically have access to your data. Use this option only if port forwarding is not possible.
Download cloudflared and run:
cloudflared tunnel --url http://127.0.0.1:3923A temporary URL will be displayed in the terminal (e.g. https://random-words.trycloudflare.com).
Copy it into Fover as your server address.
⚠️ This URL changes every time you restart the tunnel. You will need to update it in Fover each time.
A permanent tunnel gives you a fixed URL (e.g. https://photos.mydomain.com) that never changes.
1. Create the tunnel
Go to one.dash.cloudflare.com → Networks → Tunnels → Create a tunnel.
Select Cloudflared, give it a name (e.g. fover-tunnel), and save. Copy the token displayed.
2. Add cloudflared to your docker-compose.yml and update the Copyparty command
services:
# Your existing copyparty service
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=your_token_hereReplace
your_token_herewith the token displayed in the Cloudflare dashboard.
3. Configure the public hostname
In the Cloudflare dashboard, under Public Hostname:
| Field | Value |
|---|---|
| Subdomain | photos |
| Domain | mydomain.com |
| Service Type | HTTP |
| URL | copyparty:3923 |
Use
copyparty(the Docker service name) instead oflocalhost.
4. Start
docker-compose up -dYour server is now accessible at https://photos.mydomain.com. HTTPS is handled automatically by Cloudflare — no certificate needed.