@lobehub/lobehub 2.0.0-next.231 → 2.0.0-next.233

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.github/workflows/bundle-analyzer.yml +1 -1
  2. package/.github/workflows/e2e.yml +67 -52
  3. package/.github/workflows/manual-build-desktop.yml +5 -5
  4. package/.github/workflows/pr-build-desktop.yml +4 -4
  5. package/.github/workflows/pr-build-docker.yml +2 -2
  6. package/.github/workflows/release-desktop-beta.yml +4 -4
  7. package/.github/workflows/release-docker.yml +2 -2
  8. package/.github/workflows/test.yml +44 -7
  9. package/CHANGELOG.md +50 -0
  10. package/changelog/v1.json +14 -0
  11. package/docs/self-hosting/environment-variables/auth.mdx +7 -0
  12. package/docs/self-hosting/environment-variables/auth.zh-CN.mdx +7 -0
  13. package/package.json +1 -1
  14. package/packages/business/config/src/llm.ts +6 -1
  15. package/packages/const/src/settings/image.ts +1 -1
  16. package/packages/model-bank/src/aiModels/azure.ts +2 -2
  17. package/packages/model-bank/src/aiModels/google.ts +1 -0
  18. package/packages/model-bank/src/aiModels/lobehub.ts +33 -13
  19. package/packages/model-bank/src/aiModels/openai.ts +21 -4
  20. package/packages/model-runtime/src/core/openaiCompatibleFactory/createImage.ts +4 -1
  21. package/packages/model-runtime/src/providers/openai/__snapshots__/index.test.ts.snap +1 -1
  22. package/packages/ssrf-safe-fetch/index.test.ts +5 -34
  23. package/packages/ssrf-safe-fetch/index.ts +12 -2
  24. package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/MultiImagesUpload/index.tsx +3 -3
  25. package/src/app/[variants]/(main)/image/features/GenerationFeed/index.tsx +3 -10
  26. package/src/app/[variants]/(main)/image/index.tsx +1 -1
  27. package/src/components/Loading/BrandTextLoading/index.module.css +81 -0
  28. package/src/components/Loading/BrandTextLoading/index.tsx +24 -17
  29. package/src/envs/auth.ts +15 -0
  30. package/src/hooks/useFetchAiImageConfig.ts +54 -10
  31. package/src/libs/redis/manager.ts +63 -0
  32. package/src/libs/trpc/utils/internalJwt.ts +2 -2
  33. package/src/server/services/agent/index.test.ts +15 -8
  34. package/src/server/services/agent/index.ts +11 -4
  35. package/src/store/image/slices/generationConfig/initialState.ts +5 -5
  36. package/src/store/image/slices/generationConfig/selectors.test.ts +11 -4
  37. package/vitest.config.mts +10 -6
@@ -98,7 +98,7 @@ jobs:
98
98
  echo "- \`pnpm-lock.yaml\` - pnpm lockfile (for reproducible builds)" >> bundle-report/README.md
99
99
 
100
100
  - name: Upload bundle analyzer reports
101
- uses: actions/upload-artifact@v4
101
+ uses: actions/upload-artifact@v6
102
102
  with:
103
103
  name: bundle-report-${{ github.run_id }}
104
104
  path: bundle-report/
@@ -1,14 +1,14 @@
1
1
  name: E2E CI
2
+
3
+ on: [push, pull_request]
4
+
2
5
  permissions:
6
+ actions: write
3
7
  contents: read
4
8
 
5
- on:
6
- pull_request:
7
- push:
8
-
9
9
  concurrency:
10
- group: e2e-${{ github.ref }}
11
- cancel-in-progress: true
10
+ group: ${{ github.workflow }}-${{ github.ref }}
11
+ cancel-in-progress: true
12
12
 
13
13
  env:
14
14
  DATABASE_URL: postgresql://postgres:postgres@localhost:5432/postgres
@@ -24,59 +24,74 @@ env:
24
24
  S3_ENDPOINT: https://e2e-mock-s3.localhost
25
25
 
26
26
  jobs:
