Skip to content

Commit c1a6a88

Browse files
committed
feat(studio): PR-3i #4 · VoiceDesignModal + 我的设计 tab wired end-to-end
- VoiceDesignModal: write voice_prompt → preview → tweak → accept loop - ✨ 由角色描述生成 button calls /voice/design/translate when character.description present - VoicePickerModal Tab 3 now mirrors Tab 2: list + delete + auto-select on create - i18n keys: voiceDesign.* + voicePicker.{designCreateBtn,designNeedsSeries}
1 parent f90b466 commit c1a6a88

5 files changed

Lines changed: 427 additions & 20 deletions

File tree

frontend/messages/en.json

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,33 @@
7373
"originClone": "Clone",
7474
"originDesign": "Design",
7575
"confirmDelete": "Delete this voice? Characters using it will become unbound.",
76-
"designEmptyTitle": "Voice design — coming soon",
77-
"designEmptyBody": "Describe the voice in one sentence (e.g. 'warm 30-something female') and AI generates a custom voice.",
76+
"designEmptyTitle": "No designed voices yet",
77+
"designEmptyBody": "Describe the voice you want (e.g. 'warm 30-something female') and AI generates a custom one.",
78+
"designCreateBtn": "+ Design new voice",
79+
"designNeedsSeries": "Link this project to a series first — designed voices are shared at series level.",
7880
"comingSoonInPR3i": "Ships in PR-3i",
7981
"noSelection": "Pick a voice",
8082
"cancel": "Cancel",
8183
"apply": "Apply",
8284
"playFailed": "Preview failed — please retry"
8385
},
86+
"voiceDesign": {
87+
"title": "Design a new voice",
88+
"close": "Close",
89+
"voicePromptLabel": "Voice description (100-500 chars, Chinese)",
90+
"voicePromptPlaceholder": "Describe gender, age, timbre, pace, mood. e.g. 'Mature gentle woman, around 30, clear bright tone with a hint of sweetness, moderate pace, warm and intelligent.'",
91+
"translateBtn": "✨ From character",
92+
"previewTextLabel": "Preview text",
93+
"generateBtn": "Generate preview",
94+
"regenerateBtn": "Regenerate",
95+
"labelLabel": "Voice name",
96+
"labelPlaceholder": "e.g. Intelligent Lead",
97+
"acceptBtn": "Save to my voices",
98+
"cancel": "Cancel",
99+
"done": "Saved",
100+
"doneSaved": "Voice added to your design library",
101+
"playFailed": "Preview failed — please retry"
102+
},
84103
"previousFramesRail": {
85104
"title": "Previous episode ending",
86105
"framesCount": "{count, plural, =1 {1 frame} other {# frames}}",

frontend/messages/zh.json

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,33 @@
7373
"originClone": "复刻",
7474
"originDesign": "设计",
7575
"confirmDelete": "确定要删除此音色吗?已绑定的角色会失效。",
76-
"designEmptyTitle": "声音设计 — 即将上线",
77-
"designEmptyBody": "用一句话描述期望的声音(如「温柔知性女声,30 岁左右」),AI 从零生成专属音色。",
76+
"designEmptyTitle": "暂无设计音色",
77+
"designEmptyBody": "描述你想要的音色(如「温柔知性女声,30 岁左右」),AI 从零生成专属音色。",
78+
"designCreateBtn": "+ 设计新音色",
79+
"designNeedsSeries": "需要先把项目关联到系列才能使用音色设计(设计音色按系列共享)",
7880
"comingSoonInPR3i": "PR-3i 即将交付",
7981
"noSelection": "请选择音色",
8082
"cancel": "取消",
8183
"apply": "应用",
8284
"playFailed": "试听失败,请重试"
8385
},
86+
"voiceDesign": {
87+
"title": "设计新音色",
88+
"close": "关闭",
89+
"voicePromptLabel": "音色描述(100-500 字中文)",
90+
"voicePromptPlaceholder": "描述目标声音的性别、年龄、音色质感、语速、气质氛围等。例如:成熟温柔的女性,30 岁左右,音色清亮带点甜美,语速适中,温暖知性。",
91+
"translateBtn": "✨ 由角色描述生成",
92+
"previewTextLabel": "试听文本",
93+
"generateBtn": "生成试听",
94+
"regenerateBtn": "重新生成",
95+
"labelLabel": "音色名称",
96+
"labelPlaceholder": "例如:知性御姐",
97+
"acceptBtn": "保存为我的音色",
98+
"cancel": "取消",
99+
"done": "已保存",
100+
"doneSaved": "音色已加入我的设计库",
101+
"playFailed": "试听失败,请重试"
102+
},
84103
"previousFramesRail": {
85104
"title": "上一集结尾分镜",
86105
"framesCount": "{count} 帧",

frontend/src/components/modules/Cast.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -731,6 +731,7 @@ function CastCard({ item }: { item: CastItem }) {
731731
currentVoiceId={voiceId}
732732
onApply={handleApplyVoice}
733733
seriesId={currentProject?.series_id || null}
734+
characterDescription={character.description}
734735
/>
735736
)}
736737
</>

0 commit comments

Comments
 (0)