Ente - SeaweedFS S3
End-to-end encrypted photo storage, with SeaweedFS for the files
- ghcr.io/hsinghhira/ente-seaweedfs:latest
- port 6660
- port 6661
- port 6662
- port 6663
- port 6664
- port 6665
- port 6666
- port 6667
- port 6668
- port 6669
- port 6670
- port 6671
- port 6672
- Media




Web App
/http://localhost:6660/ API Server
:6661/http://localhost:6661/ Public Albums
:6662/http://localhost:6662/ Mail Server
:6664/mail/http://localhost:6664/mail/ Accounts
:6665/http://localhost:6665/ Auth
:6666/http://localhost:6666/ Cast
:6667/http://localhost:6667/ Public Locker
:6668/http://localhost:6668/ Embed
:6669/http://localhost:6669/ Paste
:6670/http://localhost:6670/ Locker
:6671/http://localhost:6671/ Public Memories
:6672/http://localhost:6672/ Ente is a self-hosted, end-to-end encrypted place to store, share and rediscover your photos and videos on all your devices. This is Ente in a single container, with PostgreSQL, SeaweedFS, an open-source object store built for very many files, and a mail viewer for sign-up codes inside. Secret keys and passwords are made for you on first start.
Features
- End-to-end encryption for every photo and video
- All ten Ente web apps, each on its own port: Photos, Public Albums, Accounts, Auth, Cast, Locker, Public Locker, Embed, Paste and Public Memories
- Works with the Ente phone and desktop apps
- SeaweedFS for S3-compatible photo storage, fast even with millions of files
- Built-in mail viewer on port 6664 for sign-up codes, or use your own email server
- No 10 GB limit: every account gets 100 TB by default
How to use
- Open Ente - SeaweedFS S3 from your dashboard.
- Sign up with your email and a password.
- Open the mail viewer at
http://your-zimaos-ip:6664to read your sign-up code. - Type the code to finish signing up.
- In the Ente phone app, tap the first screen 7 times and set the server to
http://your-zimaos-ip:6661. - Upload photos and share albums.
Server address for the apps
The Ente phone and desktop apps need the API address: http://your-zimaos-ip:6661. On the first screen of the app, tap 7 times, then type that address as the server. If you set ENTE_API_URL (your own domain), use that instead.
Ports
Every app has its own port on your ZimaOS address, counted up from the Web App's port (6660):
| Port | App |
|---|---|
| 6660 | Web App (Ente Photos). The mail viewer also answers at /mail/ here |
| 6661 | Ente API - the server address for the phone and desktop apps |
| 6662 | Public Albums (shared album links) |
| 6663 | Photo storage (SeaweedFS S3) |
| 6664 | Mail viewer for sign-up codes and other Ente emails |
| 6665 | Accounts app (passkeys and family invites) |
| 6666 | Ente Auth web app (your two-factor codes) |
| 6667 | Cast app (show albums on a TV) |
| 6668 | Public Locker (shared Locker links) |
| 6669 | Embed app (albums inside other web pages) |
| 6670 | Ente Paste (share text that deletes itself) |
| 6671 | Ente Locker web app (store important documents) |
| 6672 | Public Memories (shared memory links) |
The Family, Space and Legacy web apps are not in this image. Ente's own copies are used unless you set ENTE_APPS_FAMILY, ENTE_APPS_SPACE or ENTE_APPS_LEGACY to your own.
Passkeys need the Accounts app on https with a domain name; browsers refuse them on a plain IP address.
Before you install
Change localhost in PUBLIC_URL to your ZimaOS IP, like http://192.168.1.20:6660; phones cannot use localhost. The other apps use the next ports on that address (see Ports above); the phone and desktop apps need the API on 6661. The first start takes about three minutes. Sign-up codes go to the mail viewer on port 6664: open the app logs, scroll to the top and find the line that says "mail viewer login" for its password. To send real email instead, and for the other settings, see the Variables tab; add them in the app settings. If you put Ente behind your own domains, set ENTE_API_URL, ENTE_S3_URL and the ENTE_APPS_* addresses too.
Updating from the old ports (6137-6140)? Your install keeps working as it is. To get the new apps' ports, reinstall the app, or change the ports and PUBLIC_URL to 6660 and up.
The settings in the first table are already in the app settings. To use any other one, open the app settings, add the variable with your value, save, and the app restarts with it. A setting you leave out uses its default.
In the app settings
| Variable | Default value | Description |
|---|---|---|
TZ | $TZ | Your time zone. It is filled in from your ZimaOS time zone. Leave it unless you need another. |
PUBLIC_ | http://localhost:6660 | The address of the Web App, like http://your-zimaos-ip:6660. Change localhost to your ZimaOS IP, or phones and other computers cannot use Ente. The other apps use the same address with the next ports: 6661 API, 6662 Public Albums, 6663 photo storage, 6664 mail viewer, and 6665 to 6672 for Accounts, Auth, Cast, Public Locker, Embed, Paste, Locker and Public Memories. |
Addresses
| Variable | Default value | Description |
|---|---|---|
ENTE_ | — | The API address, if you put it behind your own domain, like https://api.photos.example.com. Leave it out to use PUBLIC_URL's host with port 6661. |
ENTE_ | — | The Public Albums address for shared links, if you put it behind your own domain, like https://albums.example.com. Leave it out to use PUBLIC_URL's host with port 6662. |
ENTE_ | — | The photo storage address, like https://s3.example.com. Phones upload here, so it must be reachable from them. Leave it out to use PUBLIC_URL's host with port 6663. |
ENTE_ | — | The Accounts app address (passkeys, family invites), if you put it behind your own domain, like https://accounts.example.com. Leave it out to use PUBLIC_URL's host with port 6665. |
ENTE_ | — | The Cast app address, if you put it behind your own domain, like https://cast.example.com. Leave it out to use PUBLIC_URL's host with port 6667. |
ENTE_ | — | The Public Locker address for shared Locker links, if you put it behind your own domain, like https://share.example.com. Leave it out to use PUBLIC_URL's host with port 6668. |
ENTE_ | — | The Embed app address, if you put it behind your own domain, like https://embed.example.com. Leave it out to use PUBLIC_URL's host with port 6669. |
ENTE_ | — | The Ente Paste address, if you put it behind your own domain, like https://paste.example.com. Leave it out to use PUBLIC_URL's host with port 6670. |
ENTE_ | — | The Public Memories address for shared memories, if you put it behind your own domain, like https://memories.example.com. Leave it out to use PUBLIC_URL's host with port 6672. |
ENTE_ | https://family.ente.io | The Family web app address. It is not in this image, so it stays Ente's unless you host your own copy. |
ENTE_ | https://ente.space | The Space web app address. It is not in this image, so it stays Ente's unless you host your own copy. |
ENTE_ | https://legacy.ente.com | The Legacy recovery web app address. It is not in this image, so it stays Ente's unless you host your own copy. |
ENTE_ | https://accounts.ente.io | The old Accounts address, only used to move passkeys made there. Most people leave it out. |
ENTE_ | — | The domain passkeys belong to, like example.com. Leave it out to use the Accounts app's host. Passkeys only work on https with a domain, not an IP address. |
Sign-up and accounts
| Variable | Default value | Description |
|---|---|---|
ENTE_ | false | Set to true so nobody new can sign up. Make your own account first. |
ENTE_ | — | The user id of the admin account, for the Ente command-line tool. |
Storage
| Variable | Default value | Description |
|---|---|---|
ENTE_ | 102400 | Storage for every account in GB (102400 is 100 TB). Set to 0 to keep Ente's normal 10 GB plan. |
Email (SMTP)
| Variable | Default value | Description |
|---|---|---|
ENTE_ | — | Your mail server, like smtp.gmail.com, to send sign-up codes by real email. Leave it out to use the built-in mail viewer at /mail/. |
ENTE_ | 587 | The mail server port. Usually 587, or 465 for SSL. |
ENTE_ | — | The user name for your mail server. |
ENTE_ | — | The password for your mail server. |
ENTE_ | [email protected] | The sender address. Your mail server may only accept its own address. |
ENTE_ | Ente | The sender name on the emails. |
ENTE_ | — | Set to ssl for a mail server that uses SSL from the start (port 465 sets this for you). Leave it out for 587. |
Mail viewer
| Variable | Default value | Description |
|---|---|---|
MP_ | — | Your own mail viewer login as user:password. Leave it out to use admin with the password from the app log. |
name: ente-seaweedfs
services:
ente-seaweedfs:
image: ghcr.io/hsinghhira/ente-seaweedfs:latest
container_name: ente-seaweedfs
restart: unless-stopped
stop_grace_period: 90s
privileged: true
environment:
- TZ=$TZ
- PUBLIC_URL=http://localhost:6660
ports:
- target: 8080
published: "6660"
protocol: tcp
- target: 8081
published: "6661"
protocol: tcp
- target: 8082
published: "6662"
protocol: tcp
- target: 8083
published: "6663"
protocol: tcp
- target: 8104
published: "6664"
protocol: tcp
- target: 8105
published: "6665"
protocol: tcp
- target: 8106
published: "6666"
protocol: tcp
- target: 8107
published: "6667"
protocol: tcp
- target: 8108
published: "6668"
protocol: tcp
- target: 8109
published: "6669"
protocol: tcp
- target: 8110
published: "6670"
protocol: tcp
- target: 8111
published: "6671"
protocol: tcp
- target: 8112
published: "6672"
protocol: tcp
volumes:
- type: bind
source: /DATA/AppData/$AppID/data
target: /data
bind:
create_host_path: true
healthcheck:
test: ["CMD", "curl", "-fsS", "-o", "/dev/null", "http://127.0.0.1:8080/ping"]
interval: 30s
timeout: 10s
retries: 5
start_period: 180s
deploy:
resources:
limits:
cpus: "2.00"
memory: 3072M
reservations:
cpus: "0.25"
memory: 512M
labels:
icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/icon.png
x-casaos:
id: com.icestore.ente-seaweedfs
envs:
- container: TZ
description:
en_US: >-
Your time zone. It is filled in from your ZimaOS time zone.
Leave it unless you need another.
- container: PUBLIC_URL
description:
en_US: >-
The address of the Web App, like
http://your-zimaos-ip:6660. Change localhost to your ZimaOS
IP, or phones and other computers cannot use Ente. The other
apps use the same address with the next ports: 6661 API,
6662 Public Albums, 6663 photo storage, 6664 mail viewer,
and 6665 to 6672 for Accounts, Auth, Cast, Public Locker,
Embed, Paste, Locker and Public Memories.
ports:
- container: "8080"
description:
en_US: Web App (Ente Photos), published on host as 6660
- container: "8081"
description:
en_US: Ente API - the server address for the phone and desktop apps, published on host as 6661
- container: "8082"
description:
en_US: Public Albums (shared album links), published on host as 6662
- container: "8083"
description:
en_US: >-
Photo storage (SeaweedFS S3). Phones and browsers upload and
download your encrypted files here, published on host as 6663
- container: "8104"
description:
en_US: Mail viewer for sign-up codes and other Ente emails, published on host as 6664
- container: "8105"
description:
en_US: Accounts app (passkeys and family invites), published on host as 6665
- container: "8106"
description:
en_US: Ente Auth web app (your two-factor codes), published on host as 6666
- container: "8107"
description:
en_US: Cast app (show albums on a TV), published on host as 6667
- container: "8108"
description:
en_US: Public Locker (shared Locker links), published on host as 6668
- container: "8109"
description:
en_US: Embed app (albums inside other web pages), published on host as 6669
- container: "8110"
description:
en_US: Ente Paste (share text that deletes itself), published on host as 6670
- container: "8111"
description:
en_US: Ente Locker web app (store important documents), published on host as 6671
- container: "8112"
description:
en_US: Public Memories (shared memory links), published on host as 6672
volumes:
- container: /data
description:
en_US: >-
Your encrypted photos and videos (SeaweedFS), the database,
secret keys and settings.
x-casaos:
id: com.icestore.ente-seaweedfs
architectures:
- amd64
- arm64
main: ente-seaweedfs
author: HSinghHira
category: Media
developer: ente-io
icon: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/icon.png
thumbnail: https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/screenshot-1.png
screenshot_link:
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/screenshot-1.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/screenshot-2.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/screenshot-3.png
- https://cdn.jsdelivr.net/gh/HSinghHira/IceStore@main/Apps/ente-seaweedfs/screenshot-4.png
title:
en_US: Ente - SeaweedFS S3
tagline:
en_US: End-to-end encrypted photo storage, with SeaweedFS for the files
description:
en_US: >-
Ente is a self-hosted, end-to-end encrypted place to store, share and
rediscover your photos and videos on all your devices. This is Ente in
a single container, with PostgreSQL, SeaweedFS, an open-source object store built for very many files, and a mail viewer
for sign-up codes inside. Secret keys and passwords are made for you on
first start.
**Features**
- End-to-end encryption for every photo and video
- All ten Ente web apps, each on its own port: Photos, Public
Albums, Accounts, Auth, Cast, Locker, Public Locker, Embed,
Paste and Public Memories
- Works with the Ente phone and desktop apps
- SeaweedFS for S3-compatible photo storage, fast even with millions of files
- Built-in mail viewer on port 6664 for sign-up codes, or use your
own email server
- No 10 GB limit: every account gets 100 TB by default
**How to use?**
1. Open Ente - SeaweedFS S3 from the Zima OS dashboard.
2. Sign up with your email and a password.
3. Open the mail viewer on port 6664 to read your sign-up code.
4. Type the code to finish signing up.
5. In the Ente phone app, tap the first screen 7 times and set the
server to http://your-zimaos-ip:6661.
6. Upload photos and share albums.
tips:
before_install:
en_US: >-
1. Open the app configuration before you install.
2. Find PUBLIC_URL. Change localhost to your ZimaOS IP, for example
http://192.168.1.20:6660 (your own IP will differ). Phones
cannot use localhost.
3. More settings, like your own email server and sign-up, are listed
on the Ente - SeaweedFS S3 page at
https://icestore.hsinghhira.me/app/ente-seaweedfs/ (Variables tab). You
can add them now or later in the app settings.
4. Start the installation.
5. Wait about three minutes. The first start sets up the database.
6. Open the app logs and scroll to the top. Find the line that says
"mail viewer login". Write down the password.
7. Open http://your-zimaos-ip:6660 in your browser. Sign up with
your email and a password.
8. Open http://your-zimaos-ip:6664 in a new tab. Sign in
as admin with the mail password. Copy the code from the email.
9. Type the code in Ente to finish signing up.
10. For the phone app: tap the first screen 7 times. Set the server
to http://your-zimaos-ip:6661 and sign in.
index: /
port_map: "6660"
scheme: http
is_uncontrolled: false
version: "20fb631"
update_at: "2026-10-27"
release_notes:
en_US: |-
- New ports: 6660 Web App, 6661 API, 6662 Public Albums, 6663 photo storage,
6664 mail viewer, 6665-6672 the other web apps
- Adds the Accounts (passkeys), Auth, Cast, Public Locker, Embed, Paste, Locker
and Public Memories apps, and tells the Ente server where each one is
- Mail viewer has its own port; /mail/ on the Web App still works
- Old installs on 6137-6140 keep working: every address counts up from
PUBLIC_URL's port. Reinstall to get the new apps' ports
- New settings ENTE_APPS_* (Ente's own names); ENTE_ALBUMS_URL still works
- Single-container Ente with SeaweedFS storage and one data folder
- Database, storage and museum keys are made on first start, so each install gets its own
- Sign-up codes go to the built-in mail viewer unless you set your own email server
- Every account gets 100 TB instead of Ente's 10 GB (ENTE_AIO_STORAGE_GB)
- server 20fb631, web 817ce84 (Ente only publishes commit tags; they follow latest)
- seaweedfs 4.48, mailpit v1.32.0, PostgreSQL 15
repo: "https://github.com/ente/ente"
support: "https://github.com/ente/ente/issues"
docs: "https://ente.com/help/self-hosting/"