easonbobs/omniflow

By easonbobs

Updated 12 days ago

统一多模态 AI 工作台

Image
Networking
Machine learning & AI
Developer tools
1

1.3K

easonbobs/omniflow repository overview

OmniFlow

OmniFlow is a self-hosted multi-modal AI workspace for text chat, image generation, video generation, API provider aggregation, model selection, prompt optimization, local history, user management, and Docker-based deployment.

Docker Hub: easonbobs/omniflow

Highlights

  • Unified workspace for text, image, and video generation.
  • OpenAI-compatible API profile management with per-user isolation.
  • Aggregated model list across multiple API providers.
  • Streaming text chat with reasoning options, retry, edit, markdown rendering, and copy actions.
  • Image and video generation with async task status, manual refresh, preview, download, and upstream error passthrough.
  • Prompt optimization workflow using selectable text models.
  • Local persistence for users, workspaces, chats, messages, generations, API profiles, settings, uploads, logs, and JWT secret.
  • Built-in multi-language UI and theme/skin support.
  • Docker Compose deployment with a sidecar updater that reuses the same OmniFlow image.

Supported Architectures

The official image is published as a multi-architecture image:

  • linux/amd64
  • linux/arm64

Tags

TagDescription
latestLatest stable image
v0.1.8Current stable release
v0.1.7Previous release
v0.1.6Previous release
v0.1.5Previous release
v0.1.4Previous release
v0.1.3Previous release
v0.1.2Previous release
v0.1.1Previous release

Recommended production usage:

docker pull easonbobs/omniflow:v0.1.8

Quick Start

Run OmniFlow with Docker:

docker run -d \
  --name omniflow \
  -p 3456:3456 \
  -v ./data:/app/data \
  -v ./logs:/app/logs \
  -e SUPER_ADMIN_USERNAME=admin \
  -e SUPER_ADMIN_PASSWORD=admin123456 \
  easonbobs/omniflow:v0.1.8

Open:

http://localhost:3456

Default login values are controlled by environment variables. Change SUPER_ADMIN_PASSWORD before exposing OmniFlow to the public internet.

Docker Compose

Recommended docker-compose.yml:

name: omniflow