27
- e2e:
28
- name: Test Web App
29
- runs-on: ubuntu-latest
30
- services:
31
- postgres:
32
- image: paradedb/paradedb:latest
33
- env:
34
- POSTGRES_PASSWORD: postgres
35
- options: >-
36
- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
27
+ # Check for duplicate runs
28
+ check-duplicate-run:
29
+ name: Check Duplicate Run
30
+ runs-on: ubuntu-latest
31
+ outputs:
32
+ should_skip: ${{ steps.skip_check.outputs.should_skip }}
33
+ steps:
34
+ - id: skip_check
35
+ uses: fkirc/skip-duplicate-actions@v5
36
+ with:
37
+ concurrent_skipping: 'same_content_newer'
38
+ skip_after_successful_duplicate: 'true'
39
+ do_not_skip: '["workflow_dispatch", "schedule"]'
37
40
 
38
- ports:
39
- - 5432:5432
41
+ e2e:
42
+ needs: check-duplicate-run
43
+ if: needs.check-duplicate-run.outputs.should_skip != 'true'
44
+ name: Test Web App
45
+ runs-on: ubuntu-latest
46
+ services:
47
+ postgres:
48
+ image: paradedb/paradedb:latest
49
+ env:
50
+ POSTGRES_PASSWORD: postgres
51
+ options: >-
52
+ --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
53
+ ports:
54
+ - 5432:5432
40
55
 
41
- timeout-minutes: 30
42
- steps:
43
- - name: Checkout
44
- uses: actions/checkout@v6
56
+ timeout-minutes: 30
57
+ steps:
58
+ - name: Checkout
59
+ uses: actions/checkout@v6
45
60
 
46
- - name: Setup Bun
47
- uses: oven-sh/setup-bun@v2
48
- with:
49
- bun-version: latest
61
+ - name: Setup Bun
62
+ uses: oven-sh/setup-bun@v2
63
+ with:
64
+ bun-version: latest
50
65
 
51
- - name: Install dependencies (bun)
52
- run: bun install
66
+ - name: Install dependencies (bun)
67
+ run: bun install
53
68
 
54
- - name: Install Playwright browsers (with system deps)
55
- run: bunx playwright install --with-deps chromium
69
+ - name: Install Playwright browsers (with system deps)
70
+ run: bunx playwright install --with-deps chromium
56
71
 
57
- - name: Run database migrations
58
- run: bun run db:migrate
72
+ - name: Run database migrations
73
+ run: bun run db:migrate
59
74
 
60
- - name: Build application
61
- run: bun run build
62
- env:
63
- SKIP_LINT: '1'
75
+ - name: Build application
76
+ run: bun run build
77
+ env:
78
+ SKIP_LINT: '1'
64
79
 
65
- - name: Run E2E tests
66
- run: bun run e2e
80
+ - name: Run E2E tests
81
+ run: bun run e2e
67
82
 
68
- - name: Upload Cucumber HTML report (on failure)
69
- if: failure()
70
- uses: actions/upload-artifact@v5
71
- with:
72
- name: cucumber-report
73
- path: e2e/reports
74
- if-no-files-found: ignore
83
+ - name: Upload Cucumber HTML report (on failure)
84
+ if: failure()
85
+ uses: actions/upload-artifact@v6
86
+ with:
87
+ name: cucumber-report
88
+ path: e2e/reports
89
+ if-no-files-found: ignore
75
90
 
76
- - name: Upload screenshots (on failure)
77
- if: failure()
78
- uses: actions/upload-artifact@v5
79
- with:
80
- name: test-screenshots
81
- path: e2e/screenshots
82
- if-no-files-found: ignore
91
+ - name: Upload screenshots (on failure)
92
+ if: failure()
93
+ uses: actions/upload-artifact@v6
94
+ with:
95
+ name: test-screenshots
96
+ path: e2e/screenshots
97
+ if-no-files-found: ignore
@@ -171,7 +171,7 @@ jobs:
171
171
  fi
172
172
 
173
173
  - name: Upload artifact
174
- uses: actions/upload-artifact@v5
174
+ uses: actions/upload-artifact@v6
175
175
  with:
