Loomic

fancyboi999MIT活跃维护

开源的 AI 画布设计助手,在无限画布上通过对话生成和编辑图片、视频,可替代 Lovart、Canva AI 等商业设计工具。

Open-source AI canvas design agent — alternative to Lovart / CapCut Video Studio / Canva AI. Chat-driven image & video generation on an infinite canvas.

暂无版本308star62fork同步于 2026-11-07 07:30 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/fancyboi999/Loomic.git
cd Loomic
pnpm install
supabase link --project-ref YOUR_PROJECT_REF
supabase db push
cp .env.example .env.local
硬件要求按 README 说明

README 未说明显存或 GPU 要求;生成任务调用云端 AI API,本地只需运行 Node.js 服务,无需本地 GPU。

下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

开源 AI 画布设计 Agent,在无限画布上对话式生成图片和视频

开源的 AI 画布设计助手,在无限画布上通过对话生成和编辑图片、视频,可替代 Lovart、Canva AI 等商业设计工具。

核心能力

  • 在 Excalidraw 无限画布上对话生成、编辑和排版素材
  • LangGraph 驱动 Agent,能理解画布上下文定位元素
  • 接入 Google、OpenAI、Replicate 等 15+ 图片生成模型
  • 支持 Veo 3.x、Kling、Sora 等视频生成并带原生音频
  • 内置 Brand Kit、积分计费与 LemonSqueezy 订阅

容易踩的坑

