From ce8a2d0222c2d4a1c83e9a01ebddc51bcccbbb23 Mon Sep 17 00:00:00 2001 From: RockYang Date: Mon, 11 Nov 2024 17:22:08 +0800 Subject: [PATCH] save task origin info for AI generating jobs --- api/core/types/task.go | 2 +- api/handler/dalle_handler.go | 30 +++++----- api/handler/function_handler.go | 2 +- api/handler/mj_handler.go | 76 +++++++++++++------------ api/handler/prompt_handler.go | 37 ++++++++++++ api/handler/suno_handler.go | 37 ++++++------ api/handler/video_handler.go | 29 +++++----- api/main.go | 2 + api/service/dalle/service.go | 26 +++++++-- api/service/mj/service.go | 15 +++++ api/service/suno/service.go | 25 ++++---- api/service/types.go | 26 +++++++++ api/service/video/luma.go | 19 +++---- api/store/model/dalle_job.go | 1 + api/store/model/mj_job.go | 1 + api/store/model/suno_job.go | 1 + api/store/model/video_job.go | 2 +- api/store/vo/video_job.go | 3 - database/update-v4.1.7.sql | 6 +- web/src/assets/css/image-mj.styl | 7 ++- web/src/assets/iconfont/iconfont.css | 14 ++++- web/src/assets/iconfont/iconfont.js | 2 +- web/src/assets/iconfont/iconfont.json | 14 +++++ web/src/assets/iconfont/iconfont.ttf | Bin 31376 -> 32116 bytes web/src/assets/iconfont/iconfont.woff | Bin 20932 -> 21488 bytes web/src/assets/iconfont/iconfont.woff2 | Bin 18188 -> 18628 bytes web/src/views/Dalle.vue | 25 +++++++- web/src/views/ImageMj.vue | 45 ++++++++++++--- web/src/views/ImageSd.vue | 25 +++++++- web/src/views/Luma.vue | 20 +++++++ web/src/views/mobile/pages/ImageMj.vue | 2 +- 31 files changed, 358 insertions(+), 136 deletions(-) diff --git a/api/core/types/task.go b/api/core/types/task.go index 444e25c0..d822faee 100644 --- a/api/core/types/task.go +++ b/api/core/types/task.go @@ -74,7 +74,7 @@ type SdTaskParams struct { // DallTask DALL-E task type DallTask struct { ClientId string `json:"client_id"` - JobId uint `json:"job_id"` + Id uint `json:"id"` UserId uint `json:"user_id"` Prompt string `json:"prompt"` N int `json:"n"` diff --git a/api/handler/dalle_handler.go b/api/handler/dalle_handler.go index 8636b167..d52ccf4e 100644 --- a/api/handler/dalle_handler.go +++ b/api/handler/dalle_handler.go @@ -72,10 +72,21 @@ func (h *DallJobHandler) Image(c *gin.Context) { idValue, _ := c.Get(types.LoginUserID) userId := utils.IntValue(utils.InterfaceToString(idValue), 0) + task := types.DallTask{ + ClientId: data.ClientId, + UserId: uint(userId), + Prompt: data.Prompt, + Quality: data.Quality, + Size: data.Size, + Style: data.Style, + Power: h.App.SysConfig.DallPower, + TranslateModelId: h.App.SysConfig.TranslateModelId, + } job := model.DallJob{ - UserId: uint(userId), - Prompt: data.Prompt, - Power: h.App.SysConfig.DallPower, + UserId: uint(userId), + Prompt: data.Prompt, + Power: task.Power, + TaskInfo: utils.JsonEncode(task), } res := h.DB.Create(&job) if res.Error != nil { @@ -83,17 +94,8 @@ func (h *DallJobHandler) Image(c *gin.Context) { return } - h.dallService.PushTask(types.DallTask{ - ClientId: data.ClientId, - JobId: job.Id, - UserId: uint(userId), - Prompt: data.Prompt, - Quality: data.Quality, - Size: data.Size, - Style: data.Style, - Power: job.Power, - TranslateModelId: h.App.SysConfig.TranslateModelId, - }) + task.Id = job.Id + h.dallService.PushTask(task) resp.SUCCESS(c) } diff --git a/api/handler/function_handler.go b/api/handler/function_handler.go index b39ea6ff..a4dcd005 100644 --- a/api/handler/function_handler.go +++ b/api/handler/function_handler.go @@ -212,7 +212,7 @@ func (h *FunctionHandler) Dall3(c *gin.Context) { } content, err := h.dallService.Image(types.DallTask{ - JobId: job.Id, + Id: job.Id, UserId: user.Id, Prompt: job.Prompt, N: 1, diff --git a/api/handler/mj_handler.go b/api/handler/mj_handler.go index 9edacca9..532134be 100644 --- a/api/handler/mj_handler.go +++ b/api/handler/mj_handler.go @@ -152,10 +152,23 @@ func (h *MidJourneyHandler) Image(c *gin.Context) { resp.ERROR(c, "error with generate task id: "+err.Error()) return } + task := types.MjTask{ + ClientId: data.ClientId, + TaskId: taskId, + Type: types.TaskType(data.TaskType), + Prompt: data.Prompt, + NegPrompt: data.NegPrompt, + Params: params, + UserId: userId, + ImgArr: data.ImgArr, + Mode: h.App.SysConfig.MjMode, + TranslateModelId: h.App.SysConfig.TranslateModelId, + } job := model.MidJourneyJob{ Type: data.TaskType, UserId: userId, TaskId: taskId, + TaskInfo: utils.JsonEncode(task), Progress: 0, Prompt: fmt.Sprintf("%s %s", data.Prompt, params), Power: h.App.SysConfig.MjPower, @@ -175,19 +188,8 @@ func (h *MidJourneyHandler) Image(c *gin.Context) { return } - h.mjService.PushTask(types.MjTask{ - Id: job.Id, - ClientId: data.ClientId, - TaskId: taskId, - Type: types.TaskType(data.TaskType), - Prompt: data.Prompt, - NegPrompt: data.NegPrompt, - Params: params, - UserId: userId, - ImgArr: data.ImgArr, - Mode: h.App.SysConfig.MjMode, - TranslateModelId: h.App.SysConfig.TranslateModelId, - }) + task.Id = job.Id + h.mjService.PushTask(task) // update user's power err = h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{ @@ -226,10 +228,21 @@ func (h *MidJourneyHandler) Upscale(c *gin.Context) { idValue, _ := c.Get(types.LoginUserID) userId := utils.IntValue(utils.InterfaceToString(idValue), 0) taskId, _ := h.snowflake.Next(true) + task := types.MjTask{ + ClientId: data.ClientId, + Type: types.TaskUpscale, + UserId: userId, + ChannelId: data.ChannelId, + Index: data.Index, + MessageId: data.MessageId, + MessageHash: data.MessageHash, + Mode: h.App.SysConfig.MjMode, + } job := model.MidJourneyJob{ Type: types.TaskUpscale.String(), UserId: userId, TaskId: taskId, + TaskInfo: utils.JsonEncode(task), Progress: 0, Power: h.App.SysConfig.MjActionPower, CreatedAt: time.Now(), @@ -239,17 +252,8 @@ func (h *MidJourneyHandler) Upscale(c *gin.Context) { return } - h.mjService.PushTask(types.MjTask{ - Id: job.Id, - ClientId: data.ClientId, - Type: types.TaskUpscale, - UserId: userId, - ChannelId: data.ChannelId, - Index: data.Index, - MessageId: data.MessageId, - MessageHash: data.MessageHash, - Mode: h.App.SysConfig.MjMode, - }) + task.Id = job.Id + h.mjService.PushTask(task) // update user's power err := h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{ @@ -280,11 +284,22 @@ func (h *MidJourneyHandler) Variation(c *gin.Context) { idValue, _ := c.Get(types.LoginUserID) userId := utils.IntValue(utils.InterfaceToString(idValue), 0) taskId, _ := h.snowflake.Next(true) + task := types.MjTask{ + Type: types.TaskVariation, + ClientId: data.ClientId, + UserId: userId, + Index: data.Index, + ChannelId: data.ChannelId, + MessageId: data.MessageId, + MessageHash: data.MessageHash, + Mode: h.App.SysConfig.MjMode, + } job := model.MidJourneyJob{ Type: types.TaskVariation.String(), ChannelId: data.ChannelId, UserId: userId, TaskId: taskId, + TaskInfo: utils.JsonEncode(task), Progress: 0, Power: h.App.SysConfig.MjActionPower, CreatedAt: time.Now(), @@ -294,17 +309,8 @@ func (h *MidJourneyHandler) Variation(c *gin.Context) { return } - h.mjService.PushTask(types.MjTask{ - Id: job.Id, - Type: types.TaskVariation, - ClientId: data.ClientId, - UserId: userId, - Index: data.Index, - ChannelId: data.ChannelId, - MessageId: data.MessageId, - MessageHash: data.MessageHash, - Mode: h.App.SysConfig.MjMode, - }) + task.Id = job.Id + h.mjService.PushTask(task) err := h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{ Type: types.PowerConsume, diff --git a/api/handler/prompt_handler.go b/api/handler/prompt_handler.go index 7e719803..e5275b52 100644 --- a/api/handler/prompt_handler.go +++ b/api/handler/prompt_handler.go @@ -18,6 +18,7 @@ import ( "geekai/utils/resp" "github.com/gin-gonic/gin" "gorm.io/gorm" + "strings" ) // 提示词生成 handler @@ -57,3 +58,39 @@ func (h *PromptHandler) Lyric(c *gin.Context) { resp.SUCCESS(c, content) } + +// Image 生成 AI 绘画提示词 +func (h *PromptHandler) Image(c *gin.Context) { + var data struct { + Prompt string `json:"prompt"` + } + if err := c.ShouldBindJSON(&data); err != nil { + resp.ERROR(c, types.InvalidArgs) + return + } + content, err := utils.OpenAIRequest(h.DB, fmt.Sprintf(service.ImagePromptOptimizeTemplate, data.Prompt), h.App.SysConfig.TranslateModelId) + if err != nil { + resp.ERROR(c, err.Error()) + return + } + + resp.SUCCESS(c, strings.Trim(content, `"`)) +} + +// Video 生成视频提示词 +func (h *PromptHandler) Video(c *gin.Context) { + var data struct { + Prompt string `json:"prompt"` + } + if err := c.ShouldBindJSON(&data); err != nil { + resp.ERROR(c, types.InvalidArgs) + return + } + content, err := utils.OpenAIRequest(h.DB, fmt.Sprintf(service.VideoPromptTemplate, data.Prompt), h.App.SysConfig.TranslateModelId) + if err != nil { + resp.ERROR(c, err.Error()) + return + } + + resp.SUCCESS(c, strings.Trim(content, `"`)) +} diff --git a/api/handler/suno_handler.go b/api/handler/suno_handler.go index a153c049..06bb5fa1 100644 --- a/api/handler/suno_handler.go +++ b/api/handler/suno_handler.go @@ -89,13 +89,29 @@ func (h *SunoHandler) Create(c *gin.Context) { data.Prompt = fmt.Sprintf("%s\n%s", song.Prompt, refSong.Prompt) } } + task := types.SunoTask{ + ClientId: data.ClientId, + UserId: int(h.GetLoginUserId(c)), + Type: data.Type, + Title: data.Title, + RefTaskId: data.RefTaskId, + RefSongId: data.RefSongId, + ExtendSecs: data.ExtendSecs, + Prompt: data.Prompt, + Tags: data.Tags, + Model: data.Model, + Instrumental: data.Instrumental, + SongId: data.SongId, + AudioURL: data.AudioURL, + } // 插入数据库 job := model.SunoJob{ - UserId: int(h.GetLoginUserId(c)), + UserId: task.UserId, Prompt: data.Prompt, Instrumental: data.Instrumental, ModelName: data.Model, + TaskInfo: utils.JsonEncode(task), Tags: data.Tags, Title: data.Title, Type: data.Type, @@ -115,26 +131,13 @@ func (h *SunoHandler) Create(c *gin.Context) { } // 创建任务 - h.sunoService.PushTask(types.SunoTask{ - ClientId: data.ClientId, - Id: job.Id, - UserId: job.UserId, - Type: job.Type, - Title: job.Title, - RefTaskId: data.RefTaskId, - RefSongId: data.RefSongId, - ExtendSecs: data.ExtendSecs, - Prompt: job.Prompt, - Tags: data.Tags, - Model: data.Model, - Instrumental: data.Instrumental, - SongId: data.SongId, - AudioURL: data.AudioURL, - }) + task.Id = job.Id + h.sunoService.PushTask(task) // update user's power err = h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{ Type: types.PowerConsume, + Model: job.ModelName, Remark: fmt.Sprintf("Suno 文生歌曲,%s", job.ModelName), CreatedAt: time.Now(), }) diff --git a/api/handler/video_handler.go b/api/handler/video_handler.go index 42731164..10967f62 100644 --- a/api/handler/video_handler.go +++ b/api/handler/video_handler.go @@ -80,13 +80,21 @@ func (h *VideoHandler) LumaCreate(c *gin.Context) { StartImgURL: data.FirstFrameImg, EndImgURL: data.EndFrameImg, } + task := types.VideoTask{ + ClientId: data.ClientId, + UserId: userId, + Type: types.VideoLuma, + Prompt: data.Prompt, + Params: params, + TranslateModelId: h.App.SysConfig.TranslateModelId, + } // 插入数据库 job := model.VideoJob{ - UserId: userId, - Type: types.VideoLuma, - Prompt: data.Prompt, - Power: h.App.SysConfig.LumaPower, - Params: utils.JsonEncode(params), + UserId: userId, + Type: types.VideoLuma, + Prompt: data.Prompt, + Power: h.App.SysConfig.LumaPower, + TaskInfo: utils.JsonEncode(task), } tx := h.DB.Create(&job) if tx.Error != nil { @@ -95,15 +103,8 @@ func (h *VideoHandler) LumaCreate(c *gin.Context) { } // 创建任务 - h.videoService.PushTask(types.VideoTask{ - ClientId: data.ClientId, - Id: job.Id, - UserId: userId, - Type: types.VideoLuma, - Prompt: data.Prompt, - Params: params, - TranslateModelId: h.App.SysConfig.TranslateModelId, - }) + task.Id = job.Id + h.videoService.PushTask(task) // update user's power err = h.userService.DecreasePower(job.UserId, job.Power, model.PowerLog{ diff --git a/api/main.go b/api/main.go index 17fb87ba..f9c87c84 100644 --- a/api/main.go +++ b/api/main.go @@ -521,6 +521,8 @@ func main() { fx.Invoke(func(s *core.AppServer, h *handler.PromptHandler) { group := s.Engine.Group("/api/prompt") group.POST("/lyric", h.Lyric) + group.POST("/image", h.Image) + group.POST("/video", h.Video) }), fx.Invoke(func(s *core.AppServer, db *gorm.DB) { go func() { diff --git a/api/service/dalle/service.go b/api/service/dalle/service.go index 1d29a731..4e9c2504 100644 --- a/api/service/dalle/service.go +++ b/api/service/dalle/service.go @@ -59,6 +59,20 @@ func (s *Service) PushTask(task types.DallTask) { } func (s *Service) Run() { + // 将数据库中未提交的人物加载到队列 + var jobs []model.DallJob + s.db.Where("progress", 0).Find(&jobs) + for _, v := range jobs { + var task types.DallTask + err := utils.JsonDecode(v.TaskInfo, &task) + if err != nil { + logger.Errorf("decode task info with error: %v", err) + continue + } + task.Id = v.Id + s.PushTask(task) + } + logger.Info("Starting DALL-E job consumer...") go func() { for { @@ -69,15 +83,15 @@ func (s *Service) Run() { continue } logger.Infof("handle a new DALL-E task: %+v", task) - s.clientIds[task.JobId] = task.ClientId + s.clientIds[task.Id] = task.ClientId _, err = s.Image(task, false) if err != nil { logger.Errorf("error with image task: %v", err) - s.db.Model(&model.DallJob{Id: task.JobId}).UpdateColumns(map[string]interface{}{ + s.db.Model(&model.DallJob{Id: task.Id}).UpdateColumns(map[string]interface{}{ "progress": service.FailTaskProgress, "err_msg": err.Error(), }) - s.notifyQueue.RPush(service.NotifyMessage{ClientId: task.ClientId, UserId: int(task.UserId), JobId: int(task.JobId), Message: service.TaskStatusFailed}) + s.notifyQueue.RPush(service.NotifyMessage{ClientId: task.ClientId, UserId: int(task.UserId), JobId: int(task.Id), Message: service.TaskStatusFailed}) } } }() @@ -177,7 +191,7 @@ func (s *Service) Image(task types.DallTask, sync bool) (string, error) { // update the api key last use time s.db.Model(&apiKey).UpdateColumn("last_used_at", time.Now().Unix()) // update task progress - err = s.db.Model(&model.DallJob{Id: task.JobId}).UpdateColumns(map[string]interface{}{ + err = s.db.Model(&model.DallJob{Id: task.Id}).UpdateColumns(map[string]interface{}{ "progress": 100, "org_url": res.Data[0].Url, "prompt": prompt, @@ -186,10 +200,10 @@ func (s *Service) Image(task types.DallTask, sync bool) (string, error) { return "", fmt.Errorf("err with update database: %v", err) } - s.notifyQueue.RPush(service.NotifyMessage{ClientId: task.ClientId, UserId: int(task.UserId), JobId: int(task.JobId), Message: service.TaskStatusFailed}) + s.notifyQueue.RPush(service.NotifyMessage{ClientId: task.ClientId, UserId: int(task.UserId), JobId: int(task.Id), Message: service.TaskStatusFailed}) var content string if sync { - imgURL, err := s.downloadImage(task.JobId, int(task.UserId), res.Data[0].Url) + imgURL, err := s.downloadImage(task.Id, int(task.UserId), res.Data[0].Url) if err != nil { return "", fmt.Errorf("error with download image: %v", err) } diff --git a/api/service/mj/service.go b/api/service/mj/service.go index 3a22a51e..249c2f87 100644 --- a/api/service/mj/service.go +++ b/api/service/mj/service.go @@ -46,6 +46,21 @@ func NewService(redisCli *redis.Client, db *gorm.DB, client *Client, manager *os } func (s *Service) Run() { + // 将数据库中未提交的人物加载到队列 + var jobs []model.MidJourneyJob + s.db.Where("task_id", "").Where("progress", 0).Find(&jobs) + for _, v := range jobs { + var task types.MjTask + err := utils.JsonDecode(v.TaskInfo, &task) + if err != nil { + logger.Errorf("decode task info with error: %v", err) + continue + } + task.Id = v.Id + s.clientIds[task.Id] = task.ClientId + s.PushTask(task) + } + logger.Info("Starting MidJourney job consumer for service") go func() { for { diff --git a/api/service/suno/service.go b/api/service/suno/service.go index 9e293b3e..21e713b8 100644 --- a/api/service/suno/service.go +++ b/api/service/suno/service.go @@ -58,22 +58,17 @@ func (s *Service) PushTask(task types.SunoTask) { func (s *Service) Run() { // 将数据库中未提交的人物加载到队列 var jobs []model.SunoJob - s.db.Where("task_id", "").Find(&jobs) + s.db.Where("task_id", "").Where("progress", 0).Find(&jobs) for _, v := range jobs { - s.PushTask(types.SunoTask{ - Id: v.Id, - Channel: v.Channel, - UserId: v.UserId, - Type: v.Type, - Title: v.Title, - RefTaskId: v.RefTaskId, - RefSongId: v.RefSongId, - Prompt: v.Prompt, - Tags: v.Tags, - Model: v.ModelName, - Instrumental: v.Instrumental, - ExtendSecs: v.ExtendSecs, - }) + var task types.SunoTask + err := utils.JsonDecode(v.TaskInfo, &task) + if err != nil { + logger.Errorf("decode task info with error: %v", err) + continue + } + task.Id = v.Id + s.PushTask(task) + s.clientIds[v.TaskId] = task.ClientId } logger.Info("Starting Suno job consumer...") go func() { diff --git a/api/service/types.go b/api/service/types.go index ad9ef493..3ff32979 100644 --- a/api/service/types.go +++ b/api/service/types.go @@ -90,3 +90,29 @@ const LyricPromptTemplate = ` 尾声: {{歌词内容}} ` + +const VideoPromptTemplate = ` +As an expert in video generation prompts, please create a detailed descriptive prompt for the following video concept. The description should include the setting, character appearance, actions, overall atmosphere, and camera angles. Please make it as detailed and vivid as possible to help ensure that every aspect of the video is accurately captured. + +Please remember that regardless of the user’s input, the final output must be in English. + +# Details to Include + +- Describe the overall visual style of the video (e.g., animated, realistic, retro tone, etc.) +- Identify key characters or objects in the video and describe their appearance, attire, and expressions +- Describe the environment of the scene, including weather, lighting, colors, and important details +- Explain the behavior and interactions of the characters +- Include any unique camera angles, movements, or special effects + +# Output Format +Provide the prompt in paragraph form, ensuring that the description is detailed enough for a video generation system to recreate the envisioned scene. Include the beginning, middle, and end of the scene to convey a complete storyline. + +# Example +**User Input:** +“A small cat basking in the sun on a balcony.” + +**Generated Prompt:** +On a bright spring afternoon, an orange-striped kitten lies lazily on a balcony, basking in the warm sunlight. The iron railings around the balcony cast soft shadows that dance gently with the light. The cat’s eyes are half-closed, exuding a sense of contentment and tranquility in its surroundings. In the distance, a few fluffy white clouds drift slowly across the blue sky. The camera initially focuses on the cat’s face, capturing the delicate details of its fur, and then gradually zooms out to reveal the full balcony scene, immersing viewers in a moment of calm and relaxation. + +The theme of the creation is:【%s】 +` diff --git a/api/service/video/luma.go b/api/service/video/luma.go index f5eba330..ff164998 100644 --- a/api/service/video/luma.go +++ b/api/service/video/luma.go @@ -60,20 +60,15 @@ func (s *Service) Run() { var jobs []model.VideoJob s.db.Where("task_id", "").Where("progress", 0).Find(&jobs) for _, v := range jobs { - var params types.VideoParams - if err := utils.JsonDecode(v.Params, ¶ms); err != nil { - logger.Errorf("unmarshal params failed: %v", err) + var task types.VideoTask + err := utils.JsonDecode(v.TaskInfo, &task) + if err != nil { + logger.Errorf("decode task info with error: %v", err) continue } - s.PushTask(types.VideoTask{ - Id: v.Id, - Channel: v.Channel, - UserId: v.UserId, - Type: v.Type, - TaskId: v.TaskId, - Prompt: v.Prompt, - Params: params, - }) + task.Id = v.Id + s.PushTask(task) + s.clientIds[v.Id] = task.ClientId } logger.Info("Starting Video job consumer...") go func() { diff --git a/api/store/model/dalle_job.go b/api/store/model/dalle_job.go index de7a13a0..f22f7426 100644 --- a/api/store/model/dalle_job.go +++ b/api/store/model/dalle_job.go @@ -6,6 +6,7 @@ type DallJob struct { Id uint `gorm:"primarykey;column:id"` UserId uint Prompt string + TaskInfo string // 原始任务信息 ImgURL string OrgURL string Publish bool diff --git a/api/store/model/mj_job.go b/api/store/model/mj_job.go index b4e03a6c..feb0471c 100644 --- a/api/store/model/mj_job.go +++ b/api/store/model/mj_job.go @@ -7,6 +7,7 @@ type MidJourneyJob struct { Type string UserId int TaskId string + TaskInfo string // 原始任务信息 ChannelId string MessageId string ReferenceId string diff --git a/api/store/model/suno_job.go b/api/store/model/suno_job.go index abbbd631..ecc0de09 100644 --- a/api/store/model/suno_job.go +++ b/api/store/model/suno_job.go @@ -9,6 +9,7 @@ type SunoJob struct { Title string Type int TaskId string + TaskInfo string // 原始任务信息 RefTaskId string // 续写的任务id Tags string // 歌曲风格和标签 Instrumental bool // 是否生成纯音乐 diff --git a/api/store/model/video_job.go b/api/store/model/video_job.go index 5dc7cb3e..b3bbb08e 100644 --- a/api/store/model/video_job.go +++ b/api/store/model/video_job.go @@ -8,6 +8,7 @@ type VideoJob struct { Channel string // 频道 Type string // luma,runway,cog TaskId string + TaskInfo string // 原始任务信息 Prompt string // 提示词 PromptExt string // 优化后提示词 CoverURL string // 封面图 URL @@ -18,7 +19,6 @@ type VideoJob struct { ErrMsg string // 错误信息 RawData string // 原始数据 json Power int // 消耗算力 - Params string // 任务参数 CreatedAt time.Time } diff --git a/api/store/vo/video_job.go b/api/store/vo/video_job.go index 3582c667..b7530132 100644 --- a/api/store/vo/video_job.go +++ b/api/store/vo/video_job.go @@ -1,7 +1,5 @@ package vo -import "geekai/core/types" - type VideoJob struct { Id uint `json:"id"` UserId int `json:"user_id"` @@ -18,6 +16,5 @@ type VideoJob struct { ErrMsg string `json:"err_msg"` // 错误信息 RawData map[string]interface{} `json:"raw_data"` // 原始数据 json Power int `json:"power"` // 消耗算力 - Params types.VideoParams `json:"params"` // 任务参数 CreatedAt int64 `json:"created_at"` } diff --git a/database/update-v4.1.7.sql b/database/update-v4.1.7.sql index 4233bd26..b33b7f8c 100644 --- a/database/update-v4.1.7.sql +++ b/database/update-v4.1.7.sql @@ -1 +1,5 @@ -ALTER TABLE `chatgpt_sd_jobs` ADD `task_info` TEXT NOT NULL COMMENT '任务详情' AFTER `task_id`; \ No newline at end of file +ALTER TABLE `chatgpt_sd_jobs` ADD `task_info` TEXT NOT NULL COMMENT '任务详情' AFTER `task_id`; +ALTER TABLE `chatgpt_mj_jobs` ADD `task_info` TEXT NOT NULL COMMENT '任务详情' AFTER `task_id`; +ALTER TABLE `chatgpt_dall_jobs` ADD `task_info` TEXT NOT NULL COMMENT '任务详情' AFTER `prompt`; +ALTER TABLE `chatgpt_suno_jobs` ADD `task_info` TEXT NOT NULL COMMENT '任务详情' AFTER `task_id`; +ALTER TABLE `chatgpt_video_jobs` CHANGE `params` `task_info` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '原始任务信息' AFTER `task_id`; \ No newline at end of file diff --git a/web/src/assets/css/image-mj.styl b/web/src/assets/css/image-mj.styl index 61845709..7e5f13c1 100644 --- a/web/src/assets/css/image-mj.styl +++ b/web/src/assets/css/image-mj.styl @@ -473,8 +473,13 @@ padding 30px } } - } + .generate-btn { + .iconfont { + margin-right 5px + } + } + } } .mj-list-item-prompt { diff --git a/web/src/assets/iconfont/iconfont.css b/web/src/assets/iconfont/iconfont.css index 9871d1bb..57f915d2 100644 --- a/web/src/assets/iconfont/iconfont.css +++ b/web/src/assets/iconfont/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 4125778 */ - src: url('iconfont.woff2?t=1728891448746') format('woff2'), - url('iconfont.woff?t=1728891448746') format('woff'), - url('iconfont.ttf?t=1728891448746') format('truetype'); + src: url('iconfont.woff2?t=1731289567907') format('woff2'), + url('iconfont.woff?t=1731289567907') format('woff'), + url('iconfont.ttf?t=1731289567907') format('truetype'); } .iconfont { @@ -13,6 +13,14 @@ -moz-osx-font-smoothing: grayscale; } +.icon-linggan:before { + content: "\e641"; +} + +.icon-chuangzuo:before { + content: "\e6cc"; +} + .icon-call:before { content: "\e769"; } diff --git a/web/src/assets/iconfont/iconfont.js b/web/src/assets/iconfont/iconfont.js index 1cdb9982..ff1c4172 100644 --- a/web/src/assets/iconfont/iconfont.js +++ b/web/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(s,50)}p()}})(window); \ No newline at end of file +window._iconfont_svg_string_4125778='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,i,o,z,m=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4125778,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?m(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(i=h,o=a.document,z=!1,s(),o.onreadystatechange=function(){"complete"==o.readyState&&(o.onreadystatechange=null,p())})}function p(){z||(z=!0,i())}function s(){try{o.documentElement.doScroll("left")}catch(l){return void setTimeout(s,50)}p()}})(window); \ No newline at end of file diff --git a/web/src/assets/iconfont/iconfont.json b/web/src/assets/iconfont/iconfont.json index e32aad7f..fc973f80 100644 --- a/web/src/assets/iconfont/iconfont.json +++ b/web/src/assets/iconfont/iconfont.json @@ -5,6 +5,20 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "15330210", + "name": "创意灵感", + "font_class": "linggan", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "39170417", + "name": "创作", + "font_class": "chuangzuo", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, { "icon_id": "11231556", "name": "打电话", diff --git a/web/src/assets/iconfont/iconfont.ttf b/web/src/assets/iconfont/iconfont.ttf index 14ee893b3cd45dcecf1fdc9a909f799b4304c8ae..d2528705c3913c775c266fc172aba78670e7b0f3 100644 GIT binary patch delta 2809 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 delta 2060 zcmbW1`EOKZ6o#LfPTT25p_D?Qg;Gjewo(d$V3o?|LKRd*MFa|E5kVFk1T;)UgM=V~ z4k3m_Bq&Sx!4M#X9~vcwC=Cz2WhWEeCy(6>lQ^W{Z<6I-@@WkOBOaYk6bl&5pY?IUZNA-zRK6V zw26u(%Ujm&eeLdfh+Grfm#tXPbm><6Ry`lr^)Ht(-zAcfNb; z?uxuW)3)e1PBfg=7M^QP_Kkdh>`r8Nr0Qbl38LSS*7<9w=4`#?BC+TJ-P%F}>5NK# zoK_rZNM1;*O0J64CWpn!A`_C0u`d$g4_nx*v6XG?WEbzUw{sjIj3b@nC_avJf|LJ^ zHrh2l`yT_Q@E~((NYKOs3}XO&w8A+|Vz54cHqX$L=eeJO^re<@%ws4IF`tp-FpK+m zgeMqFIaN&HVMbHU7#?R3rPR}nO75k%3elehCQ|Fnb?D_ zjN%?jc#5YP&P0_upG;L{8hJd+3ryxois;32Jj!%tP)0E^GU!4DSt?&fvMJ+s@>DD* zksI`h9S?hL3&1o5v|3EU1+;EVVg^(JEX|Qlm^=_rQLuDJ<-sx>6$;CAR5DBk45)Zm zmb5f|P;iRL0s&PN(`N-#Tdb?2Dr4Q8U>7TJRC%n#kp@_)BQ>!8j&#Aw9Vvu`4-q5= z>PLkm*|17S0%BE;q{PC@1@klyaU?GmRwpDhR^v!=Y`7!wvG89)Ho!(WG6XhC?+-h9 z15*|QatSupkzcUzav|qn;XWY`VfBvOgoSbo`3h@rfPB^I(V7Q7&2Xl#)qYhz0tnH*aYkp7*f zTd4yf=VPxr$^f?3Q5vv~j&gy$=_n!CW=C1Uwm3=+_Ku_cU`ah<_w%<|Yumg_5haGejL+p@456wzYK*_|~9c2{z)KOZo(~feBeeNU_VeG7LR36zJU4(sd0`v3#oaIdJL(>j=Bx0mmKvSQg1uzK%`Wa0A-rbIuuL))DMmt z6seyawJK8A95pSj=(&K}7gw~pKxkyzHgX|a7M-7#9jlJj#}1`eq;E<;pHZ06n6Wo= zO6HNw-{aNsW$~l&t67a%d$QWIZe&l&Zpl8CQ<-x(w>&p7C--pP?7UyPOv<;eXSxk8 z*w=k^;mN}5J+2lN7Pa<__1x8~qSw~q3B|3&H+paD6YaCUBwo^5T2$Ixdb{s|zPJ0e z^t)JAQg*a_P5HS2n<{2id^B)IWxVoq)s5prYIIdaCx%g6TRPhA>mPF`PkCc?3=*B^{V;U8~s=+6KE diff --git a/web/src/assets/iconfont/iconfont.woff b/web/src/assets/iconfont/iconfont.woff index ee2f117c7a438b2cee021d39e22d471319cf75c6..550b27bb923acd1e59a64b330bea8998764e0eda 100644 GIT binary patch delta 21079 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 delta 20519 zcmV)EK)}E7rvb#H0Tg#nMn(Vu00000QN#cX00000dXSM6OMhaBp*T002)o0007t000A$K))!W zlL!HWf7Z)ylvNzY@$a-lp|xtMcWu=|ZM9>8YPGi1TFa$s)q20QURp^YzycN~u!aQ< z5fg$jh6Hg#Wob-fT(}yEESj(|A!#76eBRT9uwzN^cjjsM16ZhY@@Zz?WO_R9d4A6n zSOwIFXG1xjE>VhS)cqY-OSS9uG}W$`>*nM2f7gu0d-~O+X0@tao$6Laed^bMhBcy5 zjcY=an%1m#YLE8opbl$JM|DgmbXsS%pmRE}MP1M(-O$aVTU4`s%bG@PFK>k<QQfP*TLGZW3^qUR(9Q|13Gkj*HbzZ zf4f%iU{~_4|N5g8cX=+>H+;)?e9sU3R9o}4^-FF2y0RAdjo)vtKd8p~>kbxd=T*Lp z)1766Ue@y%b$r2AdgA;)<6|CTnwNQs$JxXXGm(sOzT$cAVv5bY&bthE z0p8{r+8JgoUA)Ajk)#fG(9D}WM;}k{e+nC@(8>gFMW*iKBktz`TIlBm+IXK2*~k{w za4)Olo=kE#pYS=`c#j8pm`{0wcldxOc_fnCz&&)*7&ousKRB`f+oL)EC@-wM+L0&6 z;*?Rz;=ECv#mS?3iwvN$MHqaKSaql)DoRIf$8 z(FTj8qm34sN1H6tkNPa;0QFl;1RAiI4K!#mC1}XV*ESpZa||2#Zyd3hCNyd>S7^*) z!q66rSwmZmyyrHH`9s?+CJ~JrfB9Zc7Rk?+~G#q6S4iz!AsEq`xlkCD%0 zpVjiV-*OUlz+&#vL5l`Jhm3sx4qLPWnzQH!bkxY_aLmYOb;8JbIc4O}^rJ9-f046u$;jt+ z!^m@U)1v1n$`*}BvD@+W~o*WB~&N#>r(Os<*ScSuM=5|VHvA`lLR z;Zy+uFHi(w1^+AHt_Q1&u1b*4YZnztL}$>x|`Se|El{<4spNT&FiVV zs;lex-Bn=-!<;@!en)O%ip(&xfnf?3A3%JmSn5aM6vt81N+CBbe*}ICB@s=s4XfE| z_Ty5P4_UQp5(~U#Kn*vVBm$qrW2n_ElJ1Zc-9NZ_!|r`gRt69nyeK@TP5Fsh3f2H~8PCK2pr>~jQ!yISC5;m8OO@+tw6}d!W z{l3vEM@)F@I;8*xxmF8$^ zp;XLeRmi8qe^9H!kW_?D14g|lsL+8@u{8!+o#y{H6}&0|1Rdx>S>86FmfI)PEEdSw zS~OGU{@rKo^9wh~O59LZUwx-8YGHFnMzDjKP;Vjb7t}5zr70Nyq4-Omd9hEt(r0x_ z3W2b-Jpt`!LOq2Tl}PMj zR*-!(1>HjY?2G$+;$HW2j)^jf2IcnqWYsTx(x+c}thzpyNWao;>O6T=@Domx4E5_? ziJ<(^f3qdZhR#6=A7M4c@JD?@M(rQIWU9I=n@VOhJtHf+58bJ%Kdy{tqK(1vbo7b; zzD&Tdz9tC2e1&E>Z~JqfCGvPcw!YE6i@qISBCC?ScTV3(o+JxQH{CnMlJ4$~EZrJ) zx@ll;O?MT9lBha{8hQ-^HIqC(e!PZyx@K2=e{{ucR}T$ribTSZ!bG7kv3k7l7h{)< zqwkiB&Li9BR`$Zbm2;n*Th-Ic{*7FoT031TO_%WJr;bg2+S|XUzeVmKW#)2*F?icD zL+%o$i>l@BTyGJ(iQvyjpf{i1{s zhefC#;RRLJC0&FDFiQm1Uo1{eeQ;{BP(nl^9Qp@dH7&Lgh+92{G8B|!upU^2@9stb z98F_D3mS5OAjBK8&Iv))RBTpLMTw1uf3-Bna;!fl>t>?7Bp=s862zO5!V?Z}T0UFu z?(Ujdv5_S#;V39P-9G&~ONgJ@#T;iAn9swghUj?E&+bR=c#UD2kn$qUb4PixAYhC| zIO&cpYbq0p^qe50#oErF1Ffm4fYN=A>s?BC#u|Cru(EOGv`-N~eQa-+~IyAeq zKi`wHl>p1KM25bzM!f&hBZ-(D#T=G6fDgj-uH#1pj__P$+uPUgdFb+9!zbV`v4SQf zVLQm8Y}i^f7#2m26(i2O6g?Q$fAx1_PUaCoJTHix#w!5{b3B1&1cB&2EhWhQVO{cb zf=IZSCiCGm;kcw0FM4!rs%|Nha$}Hd-K@9p8 z-HLXF6M7cQK20)wKqANk{@uwB|!$OKcrLI`mIf6?GL%prnh z?AKrg_!l%Q5U{lNt%$|2BmE+*Pk_uE+C^Bb`m~Hl$bRUr8Z;C=z!9R#64E)HD`3O95#0p88_*Yj;!OSIClr@qD7Qdf1h|oBR#3>nn|cTkLZ;QM z_aj(4lmzbAFv{ zr00A|8_CD5QK%2q)4sXJ_A1gf%lREtESKwZPz$P$LUlXkpX;3;e{{a9S?+hePVR!e zGr(L3-&HCCHIdV6W(YbAv_dhLaX;0nWvWex13K&ETl8b$J1F(xmaXZzM!nb}yqcZ3 zTi&bf4#`jN$J|}dvm>nLcV6*pnjghs8b{dY@8aDK^exbyi_a)`+=S*D+v zgm14mt5#=Lv;A}i$51s%X9*C1JEy2tsX{bY$wHYVakWB--hee;<7)lFLP$pDn+7cJ}J! zD5k|Vc$}XV$BXdbXGhu}85zMlM=pO-N7*V=g_^0fElNJRCMhla40)DJFdCDFZ(vXt zIy+h33QVGqOSb44_%%_cQ60neew=G$$orj`^J(3-butL9vo$-M%MEAya?VMV&Y_2# zd%NeBrqfI3f4b2zGGXhdURW&aoX8H(4rk-e>-ePe+nA$00;M)V;YZv)f%6&scT9kZ zGF{N8%=um7GF2;qxI&{2y~!3EI!EzaK@aidl6H5pw>ODj2Dk0UFSERJr*kKdzu)d= zd9O&T2bfVd$^~=PaojBMwhIkC zSlFa6q~$gbF!#4UAIClnFsA_rWB6;QPo6|4PM-8|?Z1<2hzf9x_P_(eDp~}}nLkcI zN`5q-A6-EmET0V%6~gU*a})A7==tZxUHtzHc^8?X{D4uV?DARSFon)C)$lXVe|hDv zb0gW~zc(~H6-nzX2mi1?9nHiw`OhA!hi(hSUB@|5h_z3|3WXS+h!xu23U~iJdg4alrEY@$XP5#| zQ_Lcbw@5wc!a0bimO-r&fAC5+rMO^zVJz{Vw|~<$+XWAPqI;%mt~cG@lJ4zIqvxDg zU;PL!Jm%c@5%ighm4aG%tg0Zg14_2HbZQ85&I~P#pGfz%|9bMVe|*&Wz+>n)2NkST z9<3;aGc+vAz&KMJ#Q^F9Ixf?w67!C z6hRdCEYcmHz{kj72iJL&69p6c8v^L#OV$nztzB}ii(e=Y4Xqm*a=v!Hzu3ozp^pLeHw6_6cy{!Fx`g z960#-_gDD7%&HapfA$~skqIbaDD6jRg-2-BM;42MlYZfas}Wgw+Yb3%M>eeQ>qDJA z@)CKO^Z=BEnXVTX`D~c-Ovv4>9%G0X(B^@1PkqVNOKZL50q4ncB4}akeG@aK-rmy8 z#QVn12~*s18s>_wr%n*X;k%!Q`KiMy z5SR#)a94X5)5lbR-dVzoG7K!LTnlI|u4;2h3PCv@#)dBX0_1S;_y6ZV{P4H&Zl@vf zs3rmD$vNMUe@u>5vGm}BryhLxVY2_f_DSuA8%{ky4nE6%pSNY6{T|QBf`mTh*S>Va zlACV2Y3a>3-%R}_H{5UoU2A-2j2D1bjRCzj1f1O_N+;%Y7+lLXYYmFQ1;Bh5=2OL# zn_tY-Yx)?X;)OAsq&Tv0UIx_i=spvw;odE+nVA-KfA(d1QUBB+LjG_D{R+)AH@9YI zTbr9RABpu^V!l3@9B6O$(!kl3uU3~=kw20~S7W*TJ9WpKcBr5JH1&Rg2PgY+Uq(+y z{AkP2b`8mnm+!1bpAKwKpx8jY=rej^*~;tZ<+-(?*=nBFWzOLIc^HQQW(sIRhHJRX zx#505e`s+nH#>0`Cz>_7GbuC!SY~8Z>;k$DR>Gw>VCYvjFP|-U1Or<(og?3j}=51Jr#gHPjRCp4~Lt9qt)Q4ef5Vb|0h8{7u3@-^x{6Xqh=$mo_p- zV_R0O>>Chng0|ox5727PH@auL;XyUpTCKHvf5`cU+td)Mf!~2KC&&bu1RAHvFaj?)wCZY`81X0E>D>Y0gB;nrihrMcYFS?WyPe6zT1X2trM zt7qU@zhY+FXCM6wt?J?UvtyP!cd)#{<0+!ZoinNkov3fCd#|r; ze><|R=5k>GxF+0Q)VGld$af~ZPEf?u*jB4;YoHUr)&XS+APAWNOt;1&CB2 zPS*|cj5;&X`B?4MIsRADNYOr zL;;w=i-Uq7iGjpmq*rx55HSJ)BeHb9w8BQ0v9g~Q5in5tg7bhL38c~BWrIVRyd}w! zY~|6x_$o4?gfAK^uZ%nIQ4|&kNS2qBh>{NXsb~``3bMxWAs${Bl+-Y^gDy49e_+(I zf@U!kblwv!X4hp(k)_EvIw;Zi@T{Q2OP%-Vx@;iBu)Fe2yBUesl8pkoG?8%k*bU@0 zvIgjbQD!%+Iy$s<-~|XJZ|LyCNF_-~#e}j8uCf7ATe&epH|DiFB!3$Qw zT>@Eem$)E7I5%Rt*(B@kLbnYdH5!y3$WSeYo8XD3fqFjYHExVY36yqpCO$>xJw;3M4&MD-{OR-Vh+aaBd5aBnQLG*Ud&6W1RC=6doox zH3$oIW^P%8kfAZ>R&)hgT8k`SI~(nZ4WSv+h|I2A9yYAObr-H5_;}ZfXvnH;+`F-2 zg`z9U{cHP8!>w$DfBM%v(!RS~oK9}rzbzTDhQk4_ee0ST7N@rC*^%@-!w^e+61ZYR(T0q>|ZeGJ9;6 z%(V!qqyPk@(@BE!S4^^_hqE-2=x)BAUSiX7_LB6#`hkJ6fN@e30ZHq6fS6uP?$T4-o~puugpyBCu}xm+Mv4=q_UP~rM|=32o3 zP3pc4O_f$8e`x8%iqi0b;o$?$&$^4LRi)93M@B9lEv-rwyU}Oh!;7;CS|Kr8gvfuU zTbX!8-#?Gjt;tsUL00sOqMtp_3%TxjPe(ueD$rk1pubW~57T0%nYGML=6dEH*hLI? zhE?)pc7G(>%yAy^k)ec$@V^YB0hB8VIbghm6rwoRf888_&R}JeamXDVb4$Uz!{Q_tbS1aFBy89aD3@AqN67s=2ZMK0J1sal;IR z(f7KwT6cF%>(;bxK@0@A;bFnYaX`Zg-P%tgQYsQjNfAjp6S_#SgpAbPEk*m%*zHjp zdPJCjf80Juo5c^vfe(1Z(F2}$(DN=1P^HOY41F?LNy1a9Bu&Q=shSPmj0r4RY$huS zBM}UOv*if5TI#dpX)+6t9B6;kQEv5Ps&NBA7qXfS57`5MW+x$;@@VxU z&$Xy{u&AOGY6v`loa=C{x_R3-wr{$aG-{vtf4l9Q4&rnYH|pDW{^-#DcXsD<4}a(K zLm%yq<7C>o=^jbCN6GkCRI1=5;|uhO$fp`6mzb4&m*E-djT4O z?{-7|u+Uthi3VY0JXuS9%!AYL8rmT5NneU3XqJws#k;mH0P3rY?*P8D2$U3QLN(26 ztf`fXO`+40E6Oq{RSUe#04cT_#g6(If0_Z}0pNB311m!TJNa%vR|BUWs&YgmQiz{o zk)%r9k!VzpBqAYQi>Kn6VZ@SFz^BEuXk5^Zcsin~fk>daK_vc=v@Gw_6uVR_M}0oc z$NPckDpkwTpdJotv94-Y*!Br(Z(J}n%;(4OM;g`EJ4DqK?_N5zBpDX7-Kt=zf5n8A z*5kbM0vD2Bd~O+UB>2g{{<_4kzxLg-%p3BZZ#sI562;2h@0CN`kplo4IBwTP9FJK; z{_6dMNvJ446Gy< zAOH5Hoav195hEm%o@r4_3M=s#$4e)iFMLSiV0_<=N`EDpqAarOKGs?_f4i|&@C%q1 zS&qeo;}t=`sg$^8YI*h1Io4?Jl%=G!I%!XHT+rmkfB^#7d-^26-5ty@a|meuw=r*L z-oe}fv-c{jjoR~2AWsO{;|e}T^93zUs?`5np{x>{6kFLgX2QzG*|Q78ftFR^KbC}blK z>_BL{;AeS~cC#ee&DhSX{9=ZZm|ZGGH?B@{0;O3DVYF+ov7kw{@h zD-lg*5cbErlAAX1J`@V()yJrT!Pr1N(bz`btou2_0V^r5TkkhS2?F^Qwf}J)zo)zNY(v*D1$kfmeIN`Ka{b0R$f#IWurV#OLm)n z?3U1m#+yK8e?S)%w-tnap&iYC#702(K{bRGZ8#guX2SsO5DO4@<-Ur)x-KXoeCpSJ zUQl8J2k$~^I4W`oy-nf%RFWEXlhg=JS(L}#Kt4xqVoWA+Mw^>NtwOVEb5_UDfePN? zN8WSl`>|~^wOj){sO7HnanEbf{o!gd1YpJlivK(|3E}~?Xam$kiNQLpMB8wUNUczd7Uhj% z8eT!gf4gay2O@mBRMa{afg1WsK*y}em32Ni6c2FWXr%`O;3lddquv*;go84`&g0WRpa?;Z|vI1uOfcg_XvLp%IQL6H3^OZI6YTx11~AW|N% zO_cHj6Q7g-dnhsv3W(b+NaM#EAG*o8=jNLxe}5#`4V&YPh2eWp*o4}5e_VXWBxMZD~jFSx)g$I(5soo|F_@pwqFe-wDA zj>=1Lby4?{ACqIQj(-_5f1VWvtmZMGJ3R|px_e1S!(xZ{ERcml#uY=thd1HFJt>SQ zojGHlK)!nF3RzKPbd4mu5Gck0_{iUu6lF%0{$5s)5)^I~BRF#Zhf0mW@0UEjh(r*v|$Vs>=DM*!8+uCzbk2=ohX!W%1 znm@xgeu+Fs#@sJlPi>b9{qPlZ50|JoavV_;URNsNiYaWt4Nz@dwb`=yGm?xV@m5%e z8p)os=s2DtSb!On`r*l4;nB&lFejqFmxS+-@MNKXuCH%y=X{^?VszV~e;xJujz)D$ z>|3gt36D*VhM}+bCF_YqeWaF5)*Q7sQ7lfZrVd`3xgbp$u=E8PV8Bj>BatxY!`CMx zcI+w=Pxa03q%HTSQde}>8rzR-Zwz)_+j~KVmP>Ehf@eByj?@$FUl%6ks0}JO-%qE_ zrAy3A#$2*=ag6RKzaUq`e>#|E)-k(aj9OGEL-on-WV`a3aaiqj3eBm=(f#^b)v{Z~ z#+h-TLSO+HA&=icXGRqU^SlVDUje|%cf}PxE9Jl9Y}n^~G`_Obyr2nB&s_XRV)KH_ zXr$G*G4VYWY4<6-o`Q9gU6Rc%nWj$r*V!eR%#vl)x$c;3rhG?_fBK*~a4j!v%6cpT zW3!`?NxnN4Z_wdCvZG$g-IJfsT_mO=yo8?1w5D1a*KwXo4^0lGU5Ad1560$$rvOif;TyIx7cobf>#2>s zYn~1WkFuG%rz@u)RcP8ZYRb`r0Ls!?%>Y}ej{!`yQs+FBf8KK+7voYi+Gx?$v1r%h z+Aq~;n1Yay#dS=9Tqtq$ad|NLgF;N_pNtiOxsBl;$4aI4Yl{8@ErKGhiz7(p+i6}# z;6Fi4K7lb|G0Oqsg#CvFp6~*+!E+dp%#(tI+V`S;RJP%Kh`K-bsjBbivZ|ujoQx|; z`7yX;GLemFe^w!O>KUr@Ad|5I_9JAaE%-b2c32un;>n~S@;v6CWe%|{0ty|7Ar#@^ zl{^+j!FfeBRd^otyf+0x0eH^U%^J+0E2ny+{xt{P2EzHQ5A;#91w#owx%-c_usc>9 z05XkmmrNd$sO9eARrk#w7J>W|4z0O&;g7Yj1UuKnf32i}-r-!A3B{u5_Vy`sWi%F# zICo+89K9y(UjkM`KhtC;{&YW4&2r~Xuj#d_Nf7~^O;@aL*F4=jYQQRQ)Ec?Q8~T0f z-};&>##;M&``2`Lb-i}shKny=yRWZ4I=5=Fihlgb-s`V_L+8;;czl1;`6#MPEJb z0i*+K0^7B*_*=A3$pIeVg%)roQn5vwT}%t0B92WB9ec;JP@Dh} zEXb;)OY;w2x#I8(KltJ={+b#yA=~+9`d7#mf0JoLCm%rJ%=)gGE|ObTbCh7IVizM3 zNe||ATaB|bcsb@QpDxKr5_HJ~ZhzqtAl2icxBULg7ios9`2<*U$3yuNnaXru-|oI} zaAaT>iiM0qrYpO?%!&olGt-686agl~N^L82=@MO~ck$1@1!GnTb{Pr}P^6n#96QFf ze?e)w^v(u`G0s>#nv1g25(V?4u;uBAnw&@G3?t7dWzj^10Cc0XUb6)%2rad80>C{l z?F3$+CXnp~zl2|w{PK;_zL@9$=QFXHrf;t1a1ceRxpsH1n%L5_McKByF}ILGnv&e=`z9M}iU5ldC$fwvXnj)g1c!(!c&|>9)I% z9J%|py?bf6gV$~Z`i8FW0<#3Zvt#d{Zh7(rfs*AVuH&0jXhtQwE%YZ!H5RFPs)b8a zJ;>zvWk(S?cIo)k^4s6yy!@8imy^#ghLqb69r^bohi+F+Eqi0J1xR3zUbXGvNb#a zUicrf6_iL>-#hiwIN1`9pL!yWnmh_bBhdinyDCW;`H~eB=?zDtk-k=)=OaoWppd5X zdiyn(5dIO6tG3q8Kx3AUefnVbA6~N4?@2hXBoZi|a9*DZ_T&DUnf^X=f9jbHx!i_l z!jU~;>zTq;K6N6XEb@%+BR?b;Gk(C~Nv4MxVkTilY^Aoh>RD>;4DDLzD5m(r8L|aP z7=xN{_v0~ap-#E1v8cjA{g9W0ydu6L+FS39y3U?lr7~Nopi3gTTs4<#_nghz9#oV< zrCI>DT0!43yGOdaM?&%rsL0=CfN{K|t$s3DV@KVn%b0T=C^!{~BRQ+=rOc%!{$5qbSsl&-7$fAIECJXu32zGqtug zG4&k!z1O1Ka`&o!_IPt^SAR6Rz0s5Fx8f47ik5G3b!mCeL5>x!?pc29fVF97)Xc@h zmSHIYLoY2al^IWtfA$nPjbDX*lVd8>>ca3i8IP-}dGfQf@S#B^VL5bOnaXdogM-t9 zgBc`Wa?zfL>h*{AT=eq(JrC7t5AE5136ddq+2CLneP}TISO$tcmK}6Hn@nD|^05_{ zCsL`zb1bHu^A{WtOj5(nCIkeOn3yQeQ)f7=V)I}Il2Fw}~*_idKb=^(A&sJL(-<3Y{8L5LZJ>3Adul!gfx!xzIr;z_W$oNpr3-J2|+u_Gv36 z`>bd_W6Obv*&pf2*qKDMG?(a$wl8Vcw+>FuHs;J^Jmf!SS>fq=qBWH7kJY4LI6VO@ zD^T|YIKQOXe}2k>{iTOT@q0Jst@be-O_}Z2!gfpz5<&po5y1#39H6aeH~y%V-`Ku% zG^`VpH1QfUiBbEQ-L0sEXZe1hfiW8lL@f(jR}SLn1X(ag`c=~Mj+cJ(h%QAH_C zH9EN2!m|VOL#c=riO#NCHQde1vP|rBxx1tpCQyyhfav2S-Vf}lD6(v@(B0Q-M(cff z*|s>A7g>z_nsn9hq51y)`9sGK&G+@qANnUQl*@`b>knoPG0k&ACT$9ViZV1Z!=((ki|0-1i2H|I4uz^Vzo>y}&=ClZxf*zVxb ze<7bEQNW{Vrs&!k0;$)bo)%9M3Uu+n9eaQ7u=`=&r@}GM+$QVn?v(PE*c0#bLA}cvgjEjPXqaq7e5hCtB9Rf%Zc`@ zD&{Mpc>Cv}xZxv%Mr1x%z144|)_qT7%WBafg$(6iTOSy=O)o6AxnvJS> zHeg5OA9bZK=!S7L61l+XLpKJjux!SVe-e~+F_0|n#GgeS9RN8&#sI^m0Yc1B*kyUA zNl?`@_rW=8YnRKwm)E%S&$ZMzk2_1CB&k)$*w*QIsWen7;dI~ZV8qP#M?$&&So_&f zZXkvp?=SUa+V73`?k{o8O~f8NF; zvHo1h?kiZ&RJ+?BiT3rS@xe^@gML-@zv7EW^wdCeFpE9gvIX)z@(!R|m;$vAYnD(F zjZvhE><(&ewou2Wonk7oBfV62%0UHvGjrh@vw!FIZpEqE7C zvow2sI)U`AZsg0$L%TPn3tRe~f8T~fYTx)|&GcK&tCA~Fm|2pgwDIpwzm@foJAh)W z1BI}LN<)mMtB!WnB7#a>b+m2LVCOyo&OO#Q<^c-6(*SPs`y)+5sdilAkPPVkzi&Y7Yc@re~fGx;Qo?x zJumWwvjzR(UHm*IW2IA2xAKAI*!jZjWnieLCCF9<{a5*9fv5B!y>_21#GaN9o zdf3*9z!@(D)0_bCD$Vg+aERt{Mn1zr&etG^ny=Xalc5B_1qtTtxO>L}l^cD8`2zD2 z^Gn3TbkQ>si>hNmb@7a4e}_CR5)7r`YO!110a|-egkW_}N4kn=S`|pIQlmH^Ew%*o z1*JSH?#&IYPQc~KCOq-a1E zs759<3MH;8c1dhBD8Ouu4+3&gSb{lXC4fVeBdOTx9b2}Jtn4df@g=~3ihe;7eR4QP zk6H(}96s>nITjf(t0G~ws3H-Wl`~dQiPx9CYYCwzeX&S5pYB(D*vCp4OAibut-yGX zp(8)b@`PnErWz#Ye`$Tilog}~ZEjP3*=wqr`4fq`6@M9AK4s}%^Q<1BFXo{2wqeAY zo6wTwTh^~_Ey*O}W_9xypMtFaeu3fSSi;^%{bf4vpWSJX1a=<=Q}X?oYv znz944tgdvG^{{U1rJ|@QL489{4?7T0P3S8fKxiI(-dYw52@@N?et}QmII7>`G2#|; zET7Vqj`W4%$d=@QpadjU^=Uo>T^8kgmqj@!NLwNtEk5%FsKL2)sc4ErZW|5$E1k05 zYX#D29Nns-f4vJkFFL+w*I+d~JAL?)ZDLn8tKbON7b0*rO$MByKurzDw1%Z{N2DP{!#Tl5TH=FBnl)*{LvkDPK3Ly!q@ z8*S~*`~LaWlUT(6bT3TIt@zjNr}Optih4co2VkOUfB2-Kv=`jd6X3SrUViLT$aH?S zA4!Bb|L+roJcK@Sl9pdlzmk>@Yl}4PjpQ<*)qG3{;Ot7~CfeUd&DAwnW=%MA((*iV zY|JIYJd+q|LO^|h8FU{uT|0wjAtX?uk79Ewz`~R>X}G4yI+bs_>X=+d^awP3&JE#F z=i8&Xf5=EAH+sKjS!vTmxObjng!ygrOS9Rf^B?DBQ4+AMOPd9alXAdW07t=cYH*3H z#dtLrECiivP{ekAZuAr*p=1|K=|@Ja-mI0G@8xwXA8~fl6TIlXOLwP!NJIGfYp6Fx zUzfI=BD`hmJVjR2%YI2PL|H(BEN&8rAeT6Rf4D5rkpXkm2mMxZMm`u81hr>P#?1AG z@g}pU5We=>PlqZd?2c!iN{e*Jzcad1%J#L+$j>VD+$RP0loNFA ze~P?8uX-pI9LhssHa`roh_FheE1SYv+&XkxW-YOGx1zBUHJl1jD*1u%*P7iOf($WDyU$G8T+Wm7lm|-pwM{ge66N|;7dq!EZ z`kHJmm$_yopWAqQvD8(*Ya3gR+?D83{bLtKd4eP>nd$9Iw|GtA<))E@q*8hGaJnm% zO=G&_lY554{B*rK!s}+Pnzs#M#mLxNDQ~_r+1=5h|0DS#{xR(0YKO}M9*-4Jf5!yA z>fTF{72G+3b&eKKTzE%FOGW(5%y=rDPC7p;IVY0Ybb9R04Ta+R*`53LeRgfRtEY^5 zdWq=AoNBCiz0}=ZT8keYPpsK8m-u}KMUwO7p853HR4O$!ymsx{@Y09=JxJmn79eNuTyd{8ahY6vtKM5I%2GlzRaNg#7sjTt zjjm9{FA_u1EiKo`i8kLemJU4-i^ZdxG#Hf)*Bw4MJT^9b@bK%04~&eCe~uhDeBI$4 z+iHzQZQG7-F9y)vnkK*1Urd>abRZNWROG@<)ymbF?@rE&Mtpu-HM$BBc1Trpy-JG1 z*?8Y_DKZ!loWBk7x5$YqKJ${XF?h-A^tGq{=DfGK0j6`N@f5j_u&(4`oSBEwJj@)2 z@oZ4DM*wfI-8>ga2iRkte+!$&%cb`;QK|&;fs&#nA)Tfm*J@`m0d}h8HB^L&@tQf4 zC!Es?kAH~2OUQRIc?#3Or|9Da<}boLxrlK0?!kBuA+GEEY!C4w@VwJ4fI0Mwa}s|G zH6W2k==y{yi^)H`(R~QQ_$r7Jyca>g3E4|J-p}ete*jty)uDPFJCB|T z;yU8r(!jI~_PmAj@;=#s`g>U9<(-vvae#AHQu{S(6FiDK6j=?Hn|s?q*0t+!;aP*? zBC6WN6nlh(8a+(dta$95gxsg~X(_ib$h62ivbK0j%yqH}zRgK51Q>$|F!qmW9 zxI#$PSR&Jx0lz7-0xuI14Q1avFr7&E!Q0@aed)yXz^o76f3{`Sl8kS3VCn~#_%zM; zPa~>sWP7T88ADe_|JAQ8Pxr>)ZJ}&m%ql^5e1};=0*T7h++-!L5m(1_>huT6X>u!5 zV-CQ&zLohH^L)qt*A-QHM|CY%2xGf6HE>q8dmEd3c~Qq82j&ETgl)MPzaK3M9jF0u z2maNXDGvhyf18#-6uHrv0zv>N2dc&@HH#(SE2(7DY69-JLp2vk1yHC`8?1PwJ-yDP z)vS1z`_y}oYxUzE!slI>CQxr2L9-O!k-Zme`S1ZFIb;}<`F$KGE!l3yFdHnc62oE4 zbI32ocJ{OcARYXNTLUaY>7kJ;c)n}r1+m0JXB42oghNF_Gc&FH|f zzua?Rye|?KvGg}qu@cLTx&|Y;kz5@Or1KSI70qm=ea8rp=y^pWfLPEDpJG82twXFC z+McD>V?{N#B2YBBz+5z?8E7gR(iPt3w1^`3*9FL+lpMOuBmzdQ_lka&LlLtSAC?ds zjqsbReyE45%quGE{KNf+mbG?{F9`;P-t73exv|hgINUoPS97uW zKyN=H+?AslnHO2R7E}wDk3Hl+%``UEhd50~%ODS9|2^-XhkaQA!S+(Z?+SAH9ybfVqSDF!P*ir6T0uLp;fWE6#OI!zs~gTc+h{>H%3&`y?Qm zJF*4$q@9a~>7HtQ; zsC&t-nXZ=zn@S)&y+yG|ud4#qp=AI)e@De;uvL=O_}yZ!$9{oC^9Z2O2*;~ZD3J_F zD$k7r^~|9{l!!p_ao8u~SRMg`Cl0%%QeLT1i6dM-ilGqsRk+KLvV;Ax0cT6FJLo)V zm}U?`&;Z9uBnxThiOlMZ^JJ<}NTaRkmFZhTfv?EU6P(OBkIORJ%KF$_G&FYUe^p=A zgF+hfJi!<7B09vX;w7Ab@GJom`>i7Px3YquYf8xAvskit-j;EWHzdCjEg-)f9<+V_ zV$|=KLVO0xwws^j4cVtei;8Ry9E$c0=47KB$qc+rmQToe6TQjI%g@R1PY|-IcVO8y>n!Kxn3(=3@52Jn zvI$W}yhNU4WsYFUqZdz;y9ol?VF|1l_b6OO&zRn=f`8&xree#zw<*)nS!6o5Gm&c= zEZe>VU(K=*2rBI{B^Xrjmy{r<-OWnQS17ZOmP+j1 z=5mfBLj+uw9K)i!M^BIwz<1Cy;6AEjHfi_VzX`H%YT?Y^#6o*v0W%8>a`(bFU@weO zIUuZk;+`+2h@s^g1G`)Z?;STbDGlSEFC9m&y2(A6;~q1GGT87LJb4-WHSRSfu3~=k z&9{Hxtyf(B#K7Rv)7MN>mF#HD22P+WT-@Cl0yb_hOYc|H&CGZ;AN9vcFflk@o5~FOWCJ0; zKa~imX22&L2uqrwe>b3DJJlVO%EhvoOq!}D8EnX}YsEywR->#P^$(P~1r)%+NUWIe zE9ZN=X38-wk<_B)f0?fC;`F-y0%Dg5f+*0_`mE;DL@nXdf;PuT3b~|>;gy2Y6OwNz zD?UX)s&4Zb<#4;S!{<1oHdv*S&Q;h8D5Jb&$vr}pu<)?s8W z`X1WoSTr@r#K`W;S*+;ddoK_T;llex0R8NdEzL|elX}y;9(mWBQt5*8-V4{S?H@S2 zo#!Q<-?m?sw{H_PVcRBxc;D1T&4Gb68zPjs>csX&Y!@ z1N!cY;@^uvC$j72d4GOg7v>b5|2T~Gp6cxQ=q`zy8iVBD^WR zD@LSMt9Zl?{F$K0g0=3*()sC$VhM$z;Rz9_D`|XO#HuAuXjUK$e=&LvEe5&a#kT@Iti$$yVWldXJtb2;BiM#pz< zC0y5TbLYti@H$VC0l^YY~X9qTnXu7VAY#4a9oZM(#0SMyR@uOP? z!uFP<Ep+Y{7E2TePF3)P*g(Ead3p9g?*l;b{p zQ1bbt?_9`BhZPQUea`2hF?i6jUe>*D@xCj&+7JAI7JvGN^H8Ge2ULXggRTU+h(#gi zU(h(mIUj4F-Oh(=i*}v=PToy)_uS+FaF@*4sOIJoLGUo2KD*_U$_Qblk3cD7Qq&n@zkh5tZ>xRFT zUQC6MtA9`U4Y?Qk>+e`ut~$p;@jPw&xe;n-*@8br?H76wy>a4*qh9sr^ICZC|V|_7r@YeDY z{0r4E;)dZog6@X8s&fUn=t0+0&q?yacx6brjeo{&qwOq)-ab7&-To?$$NHmFhT47w zT2ygd2~EL!+pom>W34j!!`b4u(f7rTeV+FO?Px62xx?ZFnS?cvrK9NS&RotESgp2C1a8EX8$2asru?a1h%=Ohr78XY8 zeSf)RPy@Og@b`_bZCRMS(=Cs*~gP@z0iF3+r;Di)^}{?`iQE`J8lP$j0t3^S{lwampptK>Y&>5TPzPOqUq zk;eT`%T-$i&T?rt?ajfm?4yN6y6hY3wU>Jy56rygVrRpFj19 zXbBpULLyovBO@j|UvvIe3<}O)`&mIoYYfG?l9oqzDF%R9 z581_tFm`bmyJgH4_gtW7Kt*ZKj-Z$Pi8Sv5ZNSa+c8dYZ;s~t{iIjBj8L&(I86$H@ zSsfoN76;?#@q`_SMgw-@ZJmTml7ALWu#)c&T6;gd3+VPhEEo~(#Jyer=jb!X4m@=Y z+P`KxeZ`j2o=11>dUVePkM70S+KFUeBJTW7i$qh=2rw(>#b3wU?%UqijWJ;n$FF?r zm5=TD@b0>Zt}eDu4U!&vJKQh_aElP#?5Z0M3%9Q@ZwsSD#68I~WKy-}uVK zJ{d9ZmGRiw0-@#0-Aoa}YVlU29jCB7fdSy1BH=XH^pAp?B%AM2Po=1EEC6*6|MVBXTwHT=c$#ab|*< zXAUs$cK;Uuix*rA1jD@&KTFl>^v0MJC1z2T9(dvV;RA_#(=;#_mhBx#hmDGIXRI$^ z7!c{lRKX5Bi$M4!ro)Gcr|x&va@3{#3J`>z+c_EUiLmKO8Gp+#0!l2oVyS5le`tg& zhtjLkT2|u4o*7?bn-yy-|4jk(>FIDZ~+lTFHk-wA^?VN#AM$Q($ z58Mt8a9oh!G9r^if(MeWumvNNZPHLm!M}cz+tD{X!<gr66LuN5%CmN7UMw-58++it^oM-D=dS5$%L39vy$1x90P9W!wl1^pHbHFp$>;* zcxj6u$Y|AF>pqHHg$|~7#hI>AV6jv$crt2Q+T$TzC4Z7DS2DdOxU(h3u|#WqVLNgMU4ggmLSSTEEx+4;-!-555!|ZS)vJs^dCzxC&_7G0hj1O*+|G7 z#;TO-4%tD#VOT;t+?qjI4uS{lIpLhUBw5b}Vv^Bm12LUI$NOBlhtuU#C*>du-47=1 zV!F53*njigCi&yTD zzH)JT*~2qarE+dKTbL-|E^wxtpI;nJCo03$MDhyfsC$YEow{&tV!Ti+7RD#$cH{ig ztn+?PZix;Ju5dnk?Qx~DWFQ_N7#cv+^K}Yu>YY2kyt^O)ike0rBIpR7Z$EW}Wfsu) z3x8$wJ%?G8dpu1Z16;U`*-zn2PVkP4pAkv$orI3blq$OH-WkQrqEv*LqyeJS! zFrxprhcoC&7zV>|y2`e89d2W|ZVMvy8&22pRu1c>pb2NPomcv6o$@DK1m zcs0?xiNC>vKgYN#cxjsE>*Y(nF?6jD^1N0sxj1CE^f_jBL;k@9ON(Fh!A&eBq{j6zx{@cjVoPGhgIp_?jUrB-cxe{kGwY-t+e3=MogIgB~rgRjd>wNLm3FSySP{QWuR!kh=A zFObkL@o6<1yUFqI?EdGh@kjT+*=usFWF-~S5-lYg?uAG?7%p^uJRNuYU@*VZG~ctc z8j+LUl^r6IHKwGuLkitaC2-d%ReuCk#%d<(dXEqLn0Q9@# zDLfaV_U$CTew%r4RXLL(RFH}lv_%aGLOVkppq6aOuxi1u*t5MT2Oz}6%;$YM1#^){ zd&N;uwG2tG(wL-IyxHq@Jh^R0Kheizv3Q(gU}Rum0OF8sd+Or(ZN4&avmG#iz+
plp-j zPAq@^KVWtPk~wDxxeX})1V~T96&45#0NFn>yZ`_I00000f&kV6AOd0o3Ir$wJOro( zBn5^A&;}F+Oa`C_MhCD5@(3shYzVRl>IqB28Id$ zU_Ju?7}x>2vlmcB0e@GQ+cpq|bw!ZWO1tZHJ5HS56DF27wo~lbiPL+t(+dcUNUT5r z3xF#B-k^3L@(`TE!vPL(=gv1X8jnubboBpAVvGz7ISQ1RU=LHwu#W>A;v62pgLnuJ z;}JZH$8a7O@Hj5w2|S5QcnVMB89a;U@H}3?i+Bky;}yJ$*MIOj-av&n@fI#)jw?9A z+qjBrxQ=)5F5biYxPhDa0Jm@(AL1k2!N>RnpW-uojxX>fzQWh|2H)a4e2*XSBYwiq zxQl!E1;64q{Ek2HC;r0U_y_-jqlSP4jhNtCmu+vFs&|FsTgP=FZNF7!d~#A8%PO5Q z-FJLK8_{ypP=DT$Z>Z>3PFCyCSBQS!Ue1-0?mTbDmbr z&?Yjc`L^)1yF^mOiL`4o2p)9SQ?()=RkBuumV27B&>Nd|?kIip!;~_5tE-?or)knD zQPozlmP3H{$)h-GlZm*jJyiTkXsLw~82Ad}1uiO1b>E)x;TH=Q!F zOg@6LW*lT*FN!b(L`S z)AjH=4ik_@!th9`V{7gut4V9t+Acv$_cCppy}@;rYSyz|B$Q8t^C5dIPIZP+S*WJu uPE||VvXqtfBoA$Eljg+n5Z0*#7RbmVN!mUZjSY%zUynxj0Rig-5&!^AQm?-N diff --git a/web/src/assets/iconfont/iconfont.woff2 b/web/src/assets/iconfont/iconfont.woff2 index aba9800aa4b67ab1d204751d9d8e267d1b61445a..3dc3c3da8ef1d274fd2bb36fce2d3d354bda6a46 100644 GIT binary patch literal 18628 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 b*&R11)%sX}4mxDR3(wpXQ_)*nKNbK0khf+O literal 18188 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 DdkKTR diff --git a/web/src/views/Dalle.vue b/web/src/views/Dalle.vue index f1c039e3..897ba203 100644 --- a/web/src/views/Dalle.vue +++ b/web/src/views/Dalle.vue @@ -59,10 +59,17 @@ :autosize="{ minRows: 4, maxRows: 6 }" type="textarea" ref="promptRef" - placeholder="请在此输入绘画提示词,系统会自动翻译中文提示词,高手请直接输入英文提示词" + placeholder="请在此输入绘画提示词,您也可以点击下面的提示词助手生成绘画提示词" /> + + + + 生成专业绘画指令 + + +

@@ -212,6 +219,7 @@ import {checkSession, getClientId, getSystemInfo} from "@/store/cache"; import {useSharedStore} from "@/store/sharedata"; import TaskList from "@/components/TaskList.vue"; import BackTop from "@/components/BackTop.vue"; +import {showMessageError} from "@/utils/dialog"; const listBoxHeight = ref(0) // const paramBoxHeight = ref(0) @@ -410,6 +418,21 @@ const publishImage = (item, action) => { }) } +const isGenerating = ref(false) +const generatePrompt = () => { + if (params.value.prompt === "") { + return showMessageError("请输入原始提示词") + } + isGenerating.value = true + httpPost("/api/prompt/image", {prompt: params.value.prompt}).then(res => { + params.value.prompt = res.data + isGenerating.value = false + }).catch(e => { + showMessageError("生成提示词失败:"+e.message) + isGenerating.value = false + }) +} +