176
176
  name: release-${{ matrix.os }}
177
177
  path: |
@@ -224,7 +224,7 @@ jobs:
224
224
  TMP: C:\temp
225
225
 
226
226
  - name: Upload artifact
227
- uses: actions/upload-artifact@v5
227
+ uses: actions/upload-artifact@v6
228
228
  with:
229
229
  name: release-windows-2025
230
230
  path: |
@@ -275,7 +275,7 @@ jobs:
275
275
  NEXT_PUBLIC_DESKTOP_UMAMI_BASE_URL: ${{ inputs.channel == 'beta' && secrets.UMAMI_BETA_DESKTOP_BASE_URL || secrets.UMAMI_NIGHTLY_DESKTOP_BASE_URL }}
276
276
 
277
277
  - name: Upload artifact
278
- uses: actions/upload-artifact@v5
278
+ uses: actions/upload-artifact@v6
279
279
  with:
280
280
  name: release-ubuntu-latest
281
281
  path: |
@@ -309,7 +309,7 @@ jobs:
309
309
  package-manager-cache: 'false'
310
310
 
311
311
  - name: Download artifacts
312
- uses: actions/download-artifact@v6
312
+ uses: actions/download-artifact@v7
313
313
  with:
314
314
  path: release
315
315
  pattern: release-*
@@ -330,7 +330,7 @@ jobs:
330
330
  run: bun run scripts/electronWorkflow/mergeMacReleaseFiles.js
331
331
 
332
332
  - name: Upload artifacts with merged macOS files
333
- uses: actions/upload-artifact@v5
333
+ uses: actions/upload-artifact@v6
334
334
  with:
335
335
  name: merged-release-manual
336
336
  path: release/
@@ -194,7 +194,7 @@ jobs:
194
194
 
195
195
  # 上传构建产物
196
196
  - name: Upload artifact
197
- uses: actions/upload-artifact@v5
197
+ uses: actions/upload-artifact@v6
198
198
  with:
199
199
  name: release-${{ matrix.os }}
200
200
  path: |
@@ -229,7 +229,7 @@ jobs:
229
229
 
230
230
  # 下载所有平台的构建产物
231
231
  - name: Download artifacts
232
- uses: actions/download-artifact@v6
232
+ uses: actions/download-artifact@v7
233
233
  with:
234
234
  path: release
235
235
  pattern: release-*
@@ -255,7 +255,7 @@ jobs:
255
255
 
256
256
  # 上传合并后的构建产物
257
257
  - name: Upload artifacts with merged macOS files
258
- uses: actions/upload-artifact@v5
258
+ uses: actions/upload-artifact@v6
259
259
  with:
260
260
  name: merged-release-pr
261
261
  path: release/
@@ -280,7 +280,7 @@ jobs:
280
280
 
281
281
  # 下载合并后的构建产物
282
282
  - name: Download merged artifacts
283
- uses: actions/download-artifact@v6
283
+ uses: actions/download-artifact@v7
284
284
  with:
285
285
  name: merged-release-pr
286
286
  path: release
@@ -91,7 +91,7 @@ jobs:
91
91
  touch "/tmp/digests/${digest#sha256:}"
92
92
 
93
93
  - name: Upload artifact
94
- uses: actions/upload-artifact@v5
94
+ uses: actions/upload-artifact@v6
95
95
  with:
96
96
  name: digest-${{ env.PLATFORM_PAIR }}