services:
  omniflow:
    image: easonbobs/omniflow:v0.1.8
    container_name: omniflow
    ports:
      - "${OMNIFLOW_PORT:-3456}:3456"
    restart: unless-stopped
    environment:
      NODE_ENV: production
      PORT: 3456
      HOSTNAME: 0.0.0.0
      DATABASE_URL: ${OMNIFLOW_DATABASE_URL:-file:/app/data/omniflow.db}
      LOG_DIR: ${LOG_DIR:-/app/logs}
      OMNIFLOW_PUBLIC_URL: ${OMNIFLOW_PUBLIC_URL:-}
      OMNIFLOW_UPDATE_SERVICE_URL: ${OMNIFLOW_UPDATE_SERVICE_URL:-http://omniflow-updater:3001}
      OMNIFLOW_UPDATE_TOKEN: ${OMNIFLOW_UPDATE_TOKEN:-}
      JWT_SECRET: ${JWT_SECRET:-}
      JWT_SECRET_FILE: ${JWT_SECRET_FILE:-/app/data/jwt_secret}
      SESSION_MAX_AGE_SECONDS: ${SESSION_MAX_AGE_SECONDS:-604800}
      SUPER_ADMIN_USERNAME: ${SUPER_ADMIN_USERNAME:-admin}
      SUPER_ADMIN_PASSWORD: ${SUPER_ADMIN_PASSWORD:-admin123456}
      SUPER_ADMIN_NICKNAME: ${SUPER_ADMIN_NICKNAME:-SuperAdmin}
      DEFAULT_IMAGE_SIZE: ${DEFAULT_IMAGE_SIZE:-1024x1024}
      DEFAULT_IMAGE_QUALITY: ${DEFAULT_IMAGE_QUALITY:-medium}
      DEFAULT_IMAGE_FORMAT: ${DEFAULT_IMAGE_FORMAT:-png}
      DEFAULT_VIDEO_SIZE: ${DEFAULT_VIDEO_SIZE:-1024x1024}
      DEFAULT_VIDEO_DURATION: ${DEFAULT_VIDEO_DURATION:-5s}
    volumes:
      - ${OMNIFLOW_DATA_DIR:-./data}:/app/data
      - ${OMNIFLOW_LOGS_DIR:-./logs}:/app/logs

  omniflow-updater:
    image: easonbobs/omniflow:v0.1.8
    container_name: omniflow-updater
    entrypoint: ["node"]
    command: ["./scripts/update-server.mjs"]
    restart: unless-stopped
    environment:
      PORT: 3001
      OMNIFLOW_CONTAINER_NAME: ${OMNIFLOW_CONTAINER_NAME:-omniflow}
      OMNIFLOW_IMAGE_REPOSITORY: ${OMNIFLOW_IMAGE_REPOSITORY:-easonbobs/omniflow}
      OMNIFLOW_UPDATE_TOKEN: ${OMNIFLOW_UPDATE_TOKEN:-}
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Start:

docker compose up -d

View logs:

docker compose logs -f omniflow

Stop:

docker compose down

Environment Variables

VariableDescriptionDefault
OMNIFLOW_PORTHost port exposed by Docker Compose3456
OMNIFLOW_DATABASE_URLSQLite database URL inside the containerfile:/app/data/omniflow.db
OMNIFLOW_DATA_DIRHost data directory mounted to /app/data./data
OMNIFLOW_LOGS_DIRHost log directory mounted to /app/logs./logs
LOG_DIRLog directory inside the container/app/logs
LOG_FILE_ENABLEDEnable file loggingtrue
LOG_MAX_STRING_LENGTHMax logged string length before truncation8000
LOG_MAX_ARRAY_ITEMSMax logged array items before truncation50
OMNIFLOW_PUBLIC_URLPublic base URL for uploaded assets used by media APIsempty
OMNIFLOW_UPDATE_SERVICE_URLInternal updater service URLhttp://omniflow-updater:3001
OMNIFLOW_UPDATE_TOKENOptional token for internal update requestsempty
JWT_SECRETJWT signing secret. Leave empty to auto-generate one.empty
JWT_SECRET_FILEPersistent JWT secret file/app/data/jwt_secret
SESSION_MAX_AGE_SECONDSLogin session lifetime604800
SUPER_ADMIN_USERNAMEInitial super administrator usernameadmin
SUPER_ADMIN_PASSWORDInitial super administrator passwordadmin123456
SUPER_ADMIN_NICKNAMEInitial super administrator nicknameSuperAdmin
DEFAULT_IMAGE_SIZEDefault image generation size1024x1024
DEFAULT_IMAGE_QUALITYDefault image qualitymedium
DEFAULT_IMAGE_FORMATDefault image formatpng
DEFAULT_VIDEO_SIZEDefault video generation size1024x1024
DEFAULT_VIDEO_DURATIONDefault video duration5s

Persistent Data

Mount these directories for production deployments:

/app/data   SQLite database, uploads, JWT secret, local persistent data
/app/logs   File logs

The container automatically creates:

/app/data/uploads
/app/logs
/app/public/uploads -> /app/data/uploads

This allows uploaded files and generated media references to survive container rebuilds and updates.

API Configuration

OmniFlow does not require API keys in environment variables. Configure providers inside the application after login:

  1. Open system settings.
  2. Add one or more API profiles.
  3. Enter an OpenAI-compatible base URL and API key.
  4. Fetch models for that profile.
  5. Select models in text, image, video, and prompt optimization workflows.

API keys are stored server-side and are not exposed as plaintext runtime defaults in the frontend.

Logs

Runtime logs are available from both Docker stdout and persisted log files.

Docker logs:

docker logs -f omniflow

File logs:

tail -f ./logs/omniflow-$(date +%F).log

The file logger automatically redacts common sensitive fields such as API keys, tokens, cookies, sessions, JWT secrets, and passwords. It also truncates oversized strings, data URLs, buffers, and large arrays.

Automatic Updates

The Compose example includes an omniflow-updater sidecar service. It uses the same easonbobs/omniflow image as the main application but starts scripts/update-server.mjs instead of the web server.

When the About page detects a newer Docker Hub version, a super administrator can trigger an update from the UI. The updater pulls the selected image and recreates the main omniflow container while keeping mounted data and logs.

For production, set OMNIFLOW_UPDATE_TOKEN so internal update calls are protected.

Upgrade

Manual upgrade:

docker pull easonbobs/omniflow:v0.1.8
docker compose up -d

If you use latest:

docker pull easonbobs/omniflow:latest
docker compose up -d

Pinned version tags such as v0.1.8 are recommended for production so upgrades are explicit and repeatable.

Troubleshooting

Check container status:

docker ps -a | grep omniflow

Check application logs:

docker logs -f omniflow

Check persisted file logs:

ls -lah ./logs
tail -100 ./logs/omniflow-$(date +%F).log

If login fails after recreating a container, make sure /app/data is mounted and JWT_SECRET_FILE is persistent. If uploaded images or videos disappear, make sure /app/data/uploads is included in the mounted data directory.

Release Notes

v0.1.8
  • Added per-conversation model isolation so text, image, and video chats retain their selected model; system defaults now apply only to new conversations.
  • Added automatic database compatibility for conversation-model and default-model settings while preserving existing users, conversations, and history.
  • Fixed duplicate message records, overlapping edit states, and repeated submissions after editing failed messages; obsolete reply chains are now safely removed.
  • Improved expired-session handling with automatic login redirects and periodic revalidation without confusing upstream provider 401 responses with an expired OmniFlow session.
  • Improved container updates by polling the running version and automatically reloading after the new version is ready, with localized progress and error messages.
  • Fixed version checks returning stale Docker Hub tags by forcing real-time requests and disabling browser, reverse-proxy, and server-side response caching.
  • Standardized Simplified and Traditional Chinese Settings navigation labels for cleaner alignment and scanning.
v0.1.7
  • Added a dedicated Model Mapping menu with API-profile grouping and collapsible model lists.
  • Added model-level capability mapping so manually selected text, image, or video usage takes priority over keyword heuristics.
  • Added model-level interface type mapping and removed interface type from the API profile form.
  • Added text protocol gateway routing for OpenAI-compatible, Anthropic native, and Gemini OpenAI-compatible interfaces.
  • Treats Volcengine Ark as an OpenAI-compatible variant with /api/v3 normalization, while keeping room for Ark-specific media task routes.
  • Added routing entries for Google native media and Volcengine Ark content-generation tasks; actual image/video availability depends on the selected model and upstream API.
  • Improved image/video prompt references so referenced prompts stay in the reference area and are sent structurally instead of being injected into the active prompt text.
  • Refined Model Mapping interactions with a single combined selector and stable save-status layout to avoid list jumping.
  • Fixed composer toolbar stacking across text, image, and video prompts so send, model selection, parameter selection, and prompt optimization controls remain clickable.
v0.1.6
  • Added a local upload preview API so uploaded images in chat history can display and be reused through a safe proxy route.
  • Improved conversation switching with history-loading transitions for text, image, and video chats to prevent stale messages from flashing.
  • Optimized image and video resource loading with lazy image decoding and viewport-aware video source attachment.
  • Added QQ and Telegram community entries to the About page with unified branded chips; the QQ group number can be copied in one click.
v0.1.5
  • Fixed model-fetch cache sync when an API profile fails, clearing the affected profile and syncing the latest settings back to the UI.
  • Reworked API profile error display into a click-to-open Portal popover with bottom-aware placement and scroll-safe positioning.
  • Refined version check and update controls in Settings so they remain superadmin-only and less error-prone.
  • Updated the Docker Hub overview to match the current release notes, image tags, and deployment guidance.
v0.1.4
  • Reworked model configuration into API-profile aggregation with per-profile model lists and a unified model picker.
  • Added prompt optimization before sending and while editing messages.
  • Added context compression and media context forwarding for text, image, and video generation.
  • Improved image/video message UX with uploads, clipboard multi-image paste, media preview, video proxy playback, download, and manual refresh.
  • Enhanced upstream error passthrough and debug details for text, image, and video APIs.
  • Added About page release history, Docker Hub version checks, and in-container update support.
  • Added persisted server file logging and a logging management guide.
v0.1.3
  • Added dynamic theme effects and visual motion components.
  • Refined login and main UI theme presentation.
  • Improved settings, sidebar, and chat UI details under dynamic themes.
v0.1.2
  • Updated Docker release configuration.
  • Removed default OpenAI API placeholders.
  • Improved Docker image publishing documentation.
v0.1.1
  • Added user management, login/register, API authentication, password changes, and per-user API/model isolation.
  • Completed Docker deployment with persistent data, logs, uploads, SQLite database, and JWT secret mapping.
  • Fixed Docker port mapping, production startup, static resource directories, multi-architecture images, and domain deployment issues.
  • Improved image/video async jobs, manual refresh, status polling, upstream error passthrough, and media task authentication.

交流群:959671526

Tag summary

Content type

Image

Digest

sha256:bf5647e2f

Size

213.8 MB

Last updated

12 days ago

docker pull easonbobs/omniflow