diff --git a/api/core/types/config.go b/api/core/types/config.go
index a9c0c1cd..29169539 100644
--- a/api/core/types/config.go
+++ b/api/core/types/config.go
@@ -144,15 +144,15 @@ type SystemConfig struct {
OrderPayTimeout int `json:"order_pay_timeout,omitempty"` //订单支付超时时间
VipInfoText string `json:"vip_info_text,omitempty"` // 会员页面充值说明
- MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力
- MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力
- SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力
- DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力
- SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力
- LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力
- KeLingPower int `json:"keling_power,omitempty"` // 可灵生成视频消耗算力
- AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力
- PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力
+ MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力
+ MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力
+ SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力
+ DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力
+ SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力
+ LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力
+ KeLingPowers map[string]int `json:"keling_powers,omitempty"` // 可灵生成视频消耗算力
+ AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力
+ PromptPower int `json:"prompt_power,omitempty"` // 生成提示词消耗算力
WechatCardURL string `json:"wechat_card_url,omitempty"` // 微信客服地址
@@ -171,6 +171,5 @@ type SystemConfig struct {
EmailWhiteList []string `json:"email_white_list"` // 邮箱白名单列表
TranslateModelId int `json:"translate_model_id"` // 用来做提示词翻译的大模型 id
MaxFileSize int `json:"max_file_size"` // 最大文件大小,单位:MB
- License string `json:"license"` // License
}
diff --git a/api/core/types/task.go b/api/core/types/task.go
index 40872c20..599482af 100644
--- a/api/core/types/task.go
+++ b/api/core/types/task.go
@@ -91,7 +91,8 @@ type SunoTask struct {
Title string `json:"title"`
RefTaskId string `json:"ref_task_id,omitempty"`
RefSongId string `json:"ref_song_id,omitempty"`
- Prompt string `json:"prompt"` // 提示词/歌词
+ Prompt string `json:"prompt"` // 提示词
+ Lyrics string `json:"lyrics,omitempty"` // 歌词
Tags string `json:"tags"`
Model string `json:"model"`
Instrumental bool `json:"instrumental"` // 是否纯音乐
diff --git a/api/handler/admin/config_handler.go b/api/handler/admin/config_handler.go
index 8b63ef70..17166396 100644
--- a/api/handler/admin/config_handler.go
+++ b/api/handler/admin/config_handler.go
@@ -48,6 +48,7 @@ func (h *ConfigHandler) Update(c *gin.Context) {
}
if err := c.ShouldBindJSON(&data); err != nil {
+ logger.Errorf("Update config failed: %v", err)
resp.ERROR(c, types.InvalidArgs)
return
}
@@ -131,14 +132,6 @@ func (h *ConfigHandler) Active(c *gin.Context) {
resp.ERROR(c, err.Error())
return
}
- h.App.SysConfig.License = data.License
-
- // 将 license 写入数据库
- err = h.DB.Model(&model.Config{}).Where("marker", "system").UpdateColumn("config_json", utils.JsonEncode(h.App.SysConfig)).Error
- if err != nil {
- resp.ERROR(c, err.Error())
- return
- }
resp.SUCCESS(c)
@@ -153,7 +146,6 @@ func (h *ConfigHandler) GetLicense(c *gin.Context) {
// FixData 修复数据
func (h *ConfigHandler) FixData(c *gin.Context) {
resp.ERROR(c, "当前升级版本没有数据需要修正!")
- return
//var fixed bool
//version := "data_fix_4.1.4"
//err := h.levelDB.Get(version, &fixed)
diff --git a/api/handler/suno_handler.go b/api/handler/suno_handler.go
index 1ec2fa89..53ee507d 100644
--- a/api/handler/suno_handler.go
+++ b/api/handler/suno_handler.go
@@ -18,9 +18,10 @@ import (
"geekai/store/vo"
"geekai/utils"
"geekai/utils/resp"
+ "time"
+
"github.com/gin-gonic/gin"
"gorm.io/gorm"
- "time"
)
type SunoHandler struct {
@@ -96,6 +97,7 @@ func (h *SunoHandler) Create(c *gin.Context) {
RefSongId: data.RefSongId,
ExtendSecs: data.ExtendSecs,
Prompt: data.Prompt,
+ Lyrics: data.Lyrics,
Tags: data.Tags,
Model: data.Model,
Instrumental: data.Instrumental,
diff --git a/api/handler/video_handler.go b/api/handler/video_handler.go
index 6ea62d26..2928fb98 100644
--- a/api/handler/video_handler.go
+++ b/api/handler/video_handler.go
@@ -281,6 +281,8 @@ func (h *VideoHandler) Remove(c *gin.Context) {
// 删除文件
_ = h.uploader.GetUploadHandler().Delete(job.CoverURL)
_ = h.uploader.GetUploadHandler().Delete(job.VideoURL)
+
+ resp.SUCCESS(c)
}
func (h *VideoHandler) Publish(c *gin.Context) {
diff --git a/api/service/license_service.go b/api/service/license_service.go
index 3469af54..5b8863cc 100644
--- a/api/service/license_service.go
+++ b/api/service/license_service.go
@@ -13,9 +13,6 @@ import (
"geekai/core"
"geekai/core/types"
"geekai/store"
- "geekai/store/model"
- "geekai/utils"
- "gorm.io/gorm"
"strings"
"time"
@@ -25,27 +22,17 @@ import (
type LicenseService struct {
config types.ApiConfig
- db *gorm.DB
levelDB *store.LevelDB
license *types.License
urlWhiteList []string
machineId string
}
-func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB, db *gorm.DB) *LicenseService {
+func NewLicenseService(server *core.AppServer, levelDB *store.LevelDB) *LicenseService {
var license types.License
var machineId string
err := levelDB.Get(types.LicenseKey, &license)
logger.Infof("License: %+v", server.SysConfig)
- if err != nil {
- var cfg model.Config
- db.Where("marker", "system").First(&cfg)
- var sysConfig types.SystemConfig
- if err := utils.JsonDecode(cfg.Config, &sysConfig); err == nil {
- license.Key = sysConfig.License
- license.IsActive = true
- }
- }
info, err := host.Info()
if err == nil {
machineId = info.HostID
diff --git a/api/service/suno/service.go b/api/service/suno/service.go
index 89a05efe..685153da 100644
--- a/api/service/suno/service.go
+++ b/api/service/suno/service.go
@@ -134,7 +134,7 @@ func (s *Service) Create(task types.SunoTask) (RespVo, error) {
if task.Type == 1 {
reqBody["gpt_description_prompt"] = task.Prompt
} else { // 自定义模式
- reqBody["prompt"] = task.Prompt
+ reqBody["prompt"] = task.Lyrics
reqBody["tags"] = task.Tags
reqBody["mv"] = task.Model
reqBody["title"] = task.Title
diff --git a/api/service/types.go b/api/service/types.go
index f509bf6e..9c774cbf 100644
--- a/api/service/types.go
+++ b/api/service/types.go
@@ -44,20 +44,41 @@ const ImagePromptOptimizeTemplate = `
const LyricPromptTemplate = `
你是一位才华横溢的作曲家,拥有丰富的情感和细腻的笔触,你对文字有着独特的感悟力,能将各种情感和意境巧妙地融入歌词中。
请以【%s】为主题创作一首歌曲,歌曲时间不要太短,3分钟左右,不要输出任何解释性的内容。
-输出格式如下:
+下面是一个标准的歌词输出模板:
歌曲名称
-第一节:
-{{歌词内容}}
-副歌:
-{{歌词内容}}
-第二节:
-{{歌词内容}}
-副歌:
-{{歌词内容}}
+[Verse]
+[歌词]
-尾声:
-{{歌词内容}}
+[Verse 2]
+[歌词]
+
+[Chorus]
+[歌词]
+
+[Verse 3]
+[歌词]
+
+[Bridge]
+[歌词]
+
+[Chorus]
+[歌词]
+
+[Verse 4]
+[歌词]
+
+[Bridge]
+假如此刻眼泪能倒流
+让我学会微笑不掩忧
+一次次的碎片堆积的愁
+最终也会开成希望的秋
+
+[Chorus]
+假如我还能牵你的手
+天空也许会更蔚蓝悠游
+曾经那些未完成的错过
+愿能变成今天的收获
`
const VideoPromptTemplate = `## 任务描述
diff --git a/api/service/video/video.go b/api/service/video/video.go
index 21a4d1a6..8dd91c5d 100644
--- a/api/service/video/video.go
+++ b/api/service/video/video.go
@@ -519,7 +519,7 @@ func (s *Service) KeLingCreate(task types.VideoTask) (KeLingRespVo, error) {
// 2. 构建API请求参数
payload := map[string]interface{}{
- "model": params.Model,
+ "model_name": params.Model,
"prompt": task.Prompt,
"negative_prompt": params.NegPrompt,
"cfg_scale": params.CfgScale,
diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue
index a6df1cba..36802680 100644
--- a/web/src/views/admin/SysConfig.vue
+++ b/web/src/views/admin/SysConfig.vue
@@ -243,8 +243,24 @@
-
-
+
+
+
+ 可灵算力
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -412,6 +428,20 @@ onMounted(() => {
httpGet("/api/admin/config/get?key=system")
.then((res) => {
system.value = res.data;
+ system.value.keling_powers = system.value.keling_powers || {
+ "kling-v1-6_std_5": 240,
+ "kling-v1-6_std_10": 480,
+ "kling-v1-6_pro_5": 420,
+ "kling-v1-6_pro_10": 840,
+ "kling-v1-5_std_5": 240,
+ "kling-v1-5_std_10": 480,
+ "kling-v1-5_pro_5": 420,
+ "kling-v1-5_pro_10": 840,
+ "kling-v1_std_5": 120,
+ "kling-v1_std_10": 240,
+ "kling-v1_pro_5": 420,
+ "kling-v1_pro_10": 840,
+ };
configBak.value = copyObj(system.value);
})
.catch((e) => {