Do everything, music, 3d models, images, videos with a simple claude pro subscription.
740
A self-hosted creative workspace in one container: music, images, 3D models, video, browser games, Android apps, Windows programs, web apps and WordPress sites, built by an AI coding agent that runs with each user's own AI account.
| ๐ฆ Source code, issues, releases | github.com/bugfishtm/ai-everythingโ |
| ๐ Documentation with screenshots | bugfishtm.github.io/ai-everythingโ |
| ๐ฌ Support | GitHub Issuesโ ยท Discordโ |
| ๐ License | GNU GPL v3.0 |
Note
ai-everything is independent open-source software. It is **not affiliated with or endorsed by Anthropic**, OpenAI, Google or the WordPress Foundation. Claude Code is Anthropic's proprietary software and is **not included** in this image. It is downloaded from its official source at the first start and used with each person's own account.
Warning
This software contains code written with the help of AI. Review and test it in an isolated environment before you deploy it. It is provided as-is and you use it at your own risk.
8080studio-daw), a 3D editor (studio-3d), studio-image, studio-video and studio-stickman8081 / 8443 that publishes projects on your own domains, with HTTPS certificates from Let's Encrypt requested and renewed by itselfDownloaded at runtime, not part of the image: Claude Code, the other AI agents (OpenAI Codex, Gemini CLI, OpenCode), the Android SDK (after an admin accepts Google's license) and WordPress.
| Platform | linux/amd64 (x86-64) |
| Memory | 4 GB minimum, 8 GB or more recommended |
| Disk | About 15 GB |
| Internet | Required at the first start |
| AI account | Each user's own (Claude subscription or API key, or another AI the admin switched on) |
docker run -d --name ai-everything \
-p 127.0.0.1:8080:8080 -p 127.0.0.1:8081:8081 -p 127.0.0.1:8443:8443 \
--shm-size=1g --restart unless-stopped \
-v studio-data:/data -v studio-db:/var/lib/mysql \
bugfishtm/ai-everything:latest
Open http://localhost:8080โ . The first account you create becomes the administrator. Then connect your AI under Account & AI.
A ready-to-use docker-compose.yml and .env are below the variable tables: Deploy with Docker Composeโ .
| Option | Why |
|---|---|
--shm-size=1g | The headless Chromium needs more shared memory than Docker's 64 MB default. |
--stop-timeout 30 | Gives running AI turns and the database time to shut down cleanly. |
--security-opt no-new-privileges:true | Nothing inside may gain privileges it was not started with. |
--pids-limit 16384 | A runaway program of one user cannot exhaust the host. |
| Container port | Purpose |
|---|---|
8080 | The Studio website and API. |
8081 | Published websites, games and WordPress sites of projects, chosen by the domain in the request (HTTP). |
8443 | The same websites over HTTPS, with one certificate per domain. Can also serve the Studio itself under STUDIO_DOMAIN. |
Bind to 127.0.0.1 for a single computer. On a public server map 80 โ 8081 and 443 โ 8443, set SITES_PORT=80 and SITES_HTTPS_PORT=443, and keep 8080 on 127.0.0.1 (reach the Studio over HTTPS under STUDIO_DOMAIN).
Everything persistent lives in two volumes. They survive updates, container re-creation and docker compose down. Only docker compose down -v or docker volume rm deletes them.
| Mount point | Suggested name | Contents |
|---|---|---|
/data | studio-data | Projects, the asset library, packs, user home folders (AI sign-ins and settings), runtime downloads (Claude Code, other agents, the Android SDK, WordPress), website certificates and the Studio's internal state. |
/var/lib/mysql | studio-db | The built-in database: users, projects, settings and one database per WordPress site. Not used when MYSQL_HOST points to an external server. |
Use named volumes, not bind mounts from Windows or macOS folders: the Studio sets Linux owners and permissions per user, which those file systems don't keep.
Backups: back up both volumes together, ideally with the container stopped, or use scripts/backup.sh from the repository (database dump + data volume).
Every variable is optional. Without any, the Studio runs with the defaults below.
| Variable | Default | Description |
|---|---|---|
APP_NAME | Everything Studio | Name shown on the website. |
PUBLIC_URL | (empty) | Public address when running behind a reverse proxy or on a domain, e.g. https://studio.example.com. Used for origin checks. |
TRUST_PROXY | false | true when a reverse proxy (Caddy, nginx, Traefik) sits in front of the Studio. |
COOKIE_SECURE | auto | true = cookies only over HTTPS, false = never secure, auto = decide per request. |
REGISTRATION | closed | open = anyone who reaches the site may register. closed = admins add users. |
APP_SECRET | (generated) | Encrypts stored keys and certificates and signs preview links. 48+ random characters. Left empty, one is generated at the first start and kept in /data. Never change it afterwards. |
Optional. Without these, the first person who opens the website creates the admin account (from the internet that needs the setup code printed in the container log: docker logs ai-everything | grep "setup code").
| Variable | Default | Description |
|---|---|---|
ADMIN_EMAIL | (empty) | E-mail of the admin account created at the first start. |
ADMIN_USERNAME | admin | User name of that account. |
ADMIN_PASSWORD | (empty) | Password of that account. Use a long one and change it on the website later. |
| Variable | Default | Description |
|---|---|---|
CLAUDE_CODE_VERSION | latest | latest keeps Claude Code up to date (checked at start and daily). An exact version such as 2.1.319 pins it. |
CLAUDE_CODE_AUTO_INSTALL | true | Download Claude Code from npm at the first start. |
CLAUDE_CODE_AUTO_UPDATE | true | Keep it updated. |
DEFAULT_PERMISSION_MODE | bypass | What the AI may do without asking in new projects: bypass (autonomous, sandboxed per user), acceptEdits, ask or plan. |
DEFAULT_MODEL | (empty) | Default model alias for everybody (fable, opus, sonnet, haiku). Empty = the account's default. |
AGENTS | (empty) | More AIs switched on at the first start, comma separated: codex,gemini,opencode. Admins can also do this in Admin โ AI providers. |
AGENTS_AUTO_UPDATE | true | Keep the other agents updated. |
AGENT_IDLE_MINUTES | 10 | How long an AI process stays up between messages of a chat. |
| Variable | Default | Description |
|---|---|---|
MAX_RUNS_PER_USER | 2 | AI runs one user may have at the same time. |
MAX_TERMINALS_PER_USER | 4 | Open terminals per user. |
RUN_TIMEOUT_MINUTES | 60 | Longest AI run. |
TERMINAL_IDLE_MINUTES | 30 | Idle terminals are closed after this time. |
UPLOAD_LIMIT_MB | 500 | Largest upload. |
TRASH_DAYS | 7 | Deleted projects stay in the trash this long. |
PACK_LIMIT_MB | 4096 | Largest pack. |
RELEASE_EXPORTS_MB | 1024 | Largest exports/ folder kept with a release (versioning). |
Projects can run their own Node.js servers (multiplayer, saves, APIs), each as the owner's sandbox user, reachable at <Studio address>/srv/<name>/.
| Variable | Default | Description |
|---|---|---|
SERVICES_ENABLED | true | Allow project servers. |
MAX_SERVICES_PER_USER | 3 | Servers per user. |
SERVICE_MEMORY_MB | 512 | Memory per server. |
| Variable | Default | Description |
|---|---|---|
SITES_ENABLED | true | Publish web apps, games and WordPress sites on the website ports. |
SITES_PORT | 8081 | The port users see for websites over HTTP (set 80 on a public server). |
SITES_TLS | true | Built-in HTTPS with one certificate per domain. false = plain HTTP only (e.g. behind your own proxy). |
SITES_HTTPS_PORT | 8443 | The port users see for websites over HTTPS (set 443 on a public server). |
SITES_HTTPS | false | true when your own proxy terminates TLS in front. The built-in HTTPS then switches itself off. |
STUDIO_DOMAIN | (empty) | Serve the Studio itself over HTTPS under this host name (also settable in Admin โ HTTPS). |
SITES_BASE_DOMAIN | (empty) | Every website also gets <name>.<base domain>. Needs a wildcard DNS record. Use a domain of its own, not a subdomain of the Studio's. |
MAX_SITES_PER_USER | 10 | Websites per user. |
SITE_MAX_MB | 500 | Largest website. |
ACME_EMAIL | (empty) | Contact e-mail for the certificate authority. |
ACME_AGREE_TOS | (empty) | yes accepts the certificate authority's terms here instead of in Admin โ HTTPS. |
ACME_DIRECTORY_URL | (empty) | Another ACME certificate authority instead of Let's Encrypt. |
ACME_ORDERS_PER_HOUR | 40 | New certificate orders per hour for the whole Studio. |
Each WordPress project is a real site with its own database and its own PHP, running as the owner's sandbox user. WordPress itself is downloaded from wordpress.org when a site is set up.
| Variable | Default | Description |
|---|---|---|
WORDPRESS_ENABLED | true | Enable the WordPress area. |
MAX_WORDPRESS_PER_USER | 5 | WordPress sites per user. |
WORDPRESS_MEMORY_MB | 256 | PHP memory limit per site. |
WORDPRESS_MAX_WORKERS | 6 | PHP worker processes per site. |
WORDPRESS_UPLOAD_MB | 64 | Largest upload in WordPress. |
WORDPRESS_IDLE_MINUTES | 60 | Stop a site's PHP after this many minutes without visitors (0 = keep running). |
WORDPRESS_PHP_HARDENING | true | A site's PHP can only reach its project folder and has no shell functions. |
WORDPRESS_DB_ADMIN_USER | (empty) | Only with an external database: an account that may create databases and users. |
WORDPRESS_DB_ADMIN_PASSWORD | (empty) | Its password. |
Installed at runtime into /data, never baked into the image. Normally an admin installs it in Admin โ Android SDK and accepts Google's license there.
| Variable | Default | Description |
|---|---|---|
ANDROID_SDK_ACCEPT_LICENSE | (empty) | Accepting Google's Android SDK termsโ for unattended setups. |
ANDROID_SDK_AUTO_INSTALL | false | Install the SDK at the first start. |
ANDROID_SDK_PACKAGES | (empty) | Explicit packages instead of the newest stable ones, e.g. platform-tools platforms/android-36 build-tools/36.0.0. |
Leave MYSQL_HOST empty to use the built-in database.
| Variable | Default | Description |
|---|---|---|
MYSQL_HOST | (empty) | Host of an external MySQL / MariaDB server. |
MYSQL_PORT | 3306 | Its port. |
MYSQL_DATABASE | studio | Database name. |
MYSQL_USER | studio | User name. |
MYSQL_PASSWORD | (empty) | Password. |
Create a folder with these two files, edit .env, then run:
docker compose up -d
docker compose logs -f studio
docker-compose.ymlname: ai-everything
services:
studio:
image: bugfishtm/ai-everything:latest
restart: unless-stopped
ports:
# the Studio website
- "${STUDIO_BIND:-127.0.0.1}:${STUDIO_PORT:-8080}:8080"
# published websites of projects (HTTP and HTTPS)
- "${SITES_BIND:-127.0.0.1}:${SITES_PORT:-8081}:8081"
- "${SITES_BIND:-127.0.0.1}:${SITES_HTTPS_PORT:-8443}:8443"
env_file: .env
environment:
# the ports users see in website addresses (the container ports above stay 8081/8443)
SITES_PORT: ${SITES_PORT:-8081}
SITES_HTTPS_PORT: ${SITES_HTTPS_PORT:-8443}
volumes:
- studio-data:/data
- studio-db:/var/lib/mysql
# headless Chromium needs more shared memory than Docker's 64 MB default
shm_size: "1gb"
# time for AI runs and the database to shut down cleanly
stop_grace_period: 30s
security_opt:
- no-new-privileges:true
pids_limit: ${STUDIO_PIDS_LIMIT:-16384}
logging:
driver: json-file
options:
max-size: "20m"
max-file: "5"
volumes:
studio-data:
studio-db:
.env (local computer or home network)# --- Ports -------------------------------------------------------------------
# 127.0.0.1 = only this computer, 0.0.0.0 = reachable from your network
STUDIO_BIND=127.0.0.1
STUDIO_PORT=8080
SITES_BIND=127.0.0.1
SITES_PORT=8081
SITES_HTTPS_PORT=8443
# --- Website -----------------------------------------------------------------
APP_NAME=Everything Studio
REGISTRATION=closed
# --- First admin (optional: otherwise the first person to register is admin) --
ADMIN_EMAIL=
ADMIN_USERNAME=admin
ADMIN_PASSWORD=
# --- AI ----------------------------------------------------------------------
CLAUDE_CODE_VERSION=latest
DEFAULT_PERMISSION_MODE=bypass
DEFAULT_MODEL=
# more AIs switched on at the first start, e.g. codex,gemini,opencode
AGENTS=
# --- Limits ------------------------------------------------------------------
MAX_RUNS_PER_USER=2
MAX_TERMINALS_PER_USER=4
MAX_SERVICES_PER_USER=3
MAX_SITES_PER_USER=10
MAX_WORDPRESS_PER_USER=5
UPLOAD_LIMIT_MB=500
STUDIO_PIDS_LIMIT=16384
Then open http://localhost:8080โ .
.env (public server with HTTPS)Use the same docker-compose.yml. Point the DNS record of STUDIO_DOMAIN at the server and open ports 80 and 443 in the firewall.
# --- Ports: websites and HTTPS on 80/443, the Studio's own port stays local ----
STUDIO_BIND=127.0.0.1
STUDIO_PORT=8080
SITES_BIND=0.0.0.0
SITES_PORT=80
SITES_HTTPS_PORT=443
# --- The Studio's own address (served over HTTPS on port 443) -----------------
STUDIO_DOMAIN=studio.example.com
PUBLIC_URL=https://studio.example.com
COOKIE_SECURE=true
# --- Let's Encrypt -------------------------------------------------------------
[email protected]
ACME_AGREE_TOS=yes
# --- First admin -----------------------------------------------------------------
[email protected]
ADMIN_USERNAME=admin
ADMIN_PASSWORD=
REGISTRATION=closed
# --- Optional: every website gets <name>.apps.example.com (wildcard DNS record) ---
SITES_BASE_DOMAIN=
# --- Limits worth a look on a shared server -------------------------------------
MAX_RUNS_PER_USER=2
MAX_SERVICES_PER_USER=3
MAX_SITES_PER_USER=10
MAX_WORDPRESS_PER_USER=5
STUDIO_PIDS_LIMIT=16384
Wait for certificate for studio.example.com issued in the log, then open https://studio.example.com. Any variable from the tables above can be added to .env.
docker run -d --name ai-everything \
-p 127.0.0.1:8080:8080 -p 80:8081 -p 443:8443 \
--shm-size=1g --restart unless-stopped \
-e STUDIO_DOMAIN=studio.example.com \
-e PUBLIC_URL=https://studio.example.com \
-e SITES_PORT=80 -e SITES_HTTPS_PORT=443 \
-e COOKIE_SECURE=true \
-e [email protected] -e ACME_AGREE_TOS=yes \
-v studio-data:/data -v studio-db:/var/lib/mysql \
bugfishtm/ai-everything:latest
*.apps.example.com) together with SITES_BASE_DOMAIN.certificate for studio.example.com issued, then open https://studio.example.com.Behind your own reverse proxy instead: route the Studio's host name to 8080 and every other host name to 8081, pass Host, X-Forwarded-* and WebSocket upgrades, and set TRUST_PROXY=true, PUBLIC_URL and SITES_HTTPS=true. Full guide: Server & HTTPSโ .
docker pull bugfishtm/ai-everything:latest
docker stop ai-everything && docker rm ai-everything
# run the same docker run command again โ the volumes keep all data
With Compose: docker compose pull && docker compose up -d.
The image has a built-in health check on http://127.0.0.1:8080/api/health. The first start can take a minute or two while the database initializes and Claude Code is downloaded.
What you make is yours. The GPL-3.0 covers the Studio itself, not the songs, pictures, models, games, apps and sites you create with it.
๐ Bugfish ยท GitHubโ ยท Documentationโ ยท Security issues: [email protected]โ
Content type
Image
Digest
sha256:8b4a7cc2bโฆ
Size
2 GB
Last updated
about 20 hours ago
docker pull bugfishtm/ai-everything