需先自建 Supabase 项目并执行 supabase db push 建表、RLS 和 PGMQ 队列;至少配置一个 AI 供应商 API Key(Google 或 OpenAI)才能生成;后端分 api 和 worker 两种 SERVICE_MODE,需分别启动或部署。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    💡 Loomic 是什么

    CapCut 刚推出了 Video Studio——基于画布的 AI 视频制作空间,Lovart 做的是 AI 设计 Agent,Canva 也在往 AI 方向猛推。这类产品的共同点:闭源、数据不在你手里、定价你说了不算。

    Loomic 做的是同一件事,但完全开源。你在无限画布上跟 AI 对话,它直接生成图片、视频,摆好位置,调好样式。不需要时间轴,不需要模板,不需要学 prompt 工程。说"把左边那张换成暖色调",AI 就懂了。

    从构思、角色设定、故事板、场景生成、细节打磨到导出——整个创作流程在一个画布上完成。底层是 LangGraph 驱动的 Agent,接了 Google Gemini / Vertex AI / OpenAI / Replicate 十几个模型(包括 Veo 3.1、Kling、Seedance、Sora 等),图片视频都能生。

    开源,可以自己部署,数据全在你手里。


    ✨ Features

    🗣️ 对话式画布设计

    • 在无限画布上和 AI 对话,直接生成、编辑、排版
    • 多轮对话迭代,说"把左边那张图换成暖色调"就行
    • Agent 看得懂画布上下文,知道你在说哪个元素

    🖼️ 图片生成(15+ 模型)

    • Google Imagen 4 / Gemini Image / Vertex AI
    • OpenAI DALL-E 3 / GPT Image
    • Replicate: Flux Kontext, SDXL, Recraft, Seedream...
    • 填自己的 API Key,按需组合

    🎬 视频生成

    • Google Veo 3.1 / 3.0 / 2.0(文生视频、图生视频)
    • Replicate: Kling, Seedance, Wan, Sora, Hailuo...
    • 支持原生音频生成

    🎨 无限画布

    • 基于 Excalidraw,自由拖拽、缩放、分层
    • AI 生成的素材直接落在画布上,不用手动导入
    • 导出、截图、分享

    🏷️ Brand Kit

    • 设定品牌色、字体、Logo
    • AI 生成时自动遵循品牌规范
    • 集成 Google Fonts

    💰 积分 & 付费

    • 内置积分系统,按量计费
    • LemonSqueezy 订阅集成
    • 免费用户每天有基础额度

    🧩 可扩展技能系统

    • Markdown 定义 workspace 技能
    • 按项目扩展 Agent 能力

    🏗️ Architecture

    ┌─────────────┐     WebSocket / REST      ┌─────────────────┐
    │   Next.js   │ ◄──────────────────────►  │  Fastify API    │
    │   Frontend  │                           │  + LangGraph    │
    │  (Vercel)   │                           │  Agent (Railway) │
    └─────────────┘                           └────────┬────────┘
                                                       │ PGMQ
                                              ┌────────▼────────┐
                                              │    Worker(s)     │
                                              │  Image / Video   │
                                              │  Generation      │
                                              │  (Railway)       │
                                              └────────┬────────┘
                                                       │
                                              ┌────────▼────────┐
                                              │    Supabase      │
                                              │  PostgreSQL      │
                                              │  Auth / Storage  │
                                              └─────────────────┘
    
    ComponentTechRole
    FrontendNext.js 15 + React 19 + Tailwind CSS 4Canvas UI, chat panel, workspace
    API ServerFastify 5 + LangGraphAgent runtime, WebSocket, REST API
    WorkerNode.js poll-based consumerAsync image/video generation jobs
    DatabaseSupabase (PostgreSQL)Data, auth, storage, job queue (PGMQ)
    CanvasExcalidraw 0.18Infinite canvas rendering
    AILangChain + LangGraphAgent orchestration, tool calling
    QueuePGMQReliable async job processing

    🛠️ Tech Stack

    LayerTechnology
    MonorepoTurborepo + pnpm
    FrontendNext.js 15 (App Router), React 19, Tailwind CSS 4
    CanvasExcalidraw
    BackendNode.js, Fastify 5, TypeScript
    AI FrameworkLangChain 1.2, LangGraph 1.2
    LLM ProvidersOpenAI, Google Gemini, Google Vertex AI
    Image GenerationImagen, DALL-E, Replicate (13+ models)
    Video GenerationGoogle Veo 3.x, Replicate (Kling, Sora, Seedance, etc.), Metaso MiniMax H3
    DatabasePostgreSQL (Supabase)
    AuthSupabase Auth (Magic Link + OAuth)
    StorageSupabase Storage (S3-compatible)
    QueuePGMQ (PostgreSQL native)
    PaymentsLemonSqueezy
    LintingBiome
    TestingVitest

    🚀 Getting Started

    Prerequisites

    • Node.js >= 20
    • pnpm >= 10 (npm install -g pnpm)
    • Supabase CLI (brew install supabase/tap/supabase)
    • A Supabase project (free tier works)
    • At least one AI API key (Google or OpenAI)

    1. Clone & Install

    git clone https://github.com/fancyboi999/Loomic.git
    cd Loomic
    pnpm install
    

    2. Set Up Supabase

    Create a Supabase project at supabase.com, then apply migrations:

    supabase link --project-ref YOUR_PROJECT_REF
    supabase db push
    

    This creates all required tables, RLS policies, storage buckets, and the PGMQ job queue.

    3. Configure Environment

    cp .env.example .env.local
    

    Edit .env.local with your credentials:

    # ── Required: Supabase ──────────────────────────────────────
    SUPABASE_URL=https://your-project.supabase.co
    SUPABASE_ANON_KEY=your-anon-key
    SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
    SUPABASE_DB_URL=postgresql://postgres:[email protected]:5432/postgres
    SUPABASE_PROJECT_ID=your-project-ref
    NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
    NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
    
    # ── Required: At least one AI provider ──────────────────────
    LOOMIC_AGENT_MODEL=google:gemini-2.5-flash     # or openai:gpt-4o
    GOOGLE_API_KEY=your-google-api-key             # for Gemini + Imagen + Veo
    # OPENAI_API_KEY=your-openai-key               # alternative: OpenAI provider
    
    # ── Optional: More generation providers ─────────────────────
    # REPLICATE_API_TOKEN=                          # 13+ image/video models
    # METASO_API_KEY=                               # MiniMax H3 video
    # METASO_API_BASE=https://metaso.cn/api/minimax/
    # GOOGLE_VERTEX_PROJECT=                        # Vertex AI (service account)
    # GOOGLE_VERTEX_LOCATION=global                 # global for image/LLM
    # GOOGLE_VERTEX_VIDEO_LOCATION=us-central1      # us-central1 for video
    # GOOGLE_APPLICATION_CREDENTIALS=               # path to SA JSON
    

    The database URL above is a direct connection and requires IPv6. If your network does not support IPv6, copy the Session pooler URI (port 5432) from your Supabase project's Connect dialog into SUPABASE_DB_URL. Its host and username differ from the direct connection. Leave SUPABASE_JWT_SECRET empty for remote token verification, or set it to a single public JWK object (not a JWKS {"keys":[...]} object).

    Next.js reads apps/web/.env.local separately. Copy apps/web/.env.local.example to that path, then set NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY to the same public values as the root .env.local. Set NEXT_PUBLIC_SERVER_BASE_URL to your local API URL (by default http://localhost:3001).

    Google sign-in needs separate OAuth credentials; GOOGLE_API_KEY is only for AI models. To enable the Continue with Google button, create a Web application OAuth client in Google Auth Platform. Set http://localhost:3000 as an authorized JavaScript origin and https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback as an authorized redirect URI. Add the client's ID and secret under Supabase Dashboard → Authentication → Sign In / Providers → Google, then enable the provider. In Authentication → URL Configuration, allow http://localhost:3000/auth/callback as a redirect URL. You can use the seeded email/password accounts without configuring Google OAuth.

    Note: See Environment Variables Reference for the full list.

    4. Seed Test Accounts (optional)

    自部署后,跑一下种子脚本就能直接体验各套餐功能,不需要接支付:

    pnpm seed
    

    脚本会在你自己的 Supabase 中创建 4 个测试账号:

    EmailPasswordPlanCredits
    [email protected]opensourceloomicFree50
    [email protected]opensourceloomicStarter1,200
    [email protected]opensourceloomicPro5,000
    [email protected]opensourceloomicUltra15,000

    These accounts are created in YOUR Supabase instance.

    Use password sign-in on /login for these accounts. The login-link option only works for an email account that already exists; use /register to create a new account.

    5. Start Development

    pnpm dev
    

    This starts all services simultaneously:

    ServiceURLDescription
    Webhttp://localhost:3000Next.js frontend
    API Serverhttp://localhost:3001Fastify API + WebSocket
    Worker—Background job processor

    Open http://localhost:3000 and start creating!


    ☁️ Deployment

    Frontend → Vercel

    # Connect your repo to Vercel, then set:
    # Build Command:   pnpm --filter @loomic/shared build && pnpm --filter @loomic/web build
    # Output Directory: apps/web/out
    # Environment Variables: NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY, NEXT_PUBLIC_SERVER_BASE_URL
    

    Backend → Railway

    The backend runs as two services from a single Docker image, differentiated by SERVICE_MODE:

    API Service:

    SERVICE_MODE=api
    LOOMIC_SERVER_PORT=3001
    

    Worker Service:

    SERVICE_MODE=worker
    WORKER_ID=railway-w1
    

    Both services share the same environment variables (Supabase, AI keys, etc.).

    The Dockerfile at apps/server/Dockerfile handles the multi-stage build.

    Database → Supabase

    # Apply all migrations
    supabase db push
    
    # Generate TypeScript types (after schema changes)
    supabase gen types typescript --linked > packages/shared/src/supabase-types.ts
    

    ⚡ Worker Scaling

    Each worker polls PGMQ and processes jobs concurrently. PGMQ guarantees exactly-once delivery.

    # Local: start multiple workers
    pnpm --filter @loomic/server dev:workers:2   # 2 workers (6 concurrent jobs)
    pnpm --filter @loomic/server dev:workers:3   # 3 workers (9 concurrent jobs)
    
    VariableDefaultDescription
    WORKER_CONCURRENCY3Jobs per worker instance
    WORKER_IMAGE_CONCURRENCY3Image generation slots
    WORKER_VIDEO_CONCURRENCY2Video generation slots
    WORKER_POLL_INTERVAL_MS2000Queue poll interval (ms)
    WORKER_IDrandomWorker instance identifier

    On Railway, scale by adding more worker service replicas.


    📂 Project Structure

    Loomic/
    ├── apps/
    │   ├── web/                    # Next.js 15 frontend
    │   │   ├── src/
    │   │   │   ├── app/            #   App Router pages (workspace, canvas, auth, pricing)
    │   │   │   ├── components/     #   React components (canvas, chat, credits, auth)
    │   │   │   ├── hooks/          #   Custom React hooks
    │   │   │   └── lib/            #   Client utilities & API helpers
    │   │   └── public/             #   Static assets
    │   │
    │   └── server/                 # Fastify API + Worker
    │       ├── src/
    │       │   ├── agent/          #   LangGraph agent, tools, prompts
    │       │   ├── generation/     #   Image & video generation providers
    │       │   │   └── providers/  #     Google, OpenAI, Replicate, Vertex AI, Volces
    │       │   ├── features/       #   Domain services
    │       │   │   ├── credits/    #     Credit system & tier guard
    │       │   │   ├── payments/   #     LemonSqueezy integration
    │       │   │   ├── jobs/       #     PGMQ job queue & executors
    │       │   │   ├── canvas/     #     Canvas CRUD
    │       │   │   ├── chat/       #     Chat threads & messages
    │       │   │   └── brand-kit/  #     Brand kit management
    │       │   ├── http/           #   REST route handlers
    │       │   ├── ws/             #   WebSocket handlers
    │       │   ├── config/         #   Environment config loader
    │       │   └── queue/          #   PGMQ client
    │       └── Dockerfile          #   Multi-stage Docker build
    │
    ├── packages/
    │   ├── shared/                 # Shared types, contracts, credit config
    │   ├── config/                 # Shared configuration
    │   └── ui/                     # Shared UI components
    │
    ├── skills/                     # Extensible workspace skills
    │   ├── canvas-design/          #   Canvas design guidance
    │   └── json-image-prompt/      #   Image prompt templates
    │
    ├── supabase/
    │   └── migrations/             # Database migrations (18 files)
    │
    ├── .env.example                # Environment template
    ├── turbo.json                  # Turborepo config
    ├── pnpm-workspace.yaml         # pnpm workspace definition
    └── package.json                # Root scripts
    

    🔐 Environment Variables Reference

    Required

    VariableDescription
    SUPABASE_URLSupabase project URL
    SUPABASE_ANON_KEYSupabase anonymous key
    SUPABASE_SERVICE_ROLE_KEYSupabase service role key (server-only)
    SUPABASE_DB_URLPostgreSQL connection string (for PGMQ)
    SUPABASE_PROJECT_IDSupabase project reference ID
    NEXT_PUBLIC_SUPABASE_URLSupabase URL (exposed to frontend)
    NEXT_PUBLIC_SUPABASE_ANON_KEYSupabase anon key (exposed to frontend)

    AI Providers (at least one required)

    VariableDescription
    LOOMIC_AGENT_MODELAgent LLM model (e.g., google:gemini-2.5-flash)
    GOOGLE_API_KEYGoogle AI API key (Gemini + Imagen + Veo)
    OPENAI_API_KEYOpenAI API key (GPT + DALL-E)
    OPENAI_API_BASECustom OpenAI-compatible endpoint
    REPLICATE_API_TOKENReplicate API token (13+ models)
    METASO_API_KEYMetaso API key (MiniMax H3 video)
    METASO_API_BASEOptional Metaso H3 V2 base URL (default: https://metaso.cn/api/minimax/)

    Google Vertex AI (optional)

    VariableDescription
    GOOGLE_APPLICATION_CREDENTIALSPath to service account JSON
    GOOGLE_VERTEX_PROJECTGCP project ID
    GOOGLE_VERTEX_LOCATIONRegion for image/LLM (global)
    GOOGLE_VERTEX_VIDEO_LOCATIONRegion for video (us-central1)

    Payments (optional)

    VariableDescription
    LEMONSQUEEZY_API_KEYLemonSqueezy API key
    LEMONSQUEEZY_STORE_IDLemonSqueezy store ID
    LEMONSQUEEZY_WEBHOOK_SECRETWebhook HMAC secret
    LEMONSQUEEZY_VARIANT_*_MONTHLYPlan variant IDs (monthly)
    LEMONSQUEEZY_VARIANT_*_YEARLYPlan variant IDs (yearly)

    Server & Worker

    VariableDefaultDescription
    LOOMIC_SERVER_PORT3001API server port
    LOOMIC_WEB_ORIGINhttp://localhost:3000Frontend origin (CORS)
    LOOMIC_AGENT_BACKEND_MODEstateAgent persistence (state or filesystem)
    LOOMIC_SKILLS_ROOT../../skillsPath to skills directory
    WORKER_CONCURRENCY3Jobs per worker
    WORKER_IMAGE_CONCURRENCY3Image generation slots
    WORKER_VIDEO_CONCURRENCY2Video generation slots
    GOOGLE_FONTS_API_KEY—Google Fonts API (brand kit)

    🤖 Supported Models

    Image Generation

    ProviderModels
    Google (API Key)Imagen 4, Gemini 2.5 Flash Image, Gemini 3 Pro Image
    Google (Vertex AI)Gemini 3 Pro Image, Gemini 3.1 Flash Image, Gemini 2.5 Flash Image
    OpenAIDALL-E 3, GPT Image 1.5
    ReplicateFlux Kontext Pro/Max, SDXL, Recraft V3, Seedream, and more

    Video Generation

    ProviderModels
    Google (API Key)Veo 3.1, Veo 3.1 Fast, Veo 3.1 Lite, Veo 3.0, Veo 2.0
    Google (Vertex AI)Veo 3.1, Veo 3.1 Fast, Veo 3.1 Lite, Veo 3.0, Veo 2.0
    ReplicateKling V3, Seedance 1.5, Wan 2.6, Sora 2, Hailuo 2.3, and more
    MetasoMiniMax H3(文生视频、首帧/首尾帧,4–15 秒,768P/2K)

    Metaso H3 的项目积分按生成秒数统一计算:768P 为 10.2 积分/秒,2K 为 17 积分/秒;最终扣分向上取整。人民币价格仅作为前端参考区间展示,不参与积分余额扣减。

    LLM (Agent)

    ProviderModels
    GoogleGemini 2.5 Flash, Gemini 2.5 Pro, Gemini 3 Flash
    OpenAIGPT-4o, GPT-4o-mini, or any OpenAI-compatible endpoint

    🤝 Contributing

    Contributions welcome!

    1. Fork the repo
    2. Create a feature branch (git checkout -b feat/amazing-feature)
    3. Commit your changes
    4. Push to the branch (git push origin feat/amazing-feature)
    5. Open a Pull Request

    📄 License

    MIT