|
|
@@ -338,6 +338,77 @@ class DeepSeekService
|
|
|
EOD;
|
|
|
}
|
|
|
|
|
|
+ private function getArtStylePromptMappings(): array
|
|
|
+ {
|
|
|
+ return [
|
|
|
+ '厚涂古风' => [
|
|
|
+ 'aliases' => ['厚涂古风', '古风厚涂', '国风厚涂', '古风'],
|
|
|
+ 'prompt' => "基础画风风格词:厚涂古风\n整体采用精致细腻的厚涂古风,色彩浓郁而富有层次感,注重光影对比,营造出古典而富有戏剧张力的氛围。色调以深沉的蓝绿、灰调为主,可辅以温暖的金色、琥珀色光晕强化画面情绪。人物造型飘逸,服饰细节考究,背景虚实结合,既有古韵,又不失奇幻色彩。"
|
|
|
+ ],
|
|
|
+ '现代都市情感' => [
|
|
|
+ 'aliases' => ['现代都市', '都市情感', '现代情感', '都市写实', '现代写实'],
|
|
|
+ 'prompt' => "基础画风风格词:写实细腻的现代都市情感风格,带有轻微悬疑色彩。\n整体采用电影质感的写实风格,色彩随情绪和剧情变化。日常场景偏自然光感与生活化细节,压抑或冲突场景可适度加强蓝灰、暗绿色调,营造情感张力与轻悬疑氛围。人物造型追求真实可信,环境道具需体现都市生活气息。"
|
|
|
+ ],
|
|
|
+ '现实主义超现实' => [
|
|
|
+ 'aliases' => ['现实主义', '超现实', '现实主义超现实', '现实主义奇幻', '现代奇幻写实'],
|
|
|
+ 'prompt' => "基础画风风格词:现实主义的细腻光影与超现实元素结合\n整体以现实主义基调塑造人物与场景,色彩饱和度适中偏低,通过细腻光影与局部超现实视觉元素制造情绪冲击。画面在真实生活质感之上融入象征性表达,让现实压迫感与奇异氛围并存。"
|
|
|
+ ],
|
|
|
+ '韩漫二次元' => [
|
|
|
+ 'aliases' => ['韩漫', '韩漫二次元', '二次元', '漫画风', '韩系漫画'],
|
|
|
+ 'prompt' => "基础画风风格词:韩漫二次元\n整体采用精致清晰的韩漫二次元风格,人物五官立体、轮廓干净,画面注重高颜值塑造与情绪表达。色彩通透,光影偏柔和,兼顾浪漫氛围与剧情张力,适合强化角色关系和戏剧冲突。"
|
|
|
+ ],
|
|
|
+ ];
|
|
|
+ }
|
|
|
+
|
|
|
+ private function getArtStylePromptByInput($inputArtStyle): string
|
|
|
+ {
|
|
|
+ $normalizedInput = $this->normalizeArtStyleInput($inputArtStyle);
|
|
|
+ if ($normalizedInput === '') {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($this->getArtStylePromptMappings() as $mapping) {
|
|
|
+ foreach ($mapping['aliases'] as $alias) {
|
|
|
+ $normalizedAlias = $this->normalizeArtStyleInput($alias);
|
|
|
+ if ($normalizedAlias === '') {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (strpos($normalizedInput, $normalizedAlias) !== false || strpos($normalizedAlias, $normalizedInput) !== false) {
|
|
|
+ return $mapping['prompt'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+
|
|
|
+ private function normalizeArtStyleInput($value): string
|
|
|
+ {
|
|
|
+ $value = trim((string)$value);
|
|
|
+ if ($value === '') {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+
|
|
|
+ $value = str_replace(["\r", "\n", "\t", ' ', ' ', '-', '_', ':', ':', ',', ',', '。', '.'], '', $value);
|
|
|
+
|
|
|
+ return mb_strtolower($value, 'UTF-8');
|
|
|
+ }
|
|
|
+
|
|
|
+ private function replaceArtStyleSection(string $content, string $artStyle): string
|
|
|
+ {
|
|
|
+ if ($content === '' || $artStyle === '') {
|
|
|
+ return $content;
|
|
|
+ }
|
|
|
+
|
|
|
+ $pattern = '/###美术风格\s*\R(.*?)(?=\R###|$)/su';
|
|
|
+ if (!preg_match($pattern, $content)) {
|
|
|
+ return $content;
|
|
|
+ }
|
|
|
+
|
|
|
+ return preg_replace($pattern, "###美术风格\n" . trim($artStyle), $content, 1);
|
|
|
+ }
|
|
|
+
|
|
|
// 与推理模型对话
|
|
|
public function chatWithReasoner($data) {
|
|
|
$content = getProp($data, 'content');
|
|
|
@@ -1942,7 +2013,7 @@ EOD;
|
|
|
}
|
|
|
|
|
|
// 美术风格
|
|
|
- $input_art_style = getProp($data, 'input_art_style');
|
|
|
+ $input_art_style = getProp($data, 'art_style');
|
|
|
|
|
|
// 构建消息
|
|
|
$messages = [
|
|
|
@@ -2171,6 +2242,13 @@ EOD;
|
|
|
$script_arr = handleScriptContent($fullContent);
|
|
|
}
|
|
|
|
|
|
+ // 替换美术风格
|
|
|
+ $mappedArtStyle = $this->getArtStylePromptByInput($input_art_style);
|
|
|
+ if ($mappedArtStyle !== '') {
|
|
|
+ $script_arr['art_style'] = $mappedArtStyle;
|
|
|
+ $fullContent = $this->replaceArtStyleSection($fullContent, $mappedArtStyle);
|
|
|
+ }
|
|
|
+
|
|
|
// 新建动漫
|
|
|
$anime_name = getProp($script_arr, 'script_name');
|
|
|
if (!$anime_name) {
|
|
|
@@ -2308,6 +2386,9 @@ EOD;
|
|
|
} else {
|
|
|
$content = filterContent(getProp($anime, 'content'));
|
|
|
}
|
|
|
+
|
|
|
+ // 美术风格
|
|
|
+ $input_art_style = getProp($data, 'art_style');
|
|
|
|
|
|
$system_message = [
|
|
|
'role' => 'system',
|
|
|
@@ -2567,6 +2648,13 @@ EOD;
|
|
|
$script_arr = handleScriptContent($fullContent);
|
|
|
}
|
|
|
|
|
|
+ // 替换美术风格
|
|
|
+ $mappedArtStyle = $this->getArtStylePromptByInput($input_art_style);
|
|
|
+ if ($mappedArtStyle !== '') {
|
|
|
+ $script_arr['art_style'] = $mappedArtStyle;
|
|
|
+ $fullContent = $this->replaceArtStyleSection($fullContent, $mappedArtStyle);
|
|
|
+ }
|
|
|
+
|
|
|
// // 新建动漫
|
|
|
// $anime_name = getProp($script_arr, 'script_name');
|
|
|
// if (!$anime_name) {
|