97
97
  path: /tmp/digests/*
@@ -111,7 +111,7 @@ jobs:
111
111
  fetch-depth: 0
112
112
 
113
113
  - name: Download digests
114
- uses: actions/download-artifact@v6
114
+ uses: actions/download-artifact@v7
115
115
  with:
116
116
  path: /tmp/digests
117
117
  pattern: digest-*
@@ -181,7 +181,7 @@ jobs:
181
181
 
182
182
  # 上传构建产物 (工作流处理重命名,不依赖 electron-builder 钩子)
183
183
  - name: Upload artifact
184
- uses: actions/upload-artifact@v5
184
+ uses: actions/upload-artifact@v6
185
185
  with:
186
186
  name: release-${{ matrix.os }}
187
187
  path: |
@@ -220,7 +220,7 @@ jobs:
220
220
 
221
221
  # 下载所有平台的构建产物
222
222
  - name: Download artifacts
223
- uses: actions/download-artifact@v6
223
+ uses: actions/download-artifact@v7
224
224
  with:
225
225
  path: release
226
226
  pattern: release-*
@@ -246,7 +246,7 @@ jobs:
246
246
 
247
247
  # 上传合并后的构建产物
248
248
  - name: Upload artifacts with merged macOS files
249
- uses: actions/upload-artifact@v5
249
+ uses: actions/upload-artifact@v6
250
250
  with:
251
251
  name: merged-release
252
252
  path: release/
@@ -262,7 +262,7 @@ jobs:
262
262
  steps:
263
263
  # 下载合并后的构建产物
264
264
  - name: Download merged artifacts
265
- uses: actions/download-artifact@v6
265
+ uses: actions/download-artifact@v7
266
266
  with:
267
267
  name: merged-release
268
268
  path: release
@@ -80,7 +80,7 @@ jobs:
80
80
  touch "/tmp/digests/${digest#sha256:}"
81
81
 
82
82
  - name: Upload artifact
83
- uses: actions/upload-artifact@v5
83
+ uses: actions/upload-artifact@v6
84
84
  with:
85
85
  name: digest-${{ env.PLATFORM_PAIR }}
86
86
  path: /tmp/digests/*
@@ -98,7 +98,7 @@ jobs:
98
98
  fetch-depth: 0
99
99
 
100
100
  - name: Download digests
101
- uses: actions/download-artifact@v6
101
+ uses: actions/download-artifact@v7
102
102
  with:
103
103
  path: /tmp/digests
104
104
  pattern: digest-*
@@ -76,14 +76,15 @@ jobs:
76
76
  fi
77
77
  done
78
78
 
79
- # App tests
80
- test-website:
79
+ # App tests - run sharded tests
80
+ test-app:
81
81
  needs: check-duplicate-run
82
82
  if: needs.check-duplicate-run.outputs.should_skip != 'true'
83
- name: Test Website
84
-
83
+ strategy:
84
+ matrix:
85
+ shard: [1, 2]
86
+ name: Test App (shard ${{ matrix.shard }}/2)
85
87
  runs-on: ubuntu-latest
86
-
87
88
  steps:
88
89
  - uses: actions/checkout@v6
89
90
 
@@ -101,8 +102,44 @@ jobs:
101
102
  - name: Install deps
102
103
  run: bun i
103
104
 
104
- - name: Test App Coverage
105
- run: bun run test-app:coverage
105
+ - name: Run tests with blob reporter
106
+ run: bunx vitest --coverage --reporter=blob --silent='passed-only' --shard=${{ matrix.shard }}/2
107
+
108
+ - name: Upload blob report
109
+ if: ${{ !cancelled() }}
110
+ uses: actions/upload-artifact@v6
111
+ with:
112
+ name: blob-report-${{ matrix.shard }}
113
+ path: .vitest-reports
114
+ include-hidden-files: true
115
+ retention-days: 1
116
+
117
+ # Merge sharded test reports and upload coverage
118
+ merge-app-coverage:
119
+ needs: test-app
120
+ if: ${{ !cancelled() && needs.test-app.result == 'success' }}
121
+ name: Merge and Upload App Coverage
122
+ runs-on: ubuntu-latest
123
+ steps:
124
+ - uses: actions/checkout@v6
125
+
126
+ - name: Install bun
127
+ uses: oven-sh/setup-bun@v2
128
+ with:
129
+ bun-version: latest
130
+
131
+ - name: Install deps
132
+ run: bun i
133
+
134
+ - name: Download blob reports
135
+ uses: actions/download-artifact@v7
136
+ with:
137
+ path: .vitest-reports
138
+ pattern: blob-report-*
139
+ merge-multiple: true
140
+
141
+ - name: Merge reports
142
+ run: bunx vitest --merge-reports --coverage
106
143
 
107
144
  - name: Upload App Coverage to Codecov
108
145
  uses: codecov/codecov-action@v5
package/CHANGELOG.md CHANGED
@@ -2,6 +2,56 @@
2
2
 
3
3
  # Changelog
4
4
 
5
+ ## [Version 2.0.0-next.233](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.232...v2.0.0-next.233)
6
+
7
+ <sup>Released on **2026-01-07**</sup>
8
+
9
+ #### ✨ Features
10
+
11
+ - **image**: Improve image generation with new models and bug fixes.
12
+
13
+ <br/>
14
+
15
+ <details>
16
+ <summary><kbd>Improvements and Fixes</kbd></summary>
17
+
18
+ #### What's improved
19
+
20
+ - **image**: Improve image generation with new models and bug fixes, closes [#11311](https://github.com/lobehub/lobe-chat/issues/11311) ([4fc03bb](https://github.com/lobehub/lobe-chat/commit/4fc03bb))
21
+
22
+ </details>
23
+
24
+ <div align="right">
25
+
26
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
27
+
28
+ </div>
29
+
30
+ ## [Version 2.0.0-next.232](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.231...v2.0.0-next.232)
31
+
32
+ <sup>Released on **2026-01-07**</sup>
33
+
34
+ #### 🐛 Bug Fixes
35
+
36
+ - **misc**: Correct BrandTextLoading position after removing SSG CSS-in-JS injection.
37
+
38
+ <br/>
39
+
40
+ <details>
41
+ <summary><kbd>Improvements and Fixes</kbd></summary>
42
+
43
+ #### What's fixed
44
+
45
+ - **misc**: Correct BrandTextLoading position after removing SSG CSS-in-JS injection, closes [#11312](https://github.com/lobehub/lobe-chat/issues/11312) ([0de4eb8](https://github.com/lobehub/lobe-chat/commit/0de4eb8))
46
+
47
+ </details>
48
+
49
+ <div align="right">
50
+
51
+ [![](https://img.shields.io/badge/-BACK_TO_TOP-151515?style=flat-square)](#readme-top)
52
+
53
+ </div>
54
+
5
55
  ## [Version 2.0.0-next.231](https://github.com/lobehub/lobe-chat/compare/v2.0.0-next.230...v2.0.0-next.231)
6
56
 
7
57
  <sup>Released on **2026-01-07**</sup>
package/changelog/v1.json CHANGED
@@ -1,4 +1,18 @@
1
1
  [
2
+ {
3
+ "children": {},
4
+ "date": "2026-01-07",
5
+ "version": "2.0.0-next.233"
6
+ },
7
+ {
8
+ "children": {
9
+ "fixes": [
10
+ "Correct BrandTextLoading position after removing SSG CSS-in-JS injection."
11
+ ]
12
+ },
13
+ "date": "2026-01-07",
14
+ "version": "2.0.0-next.232"
15
+ },
2
16
  {
3
17
  "children": {
4
18
  "fixes": [
@@ -63,6 +63,13 @@ LobeChat provides a complete authentication service capability when deployed. Th
63
63
 
64
64
  <OIDCJWKs />
65
65
 
66
+ #### `INTERNAL_JWT_EXPIRATION`
67
+
68
+ - Type: Optional
69
+ - Description: Expiration time for internal JWT tokens used in lambda → async calls. Format: number followed by unit (s=seconds, m=minutes, h=hours). Should be as short as possible for security, but long enough to account for network latency and server processing time.
70
+ - Default: `30s`
71
+ - Example: `30s`, `1m`, `1h`
72
+
66
73
  ### Email Service (SMTP)
67
74
 
68
75
  These settings are required for email verification and password reset features.
@@ -61,6 +61,13 @@ LobeChat 在部署时提供了完善的身份验证服务能力,以下是相
61
61
 
62
62
  <OIDCJWKs />
63
63
 
64
+ #### `INTERNAL_JWT_EXPIRATION`
65
+
66
+ - 类型:可选
67
+ - 描述:内部 JWT 令牌的过期时间,用于 lambda → async 调用。格式:数字后跟单位(s = 秒,m = 分钟,h = 小时)。为了安全性应尽可能短,但需要足够长以应对网络延迟和服务器处理时间。
68
+ - 默认值:`30s`
69
+ - 示例:`30s`、`1m`、`1h`
70
+
64
71
  ### 邮件服务(SMTP)
65
72
 
66
73
  启用邮箱验证和密码重置功能需要配置以下设置。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobehub/lobehub",
3
- "version": "2.0.0-next.231",
3
+ "version": "2.0.0-next.233",
4
4
  "description": "LobeHub - an open-source,comprehensive AI Agent framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
5
5
  "keywords": [
6
6
  "framework",
@@ -23,11 +23,16 @@ const genUserLLMConfig = (specificConfig: Record<any, any>): UserModelProviderCo
23
23
  };
24
24
 
25
25
  export const DEFAULT_LLM_CONFIG = genUserLLMConfig({
26
+ anthropic: {
27
+ enabled: true,
28
+ },
29
+ google: {
30
+ enabled: true,
31
+ },
26
32
  lmstudio: {
27
33
  fetchOnClient: true,
28
34
  },
29
35
  ollama: {
30
- enabled: true,
31
36
  fetchOnClient: true,
32
37
  },
33
38
  openai: {
@@ -4,5 +4,5 @@ export const MIN_DEFAULT_IMAGE_NUM = 1;
4
4
  export const MAX_DEFAULT_IMAGE_NUM = 20;
5
5
 
6
6
  export const DEFAULT_IMAGE_CONFIG: UserImageConfig = {
7
- defaultImageNum: 4,
7
+ defaultImageNum: 2,
8
8
  };
@@ -218,7 +218,8 @@ const azureChatModels: AIChatModelCard[] = [
218
218
  deploymentName: 'gpt-4.1',
219
219
  },
220
220
  contextWindowTokens: 1_047_576,
221
- description: 'GPT-4.1 is our flagship model for complex tasks and cross-domain problem solving.',
221
+ description:
222
+ 'GPT-4.1 is our flagship model for complex tasks and cross-domain problem solving.',
222
223
  displayName: 'GPT-4.1',
223
224
  enabled: true,
224
225
  id: 'gpt-4.1',
@@ -467,7 +468,6 @@ const azureImageModels: AIImageModelCard[] = [
467
468
  enum: ['auto', '1024x1024', '1792x1024', '1024x1792'],
468
469
  },
469
470
  },
470
- resolutions: ['1024x1024', '1024x1792', '1792x1024'],
471
471
  type: 'image',
472
472
  },
473
473
  {
@@ -951,6 +951,7 @@ const googleImageModels: AIImageModelCard[] = [
951
951
  {
952
952
  displayName: 'Nano Banana',
953
953
  id: 'gemini-2.5-flash-image:image',
954
+ enabled: true,
954
955
  type: 'image',
955
956
  description:
956
957
  'Nano Banana is Google’s newest, fastest, and most efficient native multimodal model, enabling conversational image generation and editing.',
@@ -1063,6 +1063,14 @@ export const nanoBananaProParameters: ModelParamsSchema = {
1063
1063
  },
1064
1064
  };
1065
1065
 
1066
+ const gptImage1Schema = {
1067
+ imageUrls: { default: [], maxCount: 1, maxFileSize: 5 },
1068
+ prompt: { default: '' },
1069
+ size: {
1070
+ default: 'auto',
1071
+ enum: ['auto', '1024x1024', '1536x1024', '1024x1536'],
1072
+ },
1073
+ };
1066
1074
  const lobehubImageModels: AIImageModelCard[] = [
1067
1075
  {
1068
1076
  description:
@@ -1104,7 +1112,7 @@ const lobehubImageModels: AIImageModelCard[] = [
1104
1112
  {
1105
1113
  description: 'Imagen 4th generation text-to-image model series',
1106
1114
  displayName: 'Imagen 4 Fast',
1107
- enabled: false,
1115
+ enabled: true,
1108
1116
  id: 'imagen-4.0-fast-generate-001',
1109
1117
  organization: 'Deepmind',
1110
1118
  parameters: imagenBaseParameters,
@@ -1117,7 +1125,7 @@ const lobehubImageModels: AIImageModelCard[] = [
1117
1125
  {
1118
1126
  description: 'Imagen 4th generation text-to-image model series',
1119
1127
  displayName: 'Imagen 4',
1120
- enabled: false,
1128
+ enabled: true,
1121
1129
  id: 'imagen-4.0-generate-001',
1122
1130
  organization: 'Deepmind',
1123
1131
  parameters: imagenBaseParameters,
@@ -1130,7 +1138,7 @@ const lobehubImageModels: AIImageModelCard[] = [
1130
1138
  {
1131
1139
  description: 'Imagen 4th generation text-to-image model series Ultra version',
1132
1140
  displayName: 'Imagen 4 Ultra',
1133
- enabled: false,
1141
+ enabled: true,
1134
1142
  id: 'imagen-4.0-ultra-generate-001',
1135
1143
  organization: 'Deepmind',
1136
1144
  parameters: imagenBaseParameters,
@@ -1140,19 +1148,32 @@ const lobehubImageModels: AIImageModelCard[] = [
1140
1148
  releasedAt: '2025-08-15',
1141
1149
  type: 'image',
1142
1150
  },
1151
+ {
1152
+ description:
1153
+ 'An enhanced GPT Image 1 model with 4× faster generation, more precise editing, and improved text rendering.',
1154
+ displayName: 'GPT Image 1.5',
1155
+ enabled: true,
1156
+ id: 'gpt-image-1.5',
1157
+ parameters: gptImage1Schema,
1158
+ pricing: {
1159
+ approximatePricePerImage: 0.034,
1160
+ units: [
1161
+ { name: 'textInput', rate: 5, strategy: 'fixed', unit: 'millionTokens' },
1162
+ { name: 'textInput_cacheRead', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
1163
+ { name: 'imageInput', rate: 8, strategy: 'fixed', unit: 'millionTokens' },
1164
+ { name: 'imageInput_cacheRead', rate: 2, strategy: 'fixed', unit: 'millionTokens' },
1165
+ { name: 'imageOutput', rate: 32, strategy: 'fixed', unit: 'millionTokens' },
1166
+ ],
1167
+ },
1168
+ releasedAt: '2025-12-16',
1169
+ type: 'image',
1170
+ },
1143
1171
  {
1144
1172
  description: 'ChatGPT native multimodal image generation model.',
1145
1173
  displayName: 'GPT Image 1',
1146
1174
  enabled: true,
1147
1175
  id: 'gpt-image-1',
1148
- parameters: {
1149
- imageUrls: { default: [], maxCount: 1, maxFileSize: 5 },
1150
- prompt: { default: '' },
1151
- size: {
1152
- default: 'auto',
1153
- enum: ['auto', '1024x1024', '1536x1024', '1024x1536'],
1154
- },
1155
- },
1176
+ parameters: gptImage1Schema,
1156
1177
  pricing: {
1157
1178
  approximatePricePerImage: 0.042,
1158
1179
  units: [
@@ -1169,7 +1190,7 @@ const lobehubImageModels: AIImageModelCard[] = [
1169
1190
  description:
1170
1191
  'The latest DALL·E model, released in November 2023, supports more realistic, accurate image generation with stronger detail.',
1171
1192
  displayName: 'DALL·E 3',
1172
- enabled: false,
1193
+ enabled: true,
1173
1194
  id: 'dall-e-3',
1174
1195
  parameters: {
1175
1196
  prompt: { default: '' },
@@ -1203,7 +1224,6 @@ const lobehubImageModels: AIImageModelCard[] = [
1203
1224
  },
1204
1225
  ],
1205
1226
  },
1206
- resolutions: ['1024x1024', '1024x1792', '1792x1024'],
1207
1227
  type: 'image',
1208
1228
  },
1209
1229
  {