File size: 2,607 Bytes
cfea436
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24cdd6a
cfea436
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';

// Prompt 表 — 一条记录可同时含图像 + 视频提示词
export const prompts = sqliteTable('prompts', {
  id: text('id').primaryKey(),
  title: text('title').notNull(),
  contentImage: text('content_image').default(''),  // gpt-image-2
  contentVideo: text('content_video').default(''),  // seedance-2
  translationImage: text('translation_image'),
  translationVideo: text('translation_video'),
  tags: text('tags').default('[]'),                 // JSON array
  sourceUrl: text('source_url'),
  isFavorite: integer('is_favorite', { mode: 'boolean' }).default(false),
  createdAt: integer('created_at').notNull(),
  updatedAt: integer('updated_at').notNull(),
});

// 已生成的图片(独立表,存历史多张)
export const images = sqliteTable('images', {
  id: text('id').primaryKey(),
  promptId: text('prompt_id').notNull(),
  b64: text('b64').notNull(),                       // data:image/png;base64,...
  model: text('model').notNull(),
  size: text('size').notNull(),                     // 1024x1024 / 1792x1024 / 1024x1792
  quality: text('quality').notNull(),               // standard | hd
  generationDuration: integer('generation_duration').notNull(), // ms
  promptUsed: text('prompt_used').notNull(),
  createdAt: integer('created_at').notNull(),
});

// 全局设置(单行,id = 'default')
// 翻译复用 OpenAI 同一套配置;只允许独立选择翻译模型
export const settings = sqliteTable('settings', {
  id: text('id').primaryKey().default('default'),
  openaiBaseUrl: text('openai_base_url').default('https://api.openai.com/v1'),
  openaiApiKey: text('openai_api_key').default(''),
  imageModel: text('image_model').default('gpt-image-2'),
  // 全局默认生成分辨率
  defaultSize: text('default_size').default('1024x1024'),
  // 自定义分辨率(除预设 1024x1024/1792x1024/1024x1792 外);JSON 数组字符串,如 ["768x768","2048x2048"]
  customSizes: text('custom_sizes').default('[]'),
  translateModel: text('translate_model').default('gpt-4o-mini'),
  // 访问密码 hash(空 = 不需要登陆)
  accessPassword: text('access_password').default(''),
  // 前端轮询生成 jobs 的间隔(ms),默认 3000,范围 1000~30000
  jobPollInterval: integer('job_poll_interval').default(3000),
  updatedAt: integer('updated_at').notNull(),
});

export type Prompt = typeof prompts.$inferSelect;
export type NewPrompt = typeof prompts.$inferInsert;
export type Image = typeof images.$inferSelect;
export type Settings = typeof settings.$inferSelect;