release: opensource snapshot 2026-02-27 19:25:00
This commit is contained in:
18
messages/en/actions.json
Normal file
18
messages/en/actions.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"storyboard": "Storyboard",
|
||||
"storyboard_candidate": "Storyboard Candidate",
|
||||
"character": "Character",
|
||||
"location": "Location",
|
||||
"video": "Video",
|
||||
"analyze": "Analyze",
|
||||
"analyze_character": "Character Analysis",
|
||||
"analyze_location": "Location Analysis",
|
||||
"clips": "Clip Splitting",
|
||||
"storyboard_text_plan": "Storyboard Planning",
|
||||
"storyboard_text_detail": "Storyboard Details",
|
||||
"tts": "Text-to-Speech",
|
||||
"regenerate": "Regenerate",
|
||||
"voice-generate": "Voice Generation",
|
||||
"voice-design": "Voice Design",
|
||||
"lip-sync": "Lip Sync"
|
||||
}
|
||||
107
messages/en/apiConfig.json
Normal file
107
messages/en/apiConfig.json
Normal file
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"title": "API Configuration",
|
||||
"saving": "Saving...",
|
||||
"saved": "Saved",
|
||||
"saveFailed": "Save failed",
|
||||
"connected": "Connected",
|
||||
"notConfigured": "Not configured",
|
||||
"configure": "Configure",
|
||||
"connect": "Connect",
|
||||
"show": "Show",
|
||||
"hide": "Hide",
|
||||
"capability": "Models",
|
||||
"default": "Default",
|
||||
"delete": "Delete",
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"comingSoon": "Coming soon",
|
||||
"priceInput": "Input {amount}",
|
||||
"priceOutput": "Output {amount}",
|
||||
"priceUnavailable": "N/A",
|
||||
"fillComplete": "Please fill in all fields",
|
||||
"fillPricing": "Please fill in pricing information",
|
||||
"pricingInputLabel": "Input price",
|
||||
"pricingOutputLabel": "Output price",
|
||||
"modelIdExists": "Model ID already exists",
|
||||
"modelDisplayName": "Display Name (for your reference)",
|
||||
"modelActualId": "Actual Model ID (API parameter)",
|
||||
"noModelsForProvider": "No models configured for this provider",
|
||||
"defaultModels": "Default Model Configuration",
|
||||
"textDefault": "Text Model",
|
||||
"characterDefault": "Character Model",
|
||||
"locationDefault": "Location Model",
|
||||
"storyboardDefault": "Storyboard Model",
|
||||
"editDefault": "Edit Model",
|
||||
"videoDefault": "Video Model",
|
||||
"lipsyncDefault": "Lip Sync Model",
|
||||
"selectDefault": "Select",
|
||||
"providerPool": "Provider Pool",
|
||||
"providerIdExists": "Provider ID already exists",
|
||||
"presetProviderCannotDelete": "Preset providers cannot be deleted",
|
||||
"confirmDeleteProvider": "Are you sure you want to delete this provider?",
|
||||
"presetModelCannotDelete": "Preset models cannot be deleted",
|
||||
"confirmDeleteModel": "Are you sure you want to delete this model?",
|
||||
"addGeminiProvider": "Add Model Provider",
|
||||
"baseUrl": "Base URL",
|
||||
"configureBaseUrl": "Configure URL",
|
||||
"addModel": "Add Model",
|
||||
"batchModeHalfPrice": "Batch mode (50% price)",
|
||||
"typeText": "Text",
|
||||
"typeImage": "Image",
|
||||
"typeVideo": "Video",
|
||||
"typeAudio": "Audio",
|
||||
"apiKeyLabel": "API Key",
|
||||
"apiType": "API Type",
|
||||
"apiTypeGeminiCompatible": "Gemini Compatible",
|
||||
"apiTypeOpenAICompatible": "OpenAI Compatible",
|
||||
"apiTypeGeminiHint": "Uses Google SDK",
|
||||
"otherProviders": "Other Settings",
|
||||
"audioCategory": "Audio",
|
||||
"audioAndLipsync": "Audio & Lip Sync",
|
||||
"configureApiKey": "Configure API Key",
|
||||
"enterApiKey": "Enter API Key",
|
||||
"tabs": {
|
||||
"llm": "Text Models",
|
||||
"image": "Image Models",
|
||||
"video": "Video Models",
|
||||
"audio": "Audio Models",
|
||||
"other": "Other"
|
||||
},
|
||||
"sections": {
|
||||
"llmApiKeys": "Text Model API Keys",
|
||||
"imageApiKeys": "Image Model API Keys",
|
||||
"videoApiKeys": "Video Model API Keys",
|
||||
"audioApiKey": "Audio Model API Key",
|
||||
"lipsyncApiKey": "Lip Sync API Key"
|
||||
},
|
||||
"defaultModel": {
|
||||
"title": "Default Model",
|
||||
"hint": "New projects and Asset Hub will use this default configuration",
|
||||
"notSelected": "Not selected",
|
||||
"analysis": "Analysis Model",
|
||||
"image": "Image Generation",
|
||||
"video": "Video Generation",
|
||||
"resolution": "Image Resolution"
|
||||
},
|
||||
"viewTutorial": "View Tutorial",
|
||||
"tutorial": {
|
||||
"button": "Tutorial",
|
||||
"title": "Setup Guide",
|
||||
"subtitle": "Follow these steps to complete the configuration",
|
||||
"close": "Got it",
|
||||
"openLink": "Open link",
|
||||
"steps": {
|
||||
"ark_step1": "Go to the Volcano Engine console to create an API Key",
|
||||
"ark_step2": "On the model management page, click 'Enable All Models' button in the top right corner",
|
||||
"openrouter_step1": "Go to OpenRouter platform and create an API Key (must select models with image capabilities)",
|
||||
"fal_step1": "Go to FAL platform and create an API Key",
|
||||
"google_step1": "Go to Google AI Studio and create an API Key",
|
||||
"minimax_step1": "Go to MiniMax platform and get an API Key",
|
||||
"vidu_step1": "Go to the Vidu platform and click 'Create API Key'",
|
||||
"openai_compatible_step1": "Enter any OpenAI-compatible service Base URL and API key",
|
||||
"gemini_compatible_step1": "Enter any Gemini-compatible service Base URL and API key",
|
||||
"qwen_step1": "Go to Alibaba Cloud Bailian platform and get an API Key"
|
||||
}
|
||||
}
|
||||
}
|
||||
9
messages/en/apiTypes.json
Normal file
9
messages/en/apiTypes.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"image": "Image Generation",
|
||||
"video": "Video Generation",
|
||||
"text": "Text Analysis",
|
||||
"tts": "Text-to-Speech",
|
||||
"voice": "Voice Dubbing",
|
||||
"voice_design": "Voice Design",
|
||||
"lip_sync": "Lip Sync"
|
||||
}
|
||||
101
messages/en/assetHub.json
Normal file
101
messages/en/assetHub.json
Normal file
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"title": "Asset Hub",
|
||||
"description": "Manage your global character and location assets",
|
||||
"modelHint": "Asset Hub uses default models. To change settings, go to",
|
||||
"modelHintLink": "API Settings",
|
||||
"modelHintSuffix": "",
|
||||
"folders": "Folders",
|
||||
"noFolders": "No folders yet",
|
||||
"allAssets": "All Assets",
|
||||
"characters": "Characters",
|
||||
"locations": "Locations",
|
||||
"voices": "Voices",
|
||||
"addCharacter": "Add Character",
|
||||
"addLocation": "Add Location",
|
||||
"addVoice": "Add Voice",
|
||||
"newFolder": "New Folder",
|
||||
"editFolder": "Edit Folder",
|
||||
"deleteFolder": "Delete Folder",
|
||||
"folderName": "Folder Name",
|
||||
"folderNamePlaceholder": "Enter folder name",
|
||||
"emptyState": "No assets yet",
|
||||
"emptyStateHint": "Click the buttons above to add characters or locations",
|
||||
"generate": "Generate",
|
||||
"generating": "Generating...",
|
||||
"regenerate": "Regenerate",
|
||||
"undo": "Undo",
|
||||
"delete": "Delete",
|
||||
"cancel": "Cancel",
|
||||
"save": "Save",
|
||||
"create": "Create",
|
||||
"confirmDeleteFolder": "Delete this folder? Assets inside will be moved to uncategorized.",
|
||||
"confirmDeleteCharacter": "Delete this character? This action cannot be undone.",
|
||||
"confirmDeleteLocation": "Delete this location? This action cannot be undone.",
|
||||
"confirmDeleteVoice": "Delete this voice? This action cannot be undone.",
|
||||
"voiceName": "Voice Name",
|
||||
"voiceNamePlaceholder": "Enter voice name",
|
||||
"voiceNameRequired": "Please enter a voice name",
|
||||
"voicePickerTitle": "Select from Voice Library",
|
||||
"voicePickerEmpty": "No voices yet. Please create a voice first.",
|
||||
"voicePickerConfirm": "Confirm Selection",
|
||||
"pagination": {
|
||||
"previous": "Previous",
|
||||
"next": "Next"
|
||||
},
|
||||
"common": {
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"generateFailed": "Generation failed",
|
||||
"selectFailed": "Selection failed",
|
||||
"uploadFailed": "Upload failed",
|
||||
"editFailed": "Edit failed",
|
||||
"saveVoiceFailed": "Failed to save voice",
|
||||
"saveVoiceFailedDetail": "Failed to save voice: {error}",
|
||||
"bindVoiceFailed": "Failed to bind voice",
|
||||
"bindVoiceFailedDetail": "Failed to bind voice: {error}",
|
||||
"voiceDesignSaved": "AI-designed voice has been set for {name}",
|
||||
"appearanceLabel": "Appearance {index}",
|
||||
"voiceSettings": {
|
||||
"title": "Voice",
|
||||
"noVoice": "No voice",
|
||||
"previewFailed": "Preview failed: {error}",
|
||||
"uploadFailed": "Upload audio failed: {error}",
|
||||
"uploading": "Uploading...",
|
||||
"uploaded": "Uploaded",
|
||||
"uploadAudio": "Upload Audio",
|
||||
"aiDesign": "AI Design",
|
||||
"voiceLibrary": "Voice Library",
|
||||
"pause": "Pause",
|
||||
"preview": "Preview Voice"
|
||||
},
|
||||
"modal": {
|
||||
"newCharacter": "New Character",
|
||||
"confirm": "Confirm",
|
||||
"processing": "Processing...",
|
||||
"newLocation": "New Location",
|
||||
"addCharacter": "Create Character",
|
||||
"addLocation": "Create Location",
|
||||
"adding": "Creating...",
|
||||
"aiDesign": "AI Design",
|
||||
"aiDesignPlaceholder": "e.g., A beautiful woman in a red traditional dress with flowing long hair",
|
||||
"aiDesignLocationPlaceholder": "e.g., A classical Chinese garden with rockery and pavilions",
|
||||
"aiDesignTip": "AI will generate a detailed description based on your input. You can edit it after generation.",
|
||||
"aiDesignLocationTip": "AI will generate a detailed scene description based on your input",
|
||||
"generate": "Generate",
|
||||
"generating": "Generating...",
|
||||
"nameLabel": "Character Name",
|
||||
"namePlaceholder": "Enter character name",
|
||||
"descLabel": "Character Description",
|
||||
"descPlaceholder": "Describe the character's appearance, clothing, hairstyle, etc...",
|
||||
"locationNameLabel": "Location Name",
|
||||
"locationNamePlaceholder": "Enter location name",
|
||||
"locationSummaryLabel": "Location Description",
|
||||
"locationSummaryPlaceholder": "Describe the environment, atmosphere, features, etc...",
|
||||
"referenceUpload": "Upload Reference",
|
||||
"referenceUploadTip": "Upload a character image, AI will convert it to a three-view design sheet",
|
||||
"convertToCharacter": "Convert to 3-View",
|
||||
"converting": "Converting...",
|
||||
"dropOrClick": "Drop image or click to upload",
|
||||
"supportedFormats": "JPG, PNG supported"
|
||||
}
|
||||
}
|
||||
14
messages/en/assetLibrary.json
Normal file
14
messages/en/assetLibrary.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "Asset Library",
|
||||
"button": "Assets",
|
||||
"characters": "Characters",
|
||||
"locations": "Locations",
|
||||
"noCharacters": "No characters",
|
||||
"noLocations": "No locations",
|
||||
"addCharacter": "Add Character",
|
||||
"addLocation": "Add Location",
|
||||
"generateImage": "Generate Image",
|
||||
"regenerateImage": "Regenerate",
|
||||
"analyzeAssets": "Analyze Assets",
|
||||
"analyzing": "Analyzing..."
|
||||
}
|
||||
78
messages/en/assetModal.json
Normal file
78
messages/en/assetModal.json
Normal file
@@ -0,0 +1,78 @@
|
||||
{
|
||||
"character": {
|
||||
"title": "New Character",
|
||||
"name": "Character Name",
|
||||
"namePlaceholder": "Enter character name",
|
||||
"modeReference": "Reference Image",
|
||||
"modeDescription": "Description",
|
||||
"isSubAppearance": "This is a sub-appearance",
|
||||
"isSubAppearanceHint": "Add a new appearance state for an existing character",
|
||||
"uploadReference": "Upload Reference",
|
||||
"pasteHint": "Ctrl+V to paste",
|
||||
"dropOrClick": "Click to upload or drag image",
|
||||
"supportedFormats": "Supports JPG, PNG formats",
|
||||
"nameRequired": "Please enter character name first to use reference conversion",
|
||||
"convertToSheet": "Convert to standard character sheet",
|
||||
"referenceTip": "Upload any character image, AI will generate a standard character sheet",
|
||||
"description": "Character Description",
|
||||
"modifyDescription": "Modify Description",
|
||||
"descPlaceholder": "Enter character appearance description...",
|
||||
"modifyDescriptionPlaceholder": "Describe how to modify the primary appearance, e.g. formal outfit, post-battle injuries, add a cloak...",
|
||||
"selectMainCharacter": "Select Main Character",
|
||||
"selectCharacterPlaceholder": "Please select a character...",
|
||||
"appearancesCount": "{count} appearances",
|
||||
"changeReason": "Appearance Change Reason",
|
||||
"changeReasonPlaceholder": "e.g. injured after battle, changed into formal wear for a banquet...",
|
||||
"defaultDescription": "{name}'s character profile",
|
||||
"generationMode": "Generation Mode",
|
||||
"directGenerate": "Direct Generate",
|
||||
"extractPrompt": "Extract Prompt",
|
||||
"extractFirst": "Extract Description First",
|
||||
"directGenerateDesc": "Directly generate character sheet from reference (img2img)",
|
||||
"extractPromptDesc": "Extract description from image first, then generate (txt2img)",
|
||||
"maxReferenceImages": "Up to 5 reference images",
|
||||
"selectedCount": "Selected {count}/5 images",
|
||||
"extractDescription": "Extract Description",
|
||||
"extracting": "Extracting...",
|
||||
"extractedDescription": "Extracted Description (Editable)",
|
||||
"reExtract": "Re-extract",
|
||||
"editHint": "Edit the description, then click below to generate",
|
||||
"generateFromDescription": "Generate from Description",
|
||||
"textToImageTip": "Text-to-image mode: Generate from extracted description",
|
||||
"pleaseExtractFirst": "Please extract character description first"
|
||||
},
|
||||
"location": {
|
||||
"title": "New Location",
|
||||
"name": "Location Name",
|
||||
"namePlaceholder": "Enter location name",
|
||||
"description": "Location Description",
|
||||
"descPlaceholder": "Enter location description..."
|
||||
},
|
||||
"artStyle": {
|
||||
"title": "Art Style"
|
||||
},
|
||||
"aiDesign": {
|
||||
"title": "AI Design",
|
||||
"placeholder": "Describe the character you want...",
|
||||
"placeholderLocation": "Describe the scene atmosphere...",
|
||||
"generating": "Designing...",
|
||||
"generate": "Generate",
|
||||
"tip": "Enter a simple description, AI will generate detailed settings"
|
||||
},
|
||||
"common": {
|
||||
"creating": "Creating...",
|
||||
"create": "Create",
|
||||
"cancel": "Cancel",
|
||||
"adding": "Adding...",
|
||||
"add": "Add",
|
||||
"optional": "(Optional)"
|
||||
},
|
||||
"errors": {
|
||||
"uploadFailed": "Upload failed",
|
||||
"extractDescriptionFailed": "Failed to extract description",
|
||||
"createFailed": "Creation failed",
|
||||
"aiDesignFailed": "AI design failed",
|
||||
"addSubAppearanceFailed": "Failed to add sub-appearance",
|
||||
"insufficientBalance": "Insufficient balance"
|
||||
}
|
||||
}
|
||||
18
messages/en/assetPicker.json
Normal file
18
messages/en/assetPicker.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"selectCharacter": "Select Character from Asset Hub",
|
||||
"selectLocation": "Select Location from Asset Hub",
|
||||
"selectVoice": "Select Voice from Asset Hub",
|
||||
"searchPlaceholder": "Search by name or folder...",
|
||||
"noAssets": "No assets in Asset Hub",
|
||||
"createInAssetHub": "Please create characters/locations/voices in Asset Hub first",
|
||||
"noSearchResults": "No matching assets found",
|
||||
"appearances": "appearances",
|
||||
"images": "images",
|
||||
"cancel": "Cancel",
|
||||
"confirmCopy": "Confirm Copy",
|
||||
"copyFromGlobal": "Copy from Asset Hub",
|
||||
"copySuccess": "Copy successful",
|
||||
"copyFailed": "Copy failed",
|
||||
"preview": "Preview",
|
||||
"stop": "Stop"
|
||||
}
|
||||
321
messages/en/assets.json
Normal file
321
messages/en/assets.json
Normal file
@@ -0,0 +1,321 @@
|
||||
{
|
||||
"stage": {
|
||||
"title": "Assets Confirmation",
|
||||
"characters": "Characters",
|
||||
"locations": "Locations",
|
||||
"analyze": "Analyze Assets",
|
||||
"analyzing": "Analyzing...",
|
||||
"generateAll": "Generate All",
|
||||
"noCharacters": "No characters",
|
||||
"noLocations": "No locations",
|
||||
"confirmProfiles": "Character Profiles to Confirm",
|
||||
"confirmHint": "Please confirm these profiles before generating descriptions",
|
||||
"confirmAll": "Confirm All ({count})",
|
||||
"assetsTitle": "Asset Analysis",
|
||||
"characterAssets": "Character Assets",
|
||||
"locationAssets": "Location Assets",
|
||||
"counts": "{characterCount} Characters, {appearanceCount} Appearances",
|
||||
"locationCounts": "{count} Locations",
|
||||
"undoFailed": "Undo failed",
|
||||
"undoFailedError": "Undo failed: {error}",
|
||||
"undoSuccess": "Reverted to previous version",
|
||||
"editFailed": "Edit failed",
|
||||
"editFailedError": "Image edit failed: {error}",
|
||||
"updateSuccess": "Description updated successfully"
|
||||
},
|
||||
"character": {
|
||||
"add": "Add Character",
|
||||
"edit": "Edit Character",
|
||||
"delete": "Delete Character",
|
||||
"deleteConfirm": "Delete this character?",
|
||||
"deleteAppearanceConfirm": "Delete this appearance?",
|
||||
"deleteFailed": "Delete failed: {error}",
|
||||
"deleteWhole": "Delete Whole Character",
|
||||
"deleteOptions": "Delete Options",
|
||||
"name": "Character Name",
|
||||
"description": "Appearance Description",
|
||||
"generateImage": "Generate Profile",
|
||||
"regenerateImage": "Regenerate",
|
||||
"generate": "Generate",
|
||||
"regenerating": "Generating...",
|
||||
"profile": "Profile",
|
||||
"voiceSettings": "Voice Settings",
|
||||
"speaker": "Speaker",
|
||||
"selectSpeaker": "Select Speaker",
|
||||
"noSpeaker": "Not Set",
|
||||
"primary": "Primary",
|
||||
"secondary": "Secondary",
|
||||
"generateFromPrimary": "Generate from Primary",
|
||||
"selectPrimaryFirst": "Select primary first",
|
||||
"editing": "Editing...",
|
||||
"confirming": "Confirming...",
|
||||
"assetCount": "{count} Appearances",
|
||||
"characterCount": "{count} Characters",
|
||||
"updateFailed": "Update description failed",
|
||||
"addFailed": "Add character failed",
|
||||
"copyFromGlobal": "Copy from Asset Hub"
|
||||
},
|
||||
"location": {
|
||||
"add": "Add Location",
|
||||
"edit": "Edit Location",
|
||||
"delete": "Delete Location",
|
||||
"deleteConfirm": "Delete this location?",
|
||||
"deleteFailed": "Delete failed: {error}",
|
||||
"name": "Location Name",
|
||||
"summary": "Summary",
|
||||
"summaryPlaceholder": "Usage/associations, e.g.: John's master bedroom",
|
||||
"description": "Location Description",
|
||||
"generateImage": "Generate Image",
|
||||
"regenerateImage": "Regenerate",
|
||||
"updateFailed": "Update description failed",
|
||||
"addFailed": "Add location failed"
|
||||
},
|
||||
"image": {
|
||||
"upload": "Upload Image",
|
||||
"uploadReplace": "Upload Replacement",
|
||||
"uploadFailed": "Upload Failed",
|
||||
"uploadFailedError": "Upload failed: {error}",
|
||||
"uploadSuccess": "Upload Success!",
|
||||
"edit": "Edit Image",
|
||||
"editPrompt": "Edit Prompt",
|
||||
"undo": "Undo to Previous Version",
|
||||
"undoConfirm": "Are you sure you want to undo to the previous version? Current version will be deleted.",
|
||||
"regenerateGroup": "Regenerate Group",
|
||||
"regenerateStuck": "Click to regenerate (if stuck)",
|
||||
"selectTip": "Once selected and confirmed, you can edit and modify the image",
|
||||
"selectFirst": "Please select an image first",
|
||||
"useThis": "Use this option",
|
||||
"optionAlt": "{name} - Option {number}",
|
||||
"optionNumber": "Option {number}",
|
||||
"optionSelected": "Selected Option {number}",
|
||||
"confirmOption": "Confirm Option {number}",
|
||||
"deleteOthersHint": "(delete others)",
|
||||
"confirmSuccess": "Selection confirmed",
|
||||
"confirmFailed": "Confirm selection failed: {error}",
|
||||
"selectFailed": "Select image failed: {error}",
|
||||
"cancelSelection": "Cancel Selection",
|
||||
"deleteThis": "Delete this appearance",
|
||||
"undoFailed": "Undo failed",
|
||||
"undoSuccess": "✓ Reverted to previous version",
|
||||
"editFailed": "Image edit failed",
|
||||
"editSuccess": "Image edit successful",
|
||||
"regenerateFailed": "Regenerate failed: {error}"
|
||||
},
|
||||
"modal": {
|
||||
"newCharacter": "New Character",
|
||||
"addSubAppearance": "Add Sub-Appearance",
|
||||
"aiDesign": "AI Design",
|
||||
"aiDesigning": "Designing...",
|
||||
"designInstruction": "Please enter design instruction",
|
||||
"enterNameDesc": "Please enter character name and description",
|
||||
"selectCharacter": "Please select a character",
|
||||
"enterChangeReason": "Please enter change reason",
|
||||
"enterSubDesc": "Please enter appearance description",
|
||||
"insufficientBalance": "Insufficient Balance\n\n{error}",
|
||||
"designFailed": "AI Design Failed: {error}",
|
||||
"addFailed": "Add Failed: {error}",
|
||||
"aiDesignPlaceholderNew": "e.g. A 20-year-old female mage, blonde hair, blue eyes...",
|
||||
"aiDesignPlaceholderSub": "e.g. Changed into black combat gear...",
|
||||
"aiTipNew": "Describe the character, AI will generate details",
|
||||
"aiTipSub": "Describe the new state, AI will generate sub-appearance description",
|
||||
"nameLabel": "Character Name",
|
||||
"namePlaceholder": "Enter name...",
|
||||
"descLabel": "Appearance Description",
|
||||
"descPlaceholder": "Enter description...",
|
||||
"selectLabel": "Select Character",
|
||||
"selectPlaceholder": "-- Select Character --",
|
||||
"existingAppearances": "Existing:",
|
||||
"reasonLabel": "Change Reason",
|
||||
"reasonPlaceholder": "e.g. After changing clothes, Injured...",
|
||||
"reasonTip": "Briefly describe the difference from primary appearance",
|
||||
"subDescPlaceholder": "Describe only the changes...",
|
||||
"subDescTip": "Only describe changes (clothes, state), face/body inherits from primary",
|
||||
"adding": "Adding...",
|
||||
"insufficientBalanceDefault": "Insufficient balance, please top up to continue",
|
||||
"addFailedGeneric": "Add Failed",
|
||||
"appearancesCount": "Appearances",
|
||||
"addCharacter": "Add Character",
|
||||
"addLocation": "Add Location",
|
||||
"aiDesignTip": "Describe the scene you want, AI will generate name and details",
|
||||
"designing": "AI designing...",
|
||||
"saveName": "Save Name",
|
||||
"saveOnly": "Save Only",
|
||||
"sceneDescription": "Scene Description",
|
||||
"scenePrompt": "Scene Description Prompt",
|
||||
"appearancePrompt": "Appearance Description Prompt",
|
||||
"smartModify": "Smart Modify",
|
||||
"modifyPlaceholder": "e.g.: Change to night, add moonlight, add curtains...",
|
||||
"modifyPlaceholderCharacter": "e.g.: Change hair to blonde, height to 180cm, wear black suit...",
|
||||
"modifying": "Smart modifying...",
|
||||
"modifyFailed": "Modification failed",
|
||||
"editCharacter": "Edit Character",
|
||||
"editLocation": "Edit Location",
|
||||
"saveAndGenerate": "Save and Generate",
|
||||
"generatingAutoClose": "Generating image, will close automatically when done...",
|
||||
"aiLocationTip": "Enter what you want to modify, AI will adjust the scene description",
|
||||
"aiDesignPlaceholderLocation": "e.g. An ancient magical library, towering bookshelves, dim candlelight, mysterious atmosphere...",
|
||||
"artStyle": "Art Style",
|
||||
"generate": "Generate",
|
||||
"introduction": "Character Introduction",
|
||||
"introductionPlaceholder": "e.g.: The protagonist; 'I' refers to her. Others call her 'Snow' or 'Sister Snow'...",
|
||||
"introductionTip": "Describe the character's role in the story, narrative perspective (who 'I' refers to), how others address them",
|
||||
"saveIntroduction": "Save Introduction"
|
||||
},
|
||||
"toolbar": {
|
||||
"filter": "Filter",
|
||||
"viewAll": "View All",
|
||||
"showGenerated": "Generated",
|
||||
"showPending": "Pending",
|
||||
"assetManagement": "Asset Management",
|
||||
"assetCount": "{total} assets ({appearances} character appearances + {locations} locations)",
|
||||
"globalAnalyze": "Global Analysis",
|
||||
"globalAnalyzing": "Performing global asset analysis...",
|
||||
"globalAnalyzingHint": "Please don't refresh. Results will appear automatically when complete",
|
||||
"globalAnalyzingTip": "Analyzing all episodes, extracting characters and locations...",
|
||||
"globalAnalyzeHint": "Analyze all episodes to extract characters and locations",
|
||||
"globalAnalyzeSuccess": "Global analysis complete: {characters} new characters, {locations} new locations",
|
||||
"globalAnalyzeFailed": "Global analysis failed",
|
||||
"generateAll": "Generate All Images",
|
||||
"generateAllNoop": "All assets already have images, nothing to generate",
|
||||
"generating": "Generating ({current}/{total})",
|
||||
"regenerateAll": "Regenerate All",
|
||||
"regenerateAllConfirm": "Regenerate images for all assets? This will overwrite existing images.",
|
||||
"noAssetsToGenerate": "No assets available for generation",
|
||||
"regenerateAllHint": "Regenerate all asset images (overwrite existing)"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Actions",
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"copy": "Copy",
|
||||
"delete": "Delete",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"generate": "Generate",
|
||||
"generateFailed": "Generation Failed",
|
||||
"loading": "Loading...",
|
||||
"none": "None",
|
||||
"preview": "Preview",
|
||||
"refresh": "Refresh",
|
||||
"regenerate": "Regenerate",
|
||||
"save": "Save",
|
||||
"status": "Status",
|
||||
"submitFailed": "Submit Failed",
|
||||
"upload": "Upload",
|
||||
"unknownError": "Unknown error"
|
||||
},
|
||||
"video": {
|
||||
"panelCard": {
|
||||
"generating": "Generating...",
|
||||
"editPrompt": "Edit Prompt"
|
||||
}
|
||||
},
|
||||
"smartImport": {
|
||||
"preview": {
|
||||
"saving": "Saving..."
|
||||
}
|
||||
},
|
||||
"storyboard": {
|
||||
"group": {
|
||||
"generating": "Generating..."
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"saveFailed": "Save Failed, please retry",
|
||||
"failed": "failed, please retry",
|
||||
"insufficientBalance": "Insufficient balance",
|
||||
"aiDesignFailed": "AI design failed",
|
||||
"createFailed": "Creation failed"
|
||||
},
|
||||
"assetLibrary": {
|
||||
"button": "Asset Library",
|
||||
"title": "Asset Library",
|
||||
"copySuccessCharacter": "Character appearance copied successfully",
|
||||
"copySuccessLocation": "Location image copied successfully",
|
||||
"copySuccessVoice": "Voice copied successfully",
|
||||
"copyFailed": "Copy failed: {error}"
|
||||
},
|
||||
"tts": {
|
||||
"voiceDesignSaved": "AI-designed voice has been set for {name}",
|
||||
"saveVoiceDesignFailed": "Failed to save voice design: {error}",
|
||||
"title": "Voice",
|
||||
"noVoice": "No voice",
|
||||
"previewFailed": "Preview failed: {error}",
|
||||
"uploadFailed": "Upload audio failed: {error}",
|
||||
"uploading": "Uploading...",
|
||||
"uploaded": "Uploaded",
|
||||
"uploadAudio": "Upload Audio",
|
||||
"pause": "Pause",
|
||||
"preview": "Preview Voice"
|
||||
},
|
||||
"characterProfile": {
|
||||
"importance": {
|
||||
"S": "S-Level - Main Protagonist",
|
||||
"A": "A-Level - Core Supporting",
|
||||
"B": "B-Level - Important Supporting",
|
||||
"C": "C-Level - Minor Character",
|
||||
"D": "D-Level - Extra"
|
||||
},
|
||||
"costumeLevel": {
|
||||
"5": "Royal/Luxury",
|
||||
"4": "Noble/Elite",
|
||||
"3": "Professional/Quality",
|
||||
"2": "Casual/Normal",
|
||||
"1": "Plain/Uniform"
|
||||
},
|
||||
"importanceLevel": "Character Importance Level",
|
||||
"characterArchetype": "Character Archetype",
|
||||
"archetypePlaceholder": "e.g.: Domineering CEO, Schemer",
|
||||
"personalityTags": "Personality Tags",
|
||||
"addTagPlaceholder": "Add tag",
|
||||
"costumeLevelLabel": "Costume Level",
|
||||
"suggestedColors": "Suggested Colors",
|
||||
"colorPlaceholder": "e.g.: Navy blue, Gold",
|
||||
"primaryMarker": "Primary Identifier",
|
||||
"markerNote": "(Recommended for S/A level)",
|
||||
"markingsPlaceholder": "e.g.: Tear-shaped mole, Silver earring",
|
||||
"visualKeywords": "Visual Keywords",
|
||||
"keywordsPlaceholder": "e.g.: Elite aura, Ascetic style",
|
||||
"editDialogTitle": "Edit Character Profile - {name}",
|
||||
"confirmAndGenerate": "Confirm & Generate",
|
||||
"useExisting": "Use Existing",
|
||||
"editProfile": "Edit Profile",
|
||||
"delete": "Delete Character",
|
||||
"summary": {
|
||||
"gender": "Gender:",
|
||||
"age": "Age:",
|
||||
"era": "Era:",
|
||||
"class": "Class:",
|
||||
"occupation": "Occupation:",
|
||||
"personality": "Personality:",
|
||||
"costume": "Costume:",
|
||||
"identifier": "Identifier:"
|
||||
},
|
||||
"parseFailed": "Failed to parse profile data",
|
||||
"confirmSuccessGenerating": "✓ Profile confirmed. Visual description generation started",
|
||||
"confirmFailed": "Confirm failed: {error}",
|
||||
"noPendingCharacters": "No pending characters to confirm",
|
||||
"batchConfirmPrompt": "Generate visual descriptions for {count} characters?",
|
||||
"batchConfirmSuccess": "✓ Visual descriptions generated for {count} characters",
|
||||
"batchConfirmFailed": "Batch confirmation failed: {error}",
|
||||
"deleteConfirm": "Delete this character? This action cannot be undone.",
|
||||
"deleteSuccess": "✓ Character deleted",
|
||||
"deleteFailed": "Delete failed: {error}"
|
||||
},
|
||||
"imageEdit": {
|
||||
"editCharacterImage": "Edit Character Image",
|
||||
"editLocationImage": "Edit Location Image",
|
||||
"characterLabel": "Character: {name}",
|
||||
"locationLabel": "Location: {name}",
|
||||
"editInstruction": "Edit Instruction",
|
||||
"subtitle": "Enter an edit instruction and optionally upload reference images",
|
||||
"characterPlaceholder": "Describe what you want to change, e.g.: Change hair to blonde, add glasses, change to casual clothes...",
|
||||
"locationPlaceholder": "Describe what you want to change, e.g.: Add more trees, change to night scene...",
|
||||
"storyboardPlaceholder": "Describe what you want to change, e.g.: Change background color, adjust character expression...",
|
||||
"noAssetHint": "No assets, click \"Add Asset\" to select",
|
||||
"referenceImages": "Reference Images",
|
||||
"referenceImagesHint": "(optional, paste supported)",
|
||||
"startEditing": "Start Editing"
|
||||
}
|
||||
}
|
||||
29
messages/en/auth.json
Normal file
29
messages/en/auth.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"welcomeBack": "Welcome Back",
|
||||
"loginTo": "Sign in to waoowaoo",
|
||||
"createAccount": "Create Account",
|
||||
"joinPlatform": "Join waoowaoo",
|
||||
"phoneNumber": "Username",
|
||||
"password": "Password",
|
||||
"confirmPassword": "Confirm Password",
|
||||
"phoneNumberPlaceholder": "Enter your username",
|
||||
"passwordPlaceholder": "Enter your password",
|
||||
"passwordMinPlaceholder": "Enter password (at least 6 characters)",
|
||||
"confirmPasswordPlaceholder": "Re-enter your password",
|
||||
"loginButton": "Sign In",
|
||||
"loginButtonLoading": "Signing in...",
|
||||
"signupButton": "Sign Up",
|
||||
"signupButtonLoading": "Signing up...",
|
||||
"noAccount": "Don't have an account?",
|
||||
"hasAccount": "Already have an account?",
|
||||
"signupNow": "Sign Up Now",
|
||||
"signinNow": "Sign In Now",
|
||||
"backToHome": "← Back to Home",
|
||||
"loginFailed": "Login failed, please check your phone number and password",
|
||||
"loginError": "An error occurred during login",
|
||||
"passwordMismatch": "Passwords do not match",
|
||||
"passwordTooShort": "Password must be at least 6 characters",
|
||||
"signupSuccess": "Registration successful! Redirecting to login page...",
|
||||
"signupFailed": "Registration failed",
|
||||
"signupError": "An error occurred during registration"
|
||||
}
|
||||
15
messages/en/billing.json
Normal file
15
messages/en/billing.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"transactionType": "Transaction Type",
|
||||
"startDate": "Start Date",
|
||||
"endDate": "End Date",
|
||||
"all": "All",
|
||||
"income": "Income",
|
||||
"expense": "Expense",
|
||||
"reset": "Reset",
|
||||
"filter": "Filter",
|
||||
"noRecords": "No records",
|
||||
"accountRecharge": "Account Recharge",
|
||||
"serviceConsumption": "Service Consumption",
|
||||
"balance": "Balance",
|
||||
"allTypes": "All Types"
|
||||
}
|
||||
134
messages/en/common.json
Normal file
134
messages/en/common.json
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
"appName": "waoowaoo",
|
||||
"betaVersion": "Beta v0.1",
|
||||
"loading": "Loading...",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"delete": "Delete",
|
||||
"edit": "Edit",
|
||||
"search": "Search",
|
||||
"clear": "Clear",
|
||||
"close": "Close",
|
||||
"back": "Back",
|
||||
"next": "Next",
|
||||
"previous": "Previous",
|
||||
"submit": "Submit",
|
||||
"reset": "Reset",
|
||||
"generate": "Generate",
|
||||
"regenerate": "Regenerate",
|
||||
"preview": "Preview",
|
||||
"download": "Download",
|
||||
"upload": "Upload",
|
||||
"select": "Select",
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"refresh": "Refresh",
|
||||
"expand": "Expand",
|
||||
"collapse": "Collapse",
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"success": "Success",
|
||||
"error": "Error",
|
||||
"warning": "Warning",
|
||||
"info": "Info",
|
||||
"copy": "Copy",
|
||||
"paste": "Paste",
|
||||
"apply": "Apply",
|
||||
"autoSave": "Auto-save",
|
||||
"saved": "Saved",
|
||||
"episode": "Episode",
|
||||
"project": "Project",
|
||||
"editEpisodeName": "Edit Episode Name",
|
||||
"deleteEpisode": "Delete Episode",
|
||||
"deleteEpisodeConfirm": "Confirm Delete",
|
||||
"newEpisode": "New Episode",
|
||||
"optional": "(Optional)",
|
||||
"rename": "Rename",
|
||||
"dragToReorder": "Drag to reorder",
|
||||
"episodeNamePlaceholder": "Enter episode name...",
|
||||
"cancelSelection": "Cancel selection",
|
||||
"referenceImage": "Reference image",
|
||||
"previewLarge": "Preview large",
|
||||
"viewOriginal": "View original",
|
||||
"schemeN": "Scheme {n}",
|
||||
"insufficientBalance": "Insufficient Balance",
|
||||
"insufficientBalanceDetail": "Insufficient account balance, please recharge to continue",
|
||||
"operationFailed": "Operation failed",
|
||||
"pleaseRetry": "Please retry",
|
||||
"recommended": "Recommended",
|
||||
"language": {
|
||||
"select": "Select language",
|
||||
"zh": "Chinese",
|
||||
"en": "English",
|
||||
"switchConfirmTitle": "Switch language?",
|
||||
"switchConfirmMessage": "Switching to {targetLanguage} will update not only interface text, but also end-to-end prompts, script generation, and workflow outputs. Continue?",
|
||||
"switchConfirmAction": "Switch now"
|
||||
},
|
||||
"taskStatus": {
|
||||
"intent": {
|
||||
"generate": {
|
||||
"running": {
|
||||
"image": "Generating",
|
||||
"video": "Generating",
|
||||
"audio": "Generating",
|
||||
"text": "Generating"
|
||||
}
|
||||
},
|
||||
"regenerate": {
|
||||
"running": {
|
||||
"image": "Regenerating",
|
||||
"video": "Regenerating",
|
||||
"audio": "Regenerating",
|
||||
"text": "Regenerating"
|
||||
}
|
||||
},
|
||||
"modify": {
|
||||
"running": {
|
||||
"image": "Modifying",
|
||||
"video": "Modifying",
|
||||
"audio": "Modifying",
|
||||
"text": "Modifying"
|
||||
}
|
||||
},
|
||||
"analyze": {
|
||||
"running": {
|
||||
"image": "Analyzing",
|
||||
"video": "Analyzing",
|
||||
"audio": "Analyzing",
|
||||
"text": "Analyzing"
|
||||
}
|
||||
},
|
||||
"build": {
|
||||
"running": {
|
||||
"image": "Building",
|
||||
"video": "Building",
|
||||
"audio": "Building",
|
||||
"text": "Building"
|
||||
}
|
||||
},
|
||||
"convert": {
|
||||
"running": {
|
||||
"image": "Converting",
|
||||
"video": "Converting",
|
||||
"audio": "Converting",
|
||||
"text": "Converting"
|
||||
}
|
||||
},
|
||||
"process": {
|
||||
"running": {
|
||||
"image": "Processing",
|
||||
"video": "Processing",
|
||||
"audio": "Processing",
|
||||
"text": "Processing"
|
||||
}
|
||||
}
|
||||
},
|
||||
"failed": {
|
||||
"image": "Failed",
|
||||
"video": "Failed",
|
||||
"audio": "Failed",
|
||||
"text": "Failed"
|
||||
}
|
||||
}
|
||||
}
|
||||
31
messages/en/configModal.json
Normal file
31
messages/en/configModal.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"title": "Project Global Configuration",
|
||||
"saved": "Saved",
|
||||
"autoSave": "Auto-save",
|
||||
"visualStyle": "Visual Style",
|
||||
"modelParams": "Model Parameters",
|
||||
"aspectRatio": "Aspect Ratio",
|
||||
"ttsSettings": "TTS Settings",
|
||||
"loadingModels": "Loading model list...",
|
||||
"analysisModel": "Analysis Model",
|
||||
"characterModel": "Character Model",
|
||||
"locationModel": "Location Model",
|
||||
"storyboardModel": "Storyboard Model",
|
||||
"editModel": "Edit Model",
|
||||
"videoModel": "Video Model",
|
||||
"videoResolution": "Video Resolution",
|
||||
"ttsVoice": "TTS Voice",
|
||||
"ttsRate": "Speech Rate",
|
||||
"fetchModelsFailed": "Failed to fetch user model list",
|
||||
"placeholder": "Please enter...",
|
||||
"description": "Description",
|
||||
"hint": "Hint",
|
||||
"pleaseSelect": "Please select...",
|
||||
"selectModel": "Select Model",
|
||||
"paramConfig": "Parameters",
|
||||
"fixed": "Fixed",
|
||||
"noParams": "No configurable parameters",
|
||||
"confirm": "Confirm",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete"
|
||||
}
|
||||
19
messages/en/errors.json
Normal file
19
messages/en/errors.json
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"UNAUTHORIZED": "Please log in first",
|
||||
"FORBIDDEN": "Access denied",
|
||||
"NOT_FOUND": "Resource not found",
|
||||
"INSUFFICIENT_BALANCE": "Insufficient API balance. Please top up and retry",
|
||||
"RATE_LIMIT": "Too many requests. Please retry in {retryAfter} seconds",
|
||||
"QUOTA_EXCEEDED": "Quota exceeded. Please try again later",
|
||||
"GENERATION_FAILED": "Generation failed. Please retry",
|
||||
"GENERATION_TIMEOUT": "Generation timed out. Please retry",
|
||||
"SENSITIVE_CONTENT": "Content may contain sensitive material",
|
||||
"INVALID_PARAMS": "Invalid parameters",
|
||||
"MISSING_CONFIG": "Please complete model configuration first",
|
||||
"INTERNAL_ERROR": "Server error. Please try again later",
|
||||
"NETWORK_ERROR": "Network error. Please check your connection",
|
||||
"EXTERNAL_ERROR": "External service temporarily unavailable. Please retry later",
|
||||
"TASK_NOT_READY": "Task is still processing",
|
||||
"NO_RESULT": "Task has no result",
|
||||
"CONFLICT": "Resource state conflict"
|
||||
}
|
||||
26
messages/en/landing.json
Normal file
26
messages/en/landing.json
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"title": "waoowaoo",
|
||||
"subtitle": "AI Film & TV Studio",
|
||||
"enterWorkspace": "Enter Workspace",
|
||||
"getStarted": "Get Started",
|
||||
"learnMore": "Learn More",
|
||||
"features": {
|
||||
"title": "Unleash Infinite Creativity",
|
||||
"subtitle": "Full-process AI assistance, from script to final cut",
|
||||
"character": {
|
||||
"title": "Character Workshop",
|
||||
"description": "Create unique anime characters with high consistency"
|
||||
},
|
||||
"storyboard": {
|
||||
"title": "Smart Storyboard",
|
||||
"description": "One-click text to storyboard, precise narrative control"
|
||||
},
|
||||
"world": {
|
||||
"title": "World Building",
|
||||
"description": "Immersive scene generation to build grand story backgrounds"
|
||||
}
|
||||
},
|
||||
"footer": {
|
||||
"copyright": "2026 waoowaoo AI. All rights reserved."
|
||||
}
|
||||
}
|
||||
4
messages/en/layout.json
Normal file
4
messages/en/layout.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"title": "AI Anime Production Platform",
|
||||
"description": "Create professional anime content with cutting-edge AI technology"
|
||||
}
|
||||
27
messages/en/modelSection.json
Normal file
27
messages/en/modelSection.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"llmModels": "Text Model List",
|
||||
"imageModels": "Image Model List",
|
||||
"videoModels": "Video Model List",
|
||||
"price": "Price",
|
||||
"pricePerMillion": "Per million tokens",
|
||||
"pricePerImage": "Per image",
|
||||
"pricePerVideo": "Per video",
|
||||
"name": "Name",
|
||||
"modelId": "Model ID",
|
||||
"modelName": "Model Name",
|
||||
"provider": "Provider",
|
||||
"resolution": "Resolution",
|
||||
"add": "Add",
|
||||
"addModel": "Add Model",
|
||||
"addNewModel": "Add New Model",
|
||||
"selectPreset": "Select Preset Model",
|
||||
"customModel": "Custom Model",
|
||||
"confirmAdd": "Confirm",
|
||||
"cancel": "Cancel",
|
||||
"done": "Done",
|
||||
"fillComplete": "Please fill in all fields",
|
||||
"noModels": "No models yet, click the button above to add",
|
||||
"noApiKey": "Configure API Key",
|
||||
"batchMode": "Batch",
|
||||
"batchModeTooltip": "Offline inference, 50% cheaper, completes within 24 hours"
|
||||
}
|
||||
8
messages/en/nav.json
Normal file
8
messages/en/nav.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"workspace": "Workspace",
|
||||
"assetHub": "Asset Hub",
|
||||
"profile": "Settings",
|
||||
"signin": "Sign In",
|
||||
"signup": "Sign Up",
|
||||
"logout": "Logout"
|
||||
}
|
||||
139
messages/en/novel-promotion.json
Normal file
139
messages/en/novel-promotion.json
Normal file
@@ -0,0 +1,139 @@
|
||||
{
|
||||
"stages": {
|
||||
"story": "Story",
|
||||
"script": "Script",
|
||||
"storyboard": "Storyboard",
|
||||
"video": "Video",
|
||||
"editor": "AI Editor",
|
||||
"editorComingSoon": "Coming soon, follow us for updates"
|
||||
},
|
||||
"buttons": {
|
||||
"assetLibrary": "Asset Library",
|
||||
"settings": "Settings",
|
||||
"refreshData": "Refresh Data",
|
||||
"enterVideoGeneration": "Enter Video Generation →"
|
||||
},
|
||||
"smartImport": {
|
||||
"title": "Start Your Creative Journey",
|
||||
"subtitle": "First, choose your creation method",
|
||||
"manualCreate": {
|
||||
"title": "Create from Episode 1",
|
||||
"description": "Start from episode 1, suitable for episodic creation or single short videos",
|
||||
"button": "Start Creating"
|
||||
},
|
||||
"smartImport": {
|
||||
"title": "Smart Import Full Book",
|
||||
"description": "Upload a complete novel or script, AI engine automatically recognizes chapter structure and splits into episodes.",
|
||||
"button": "Import Now",
|
||||
"recommended": "Recommended"
|
||||
},
|
||||
"upload": {
|
||||
"title": "Upload Raw Material",
|
||||
"subtitle": "AI engine is ready, automatic episode splitting and formatting",
|
||||
"maxWords": "(Max 30,000 words)",
|
||||
"textInput": "Enter Text Content",
|
||||
"documentUpload": "Upload Full Document",
|
||||
"placeholder": "Paste your novel chapters or script content here...",
|
||||
"filePlaceholder": "File uploaded mode",
|
||||
"clickUpload": "Click to upload document",
|
||||
"clearTextFirst": "Please clear left text first",
|
||||
"supportedFormats": "Supports Word, TXT formats",
|
||||
"preview": "Preview",
|
||||
"expandPreview": "Expand More",
|
||||
"collapsePreview": "Collapse",
|
||||
"deleteFile": "Delete File",
|
||||
"startAnalysis": "Start Smart Analysis",
|
||||
"back": "Back",
|
||||
"words": "words"
|
||||
},
|
||||
"analyzing": {
|
||||
"title": "AI is Analyzing Your Story",
|
||||
"description": "Recognizing chapter structure, smart splitting in progress...",
|
||||
"autoSave": "Will auto-save after analysis complete"
|
||||
},
|
||||
"preview": {
|
||||
"title": "Smart Splitting Complete",
|
||||
"episodeCount": "Automatically split into {count} episodes",
|
||||
"totalWords": "Total {count} words",
|
||||
"autoSaved": "✓ Auto-saved",
|
||||
"reanalyze": "Re-analyze",
|
||||
"confirm": "Confirm Complete",
|
||||
"saving": "Saving...",
|
||||
"episodeList": "Episode List",
|
||||
"addEpisode": "Add Episode",
|
||||
"averageWords": "Average per episode",
|
||||
"episodeContent": "Episode Content",
|
||||
"episodePlaceholder": "Enter episode title...",
|
||||
"summaryPlaceholder": "Enter plot summary...",
|
||||
"newEpisode": "New Episode",
|
||||
"deleteEpisode": "Delete Episode",
|
||||
"deleteConfirm": {
|
||||
"title": "Confirm Delete",
|
||||
"message": "Are you sure you want to delete \"{title}\"?",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm Delete"
|
||||
},
|
||||
"tip": {
|
||||
"title": "Tip",
|
||||
"content": "You can directly edit titles, summaries, and content. After clicking [Confirm Complete], episodes will be officially imported into the project"
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"fileTooLarge": "File too large, please upload a file smaller than 10MB",
|
||||
"docNotSupported": ".doc format not supported, please convert to .docx in Word",
|
||||
"fileEmpty": "File content is empty",
|
||||
"fileReadError": "File read failed, please try again",
|
||||
"uploadFirst": "Please upload or paste content first",
|
||||
"analyzeFailed": "Analysis failed",
|
||||
"saveFailed": "Save failed"
|
||||
},
|
||||
"cancelConfirm": "Are you sure you want to cancel? Analyzed episodes will be cleared."
|
||||
},
|
||||
"storyInput": {
|
||||
"currentEditing": "Currently editing: {name}",
|
||||
"editingTip": "The following workflow is for this episode only. Switch episodes in the top left if needed",
|
||||
"wordCount": "Word count:",
|
||||
"assetLibraryTip": {
|
||||
"title": "Need custom characters and locations?",
|
||||
"description": "Click the 「Asset Library」 button in the top right to upload asset setting documents or manually add characters/locations. AI will prioritize using settings from the asset library for analysis."
|
||||
},
|
||||
"videoRatio": "Video Ratio",
|
||||
"visualStyle": "Visual Style",
|
||||
"moreConfig": "For more configuration options, click the 「 Settings」 button in the top right",
|
||||
"narration": {
|
||||
"title": "Enable Narration Voiceover",
|
||||
"description": "Generate TTS voice narration to add commentary to your video"
|
||||
},
|
||||
"creating": "AI Creating...",
|
||||
"ready": "✓ Configuration complete, ready for next step",
|
||||
"pleaseInput": "Please enter script content first"
|
||||
},
|
||||
"execution": {
|
||||
"selectEpisode": "Please select an episode first",
|
||||
"fillContentFirst": "Please enter content first",
|
||||
"requestAborted": "Request aborted (possibly due to page refresh)",
|
||||
"analysisFailed": "Asset analysis failed",
|
||||
"prepareFailed": "Preparation failed",
|
||||
"generationFailed": "Generation failed",
|
||||
"batchVideoFailed": "Batch video generation failed",
|
||||
"updateFailed": "Update failed",
|
||||
"saveFailed": "Save failed",
|
||||
"storyToScriptRunning": "Story→Script V2 running",
|
||||
"scriptToStoryboardRunning": "Script→Storyboard V2 running",
|
||||
"storyToScriptFailed": "Story to script failed",
|
||||
"scriptToStoryboardFailed": "Script to storyboard failed",
|
||||
"taskStreamTimeout": "Task timed out. The task may still be running in the background — please check its status or retry"
|
||||
},
|
||||
"rebuildConfirm": {
|
||||
"storyToScript": {
|
||||
"title": "Script Flow Will Be Rebuilt",
|
||||
"message": "Downstream storyboard data is detected for this episode ({storyboardCount} storyboards, {panelCount} panels). Continuing will clear and rebuild this data. Continue?"
|
||||
},
|
||||
"scriptToStoryboard": {
|
||||
"title": "Storyboard Data Will Be Rebuilt",
|
||||
"message": "Existing storyboard data is detected for this episode ({storyboardCount} storyboards, {panelCount} panels). Continuing will clear current storyboards and regenerate them. Continue?"
|
||||
},
|
||||
"confirm": "Continue and Clear",
|
||||
"cancel": "Cancel"
|
||||
}
|
||||
}
|
||||
107
messages/en/profile.json
Normal file
107
messages/en/profile.json
Normal file
@@ -0,0 +1,107 @@
|
||||
{
|
||||
"user": "User",
|
||||
"personalAccount": "Personal Account",
|
||||
"availableBalance": "Available Balance",
|
||||
"frozen": "Frozen",
|
||||
"totalSpent": "Total Spent",
|
||||
"apiConfig": "API Configuration",
|
||||
"rechargeRecords": "Recharge Records",
|
||||
"billingRecords": "Billing Records",
|
||||
"logout": "Logout",
|
||||
"accountTransactions": "Account Transactions",
|
||||
"projectDetails": "Project Details",
|
||||
"summary": "Summary",
|
||||
"transactions": "Transactions",
|
||||
"noTransactions": "No transaction records",
|
||||
"noProjectCosts": "No project cost records",
|
||||
"noDetails": "This project has no cost details",
|
||||
"noRecords": "No records",
|
||||
"byType": "By Type",
|
||||
"byAction": "By Action",
|
||||
"times": "times",
|
||||
"total": "Total",
|
||||
"filter": "Filter",
|
||||
"allTypes": "All Types",
|
||||
"recharge": "Account Recharge",
|
||||
"consume": "Service Consumption",
|
||||
"balanceAfter": "Balance {amount}",
|
||||
"recordCount": "{count} records",
|
||||
"totalCost": "Total {amount}",
|
||||
"previousPage": "Previous",
|
||||
"nextPage": "Next",
|
||||
"pagination": "{total} items, Page {page} / {totalPages}",
|
||||
"episodeLabel": "Episode {number}",
|
||||
"billingDetail": {
|
||||
"imageWithRes": "{count} images · {resolution}",
|
||||
"image": "{count} images",
|
||||
"videoWithRes": "{count} videos · {resolution}",
|
||||
"video": "{count} videos",
|
||||
"tokens": "{count} tokens",
|
||||
"seconds": "{count}s",
|
||||
"calls": "{count} calls"
|
||||
},
|
||||
"apiTypes": {
|
||||
"image": "Image Generation",
|
||||
"video": "Video Generation",
|
||||
"text": "Text Analysis",
|
||||
"tts": "Text-to-Speech",
|
||||
"voice": "Voice Acting",
|
||||
"voice_design": "Voice Design",
|
||||
"lip_sync": "Lip Sync"
|
||||
},
|
||||
"actionTypes": {
|
||||
"image_panel": "Storyboard Image",
|
||||
"image_character": "Character Image",
|
||||
"image_location": "Location Image",
|
||||
"video_panel": "Video Generation",
|
||||
"lip_sync": "Lip Sync",
|
||||
"voice_line": "Voice Synthesis",
|
||||
"voice_design": "Voice Design",
|
||||
"asset_hub_voice_design": "Asset Hub Voice Design",
|
||||
"regenerate_storyboard_text": "Regenerate Storyboard Text",
|
||||
"insert_panel": "Insert Panel",
|
||||
"panel_variant": "Shot Variant",
|
||||
"modify_asset_image": "Modify Image",
|
||||
"regenerate_group": "Batch Regenerate",
|
||||
"asset_hub_image": "Asset Hub Image",
|
||||
"asset_hub_modify": "Asset Hub Modify Image",
|
||||
"analyze_novel": "Novel Analysis",
|
||||
"story_to_script_run": "Story to Script",
|
||||
"script_to_storyboard_run": "Script to Storyboard",
|
||||
"clips_build": "Clips Build",
|
||||
"screenplay_convert": "Screenplay Convert",
|
||||
"voice_analyze": "Voice Analysis",
|
||||
"analyze_global": "Global Analysis",
|
||||
"ai_modify_appearance": "AI Modify Appearance",
|
||||
"ai_modify_location": "AI Modify Location",
|
||||
"ai_modify_shot_prompt": "AI Modify Shot Prompt",
|
||||
"analyze_shot_variants": "Analyze Shot Variants",
|
||||
"ai_create_character": "AI Create Character",
|
||||
"ai_create_location": "AI Create Location",
|
||||
"reference_to_character": "Reference to Character",
|
||||
"character_profile_confirm": "Confirm Character Profile",
|
||||
"character_profile_batch_confirm": "Batch Confirm Character Profiles",
|
||||
"episode_split_llm": "Episode Split",
|
||||
"asset_hub_ai_design_character": "Asset Hub AI Design Character",
|
||||
"asset_hub_ai_design_location": "Asset Hub AI Design Location",
|
||||
"asset_hub_ai_modify_character": "Asset Hub AI Modify Character",
|
||||
"asset_hub_ai_modify_location": "Asset Hub AI Modify Location",
|
||||
"asset_hub_reference_to_character": "Asset Hub Reference to Character",
|
||||
"storyboard": "Storyboard",
|
||||
"storyboard_candidate": "Storyboard Candidate",
|
||||
"character": "Character Image",
|
||||
"location": "Location Image",
|
||||
"video": "Video",
|
||||
"analyze": "Analysis",
|
||||
"analyze_character": "Character Analysis",
|
||||
"analyze_location": "Location Analysis",
|
||||
"clips": "Clip Splitting",
|
||||
"storyboard_text_plan": "Storyboard Planning",
|
||||
"storyboard_text_detail": "Storyboard Detail",
|
||||
"tts": "TTS",
|
||||
"regenerate": "Regenerate",
|
||||
"voice-generate": "Voice Generation",
|
||||
"voice-design": "Voice Design",
|
||||
"lip-sync": "Lip Sync"
|
||||
}
|
||||
}
|
||||
136
messages/en/progress.json
Normal file
136
messages/en/progress.json
Normal file
@@ -0,0 +1,136 @@
|
||||
{
|
||||
"analyzing": "Analyzing story structure...",
|
||||
"splittingClips": "Splitting into clips...",
|
||||
"convertingScreenplay": "Converting to screenplay...",
|
||||
"submittingStoryboard": "Submitting storyboard...",
|
||||
"step": "Step {current} of {total}",
|
||||
"status": {
|
||||
"completed": "Completed",
|
||||
"failed": "Failed",
|
||||
"processing": "Processing",
|
||||
"queued": "Queued",
|
||||
"pending": "Pending"
|
||||
},
|
||||
"stageCard": {
|
||||
"stage": "Stage",
|
||||
"realtimeStream": "Realtime Stream",
|
||||
"currentStage": "Current Stage",
|
||||
"outputTitle": "Live AI Output · {stage}",
|
||||
"waitingModelOutput": "Waiting for model output...",
|
||||
"reasoningNotProvided": "No reasoning was returned for this step"
|
||||
},
|
||||
"runtime": {
|
||||
"waitingExecution": "Waiting to start",
|
||||
"taskCreated": "Task created",
|
||||
"taskStarted": "Task started",
|
||||
"taskCompleted": "Task completed",
|
||||
"taskFailed": "Task failed",
|
||||
"taskProcessing": "Task processing...",
|
||||
"llm": {
|
||||
"processing": "Model is processing...",
|
||||
"output": "Model is generating output...",
|
||||
"reasoning": "Model is reasoning...",
|
||||
"completed": "Model output completed",
|
||||
"failed": "Model output failed"
|
||||
},
|
||||
"stage": {
|
||||
"llmSubmit": "Submitting model request",
|
||||
"llmStreaming": "Model streaming output",
|
||||
"llmFallbackNonStream": "Model fallback to non-stream mode",
|
||||
"llmCompleted": "Model output completed",
|
||||
"llmFailed": "Model output failed"
|
||||
}
|
||||
},
|
||||
"taskType": {
|
||||
"generic": "Task",
|
||||
"imagePanel": "Storyboard image",
|
||||
"imageCharacter": "Character image",
|
||||
"imageLocation": "Location image",
|
||||
"videoPanel": "Video generation",
|
||||
"lipSync": "Lip sync",
|
||||
"voiceLine": "Voice generation",
|
||||
"voiceDesign": "Voice design",
|
||||
"assetHubVoiceDesign": "Asset hub voice design",
|
||||
"regenerateStoryboardText": "Regenerate storyboard text",
|
||||
"insertPanel": "Insert storyboard panel",
|
||||
"panelVariant": "Storyboard variant",
|
||||
"modifyAssetImage": "Image edit",
|
||||
"regenerateGroup": "Batch regenerate",
|
||||
"assetHubImage": "Asset hub image",
|
||||
"assetHubModify": "Asset hub edit",
|
||||
"analyzeNovel": "Content analysis",
|
||||
"storyToScriptRun": "Story to script",
|
||||
"scriptToStoryboardRun": "Script to storyboard",
|
||||
"clipsBuild": "Clip generation",
|
||||
"screenplayConvert": "Screenplay conversion",
|
||||
"voiceAnalyze": "Voice line analysis",
|
||||
"analyzeGlobal": "Global analysis",
|
||||
"aiModifyAppearance": "Character description modify",
|
||||
"aiModifyLocation": "Location description modify",
|
||||
"aiModifyShotPrompt": "Shot prompt modify",
|
||||
"analyzeShotVariants": "Shot variant analysis",
|
||||
"aiCreateCharacter": "Project character design",
|
||||
"aiCreateLocation": "Project location design",
|
||||
"referenceToCharacter": "Reference to character",
|
||||
"characterProfileConfirm": "Character profile confirm",
|
||||
"characterProfileBatchConfirm": "Character profile batch confirm",
|
||||
"episodeSplitLlm": "Smart episode split",
|
||||
"assetHubAiDesignCharacter": "Asset hub character design",
|
||||
"assetHubAiDesignLocation": "Asset hub location design",
|
||||
"assetHubAiModifyCharacter": "Asset hub character modify",
|
||||
"assetHubAiModifyLocation": "Asset hub location modify",
|
||||
"assetHubReferenceToCharacter": "Asset hub reference to character"
|
||||
},
|
||||
"stage": {
|
||||
"received": "Task received",
|
||||
"generateCharacterImage": "Generate character image",
|
||||
"generateLocationImage": "Generate location image",
|
||||
"generatePanelCandidate": "Generate panel candidate",
|
||||
"generatePanelVideo": "Generate panel video",
|
||||
"generateVoiceSubmit": "Submit voice task",
|
||||
"generateVoicePersist": "Persist voice result",
|
||||
"voiceDesignSubmit": "Submit voice design task",
|
||||
"voiceDesignDone": "Voice design completed",
|
||||
"submitLipSync": "Submit lip sync task",
|
||||
"persistLipSync": "Persist lip sync result",
|
||||
"storyboardClip": "Generate storyboard clip",
|
||||
"regenerateStoryboardPrepare": "Prepare storyboard regeneration",
|
||||
"regenerateStoryboardPersist": "Persist storyboard regeneration",
|
||||
"storyToScriptPrepare": "Prepare story-to-script parameters",
|
||||
"storyToScriptStep": "Execute story-to-script step",
|
||||
"storyToScriptPersist": "Persist story-to-script output",
|
||||
"storyToScriptPersistDone": "Story-to-script output persisted",
|
||||
"scriptToStoryboardPrepare": "Prepare script-to-storyboard parameters",
|
||||
"scriptToStoryboardStep": "Execute script-to-storyboard step",
|
||||
"scriptToStoryboardPersist": "Persist script-to-storyboard output",
|
||||
"scriptToStoryboardPersistDone": "Storyboard and voice output persisted",
|
||||
"insertPanelGenerateText": "Generate inserted panel text",
|
||||
"insertPanelPersist": "Persist inserted panel",
|
||||
"pollingExternal": "Waiting for external service",
|
||||
"enqueueFailed": "Task enqueue failed",
|
||||
"llmProxySubmit": "Submit LLM task",
|
||||
"llmProxyExecute": "Execute LLM task",
|
||||
"llmProxyPersist": "Persist LLM result"
|
||||
},
|
||||
"runConsole": {
|
||||
"storyToScript": "Story to Script",
|
||||
"scriptToStoryboard": "Script to Storyboard",
|
||||
"storyToScriptRunning": "Story→Script running",
|
||||
"scriptToStoryboardRunning": "Script→Storyboard running",
|
||||
"storyToScriptSubtitle": "Story To Script V2",
|
||||
"scriptToStoryboardSubtitle": "Script To Storyboard V2",
|
||||
"stop": "Stop",
|
||||
"minimize": "Minimize"
|
||||
},
|
||||
"streamStep": {
|
||||
"analyzeCharacters": "Analyze characters",
|
||||
"analyzeLocations": "Analyze locations",
|
||||
"splitClips": "Split clips",
|
||||
"screenplayConversion": "Convert screenplay",
|
||||
"storyboardPlan": "Plan storyboard",
|
||||
"cinematographyRules": "Generate cinematography rules",
|
||||
"actingDirection": "Generate acting direction",
|
||||
"storyboardDetailRefine": "Refine storyboard details",
|
||||
"voiceAnalyze": "Analyze voice lines"
|
||||
}
|
||||
}
|
||||
7
messages/en/providerSection.json
Normal file
7
messages/en/providerSection.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"addProvider": "+ Add Provider",
|
||||
"name": "Name",
|
||||
"add": "Add",
|
||||
"save": "Save",
|
||||
"fillRequired": "Please fill in required fields"
|
||||
}
|
||||
70
messages/en/scriptView.json
Normal file
70
messages/en/scriptView.json
Normal file
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"title": "Script View",
|
||||
"scriptBreakdown": "Script Breakdown",
|
||||
"splitCount": "{count} clips split",
|
||||
"noClips": "No clips yet, please generate from story view",
|
||||
"segment": {
|
||||
"title": "Clip {index}",
|
||||
"selected": "(Selected)"
|
||||
},
|
||||
"inSceneAssets": "In-Scene Assets",
|
||||
"currentSelected": "Selected: Clip {number}",
|
||||
"assetView": {
|
||||
"allClips": "All Clips",
|
||||
"viewingClip": "Viewing Clip {number}"
|
||||
},
|
||||
"asset": {
|
||||
"generateCharacter": "Click to generate character →",
|
||||
"generateLocation": "Click to generate location →",
|
||||
"removeCharacterConfirm": "Are you sure you want to remove this character from current clip?",
|
||||
"removeLocationConfirm": "Are you sure you want to remove this location from current clip?",
|
||||
"removeFromClip": "Remove from current clip",
|
||||
"noAudio": "No audio",
|
||||
"playing": "Playing",
|
||||
"listen": "Listen",
|
||||
"activeCharacters": "Active Characters",
|
||||
"activeLocations": "Active Locations",
|
||||
"selectCharacter": "Select character/appearance to add",
|
||||
"selectLocation": "Select location to add",
|
||||
"loadingAssets": "Loading assets...",
|
||||
"appearanceCount": "{count} appearances",
|
||||
"added": "Added",
|
||||
"primary": "Primary",
|
||||
"subAppearance": "Sub appearance",
|
||||
"defaultAppearance": "Default appearance",
|
||||
"clickToRemove": "Click to remove {name}",
|
||||
"clickToAdd": "Click to add {name}"
|
||||
},
|
||||
"screenplay": {
|
||||
"scene": "Scene {number}",
|
||||
"location": "Location:",
|
||||
"locationTime": "Time:",
|
||||
"day": "Day",
|
||||
"night": "Night",
|
||||
"dawn": "Dawn",
|
||||
"dusk": "Dusk",
|
||||
"dialogue": "Dialogue",
|
||||
"action": "Action",
|
||||
"narration": "Narration",
|
||||
"content": "Original Content",
|
||||
"noContent": "No content yet",
|
||||
"clickToEdit": "Click to edit",
|
||||
"interior": "INT",
|
||||
"exterior": "EXT",
|
||||
"characters": "Characters",
|
||||
"noCharacter": "No character info",
|
||||
"noLocation": "No active locations",
|
||||
"noCharacterInClip": "No active characters"
|
||||
},
|
||||
"confirm": {
|
||||
"removeCharacter": "Are you sure you want to remove this character from current clip?",
|
||||
"removeLocation": "Are you sure you want to remove this location from current clip?"
|
||||
},
|
||||
"generate": {
|
||||
"missingAssets": "{count} assets missing images",
|
||||
"missingAssetsTip": "Please generate images for all characters and locations in",
|
||||
"missingAssetsTipLink": "first",
|
||||
"generating": "Generating...",
|
||||
"startGenerate": "Confirm and Start Drawing →"
|
||||
}
|
||||
}
|
||||
168
messages/en/smartImport.json
Normal file
168
messages/en/smartImport.json
Normal file
@@ -0,0 +1,168 @@
|
||||
{
|
||||
"title": "Start Your Creative Journey",
|
||||
"subtitle": "First, choose your creation method",
|
||||
"manualCreate": {
|
||||
"title": "Create from Episode 1",
|
||||
"description": "Start from episode 1, suitable for episodic creation or single short videos",
|
||||
"button": "Start Creating"
|
||||
},
|
||||
"manualDesc": "Start from the first episode, suitable for serialized or single short video production",
|
||||
"startCreate": "Start Creating",
|
||||
"smartImport": {
|
||||
"title": "Smart Text Split",
|
||||
"description": "Upload a complete novel or script, AI engine automatically recognizes chapter structure and splits into episodes.",
|
||||
"button": "Import Now",
|
||||
"recommended": "Recommended"
|
||||
},
|
||||
"markerDetection": {
|
||||
"enable": "Use Markers (Episode X / 第X集)",
|
||||
"tooltip": "Auto-detect [Episode X], [Chapter X], [第X集/章] markers, free & fast"
|
||||
},
|
||||
"smartImportDesc": "Upload your novel or script, AI engine automatically identifies chapter structure for one-click smart episode splitting.",
|
||||
"recommended": "Recommended",
|
||||
"importNow": "Import Now",
|
||||
"uploadTitle": "Upload Source Material",
|
||||
"uploadSubtitle": "AI engine ready, one-click auto-split and format",
|
||||
"maxWords": "Max 30,000 words",
|
||||
"textInput": "Enter Text Content",
|
||||
"textPlaceholder": "Paste your novel chapter or script content here...",
|
||||
"uploadDoc": "Upload Complete Document",
|
||||
"clickUpload": "Click to Upload",
|
||||
"clearText": "Please clear left text first",
|
||||
"supportFormat": "Supports Word, TXT formats",
|
||||
"fileMax": "Max 30,000 words",
|
||||
"words": "words",
|
||||
"startAnalyzing": "Start Analysis",
|
||||
"analyzing": {
|
||||
"title": "AI is Analyzing Your Story",
|
||||
"description": "Recognizing chapter structure, smart splitting in progress...",
|
||||
"autoSave": "Will auto-save after analysis complete"
|
||||
},
|
||||
"analyzingDesc": "Identifying chapter structure, smart splitting...",
|
||||
"autoSave": "Will auto-save after analysis",
|
||||
"splitComplete": "Smart Split Complete",
|
||||
"splitResult": "Auto-split into {count} episodes, total {words} words",
|
||||
"saved": "Auto-saved",
|
||||
"reAnalyze": "Re-analyze",
|
||||
"confirmComplete": "Confirm Complete",
|
||||
"saving": "Saving...",
|
||||
"episodeList": "Episode List",
|
||||
"episodes": "episodes",
|
||||
"episode": "Episode {num}",
|
||||
"addEpisode": "Add Episode",
|
||||
"newEpisode": "New Episode",
|
||||
"avgWords": "Average per episode",
|
||||
"episodeContent": "Episode Content",
|
||||
"plotSummary": "Plot Summary",
|
||||
"enterTitle": "Enter episode title...",
|
||||
"enterSummary": "Enter plot summary...",
|
||||
"confirmDelete": "Confirm Delete",
|
||||
"deleteConfirmMsg": "Are you sure you want to delete \"{title}\"?",
|
||||
"preview": {
|
||||
"title": "Smart Splitting Complete",
|
||||
"episodeCount": "Automatically split into {count} episodes",
|
||||
"totalWords": "Total {count} words",
|
||||
"autoSaved": "✓ Auto-saved",
|
||||
"reanalyze": "Re-analyze",
|
||||
"confirm": "Confirm Complete",
|
||||
"saving": "Saving...",
|
||||
"episodeList": "Episode List",
|
||||
"addEpisode": "Add Episode",
|
||||
"averageWords": "Average per episode",
|
||||
"episodeContent": "Episode Content",
|
||||
"episodePlaceholder": "Enter episode title...",
|
||||
"summaryPlaceholder": "Enter plot summary...",
|
||||
"newEpisode": "New Episode",
|
||||
"deleteEpisode": "Delete Episode",
|
||||
"deleteConfirm": {
|
||||
"title": "Confirm Delete",
|
||||
"message": "Are you sure you want to delete \"{title}\"?",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm Delete"
|
||||
},
|
||||
"tip": {
|
||||
"title": "Tip",
|
||||
"content": "You can directly edit titles, summaries, and content. After clicking [Confirm Complete], episodes will be officially imported into the project"
|
||||
}
|
||||
},
|
||||
"collapsePreview": "Collapse Preview",
|
||||
"expandMore": "Expand More",
|
||||
"deleteFile": "Delete File",
|
||||
"fileTooLarge": "File size cannot exceed 10MB",
|
||||
"docNotSupported": ".doc format not supported. Please save as .docx or .txt and try again",
|
||||
"fileEmpty": "File content is empty",
|
||||
"fileReadError": "File read failed, please ensure correct format",
|
||||
"uploadFirst": "Please upload a file or paste text first",
|
||||
"analyzeFailed": "Analysis failed",
|
||||
"saveFailed": "Save failed",
|
||||
"cancelConfirm": "Are you sure you want to cancel? Analyzed episodes will be cleared.",
|
||||
"deleteEpisode": "Delete Episode",
|
||||
"upload": {
|
||||
"title": "Upload Raw Material",
|
||||
"subtitle": "AI engine is ready, automatic episode splitting and formatting",
|
||||
"maxWords": "(Max 30,000 words)",
|
||||
"textInput": "Enter Text Content",
|
||||
"documentUpload": "Upload Full Document",
|
||||
"placeholder": "Paste your novel chapters or script content here...",
|
||||
"filePlaceholder": "File uploaded mode",
|
||||
"clickUpload": "Click to upload document",
|
||||
"clearTextFirst": "Please clear left text first",
|
||||
"supportedFormats": "Supports Word, TXT formats",
|
||||
"preview": "Preview",
|
||||
"expandPreview": "Expand More",
|
||||
"collapsePreview": "Collapse",
|
||||
"deleteFile": "Delete File",
|
||||
"startAnalysis": "Start Analysis",
|
||||
"back": "Back",
|
||||
"words": "words"
|
||||
},
|
||||
"errors": {
|
||||
"fileTooLarge": "File too large, please upload a file smaller than 10MB",
|
||||
"docNotSupported": ".doc format not supported, please convert to .docx in Word",
|
||||
"fileEmpty": "File content is empty",
|
||||
"fileReadError": "File read failed, please try again",
|
||||
"uploadFirst": "Please upload or paste content first",
|
||||
"analyzeFailed": "Analysis failed",
|
||||
"saveFailed": "Save failed",
|
||||
"analysisModelNotConfigured": "Please configure an analysis model in settings first"
|
||||
},
|
||||
"common": {
|
||||
"edit": "Edit",
|
||||
"delete": "Delete",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"markerDetected": {
|
||||
"title": "Episode Markers Detected",
|
||||
"description": "Detected {count} \"{type}\" format episode markers",
|
||||
"preview": "Preview Split Result",
|
||||
"useMarker": "Use Marker Split",
|
||||
"useMarkerDesc": "Fast & Free",
|
||||
"useAI": "Use AI Smart Split",
|
||||
"useAIDesc": "Intelligent analysis, uses credits",
|
||||
"cancel": "Cancel",
|
||||
"totalCount": "{count} episodes total",
|
||||
"markerTypes": {
|
||||
"episode": "Episode X (Chinese)",
|
||||
"chapter": "Chapter X (Chinese)",
|
||||
"act": "Act X (Chinese)",
|
||||
"scene": "X-Y [Scene]",
|
||||
"numbered": "Numbered",
|
||||
"numberedEscaped": "Numbered (Escaped)",
|
||||
"numberedDirect": "Number + Chinese",
|
||||
"episodeEn": "Episode X",
|
||||
"chapterEn": "Chapter X",
|
||||
"boldNumber": "**Number**",
|
||||
"pureNumber": "Pure Number"
|
||||
}
|
||||
},
|
||||
"globalAnalysis": {
|
||||
"title": "Global Asset Analysis",
|
||||
"description": "Extract all characters and locations from the full book to ensure consistency across episodes",
|
||||
"startButton": "Analyze Now",
|
||||
"analyzing": "Analyzing...",
|
||||
"success": "Analysis complete: {characters} new characters, {locations} new locations",
|
||||
"failed": "Global analysis failed",
|
||||
"confirmAndAnalyze": "Confirm & Analyze Assets"
|
||||
}
|
||||
}
|
||||
7
messages/en/stages.json
Normal file
7
messages/en/stages.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"config": "1. Config",
|
||||
"assets": "2. Asset Analysis",
|
||||
"storyboard": "3. Storyboard Edit",
|
||||
"videos": "4. Video Generation",
|
||||
"voice": "5. Voice Generation"
|
||||
}
|
||||
374
messages/en/storyboard.json
Normal file
374
messages/en/storyboard.json
Normal file
@@ -0,0 +1,374 @@
|
||||
{
|
||||
"phases": {
|
||||
"planning": "Planning Storyboard",
|
||||
"cinematography": "Cinematography Design",
|
||||
"acting": "Acting Direction",
|
||||
"detail": "Adding Details"
|
||||
},
|
||||
"prompts": {
|
||||
"imagePrompt": "Image Prompt",
|
||||
"aiInstruction": "AI Modify Instruction",
|
||||
"supportReference": "(Support @ referencing asset library)",
|
||||
"instructionPlaceholder": "e.g. Change location to @Hospital_Day, character to @ProtagonistA",
|
||||
"selectAsset": "Select Asset",
|
||||
"character": "Character",
|
||||
"location": "Location",
|
||||
"referencedAssets": "Referenced Assets:",
|
||||
"removeAsset": "Remove Asset",
|
||||
"aiModify": "AI Modify & Generate",
|
||||
"aiModifying": "Modifying...",
|
||||
"aiModifyTip": "Click to auto-save prompt and generate new image",
|
||||
"save": "Save",
|
||||
"currentPrompt": "Current Prompt",
|
||||
"enterInstruction": "Please enter instruction",
|
||||
"modifyFailed": "Operation Failed: {error}",
|
||||
"updateFailed": "Update Failed: {error}",
|
||||
"enterContinuation": "Please enter content to append",
|
||||
"appendTitle": "Continue Content",
|
||||
"appendDescription": "Enter new SRT content. The system will split and generate new shots, then append them to the end.",
|
||||
"appendSubmit": "Append and Generate Shots",
|
||||
"appendSuccess": "Append succeeded. New shots were added to the end of the list.",
|
||||
"appendFailed": "Append failed: {error}",
|
||||
"customStyle": "Custom Style"
|
||||
},
|
||||
"group": {
|
||||
"generating": "Generating...",
|
||||
"hasSynced": "✓ Generated",
|
||||
"failed": "Failed",
|
||||
"retry": "Retry",
|
||||
"regenerate": "Regenerate All",
|
||||
"generateAll": "Generate All",
|
||||
"expand": "Expand",
|
||||
"collapse": "Collapse",
|
||||
"addPanel": "Add Panel",
|
||||
"regenerating": "Regenerating...",
|
||||
"aiAnalyzing": "AI Analyzing...",
|
||||
"regenerateText": "Regenerate Text",
|
||||
"generateMissingImages": "Generate all panels without images in this segment",
|
||||
"segment": "Segment",
|
||||
"addAtStart": "Add new storyboard group at the start",
|
||||
"insertHere": "Insert new storyboard group here"
|
||||
},
|
||||
"header": {
|
||||
"title": "Storyboard Editing",
|
||||
"panels": "Panels",
|
||||
"submit": "Submit Generation",
|
||||
"submitting": "Submitting...",
|
||||
"storyboardPanel": "Storyboard Panel",
|
||||
"segments": "segments",
|
||||
"segmentsCount": "Total {count} segments,",
|
||||
"panelsCount": "{count} panels",
|
||||
"generatingStatus": "({count} generating)",
|
||||
"generateAllPanels": "Generate All Panels",
|
||||
"generatePendingPanels": "Generate {count} panels without images",
|
||||
"downloadAll": "Download All",
|
||||
"downloading": "Packing...",
|
||||
"noImages": "No images to download",
|
||||
"downloadAllImages": "Download all images",
|
||||
"generateVideo": "Generate Video →",
|
||||
"back": "← Back",
|
||||
"concurrencyLimit": "Concurrency limit {count}"
|
||||
},
|
||||
"panel": {
|
||||
"shotType": "Shot Type:",
|
||||
"duration": "seconds",
|
||||
"location": "Location:",
|
||||
"characters": "Characters:",
|
||||
"description": "Description:",
|
||||
"text": "Corresponding Text:",
|
||||
"regenerate": "Regenerate",
|
||||
"delete": "Delete",
|
||||
"insertBefore": "Insert Before",
|
||||
"insertAfter": "Insert After",
|
||||
"moveUp": "Move Up",
|
||||
"moveDown": "Move Down",
|
||||
"plot": "Plot:",
|
||||
"summary": "Summary:",
|
||||
"pov": "POV:",
|
||||
"focus": "Focus:",
|
||||
"mode": "Mode:",
|
||||
"shot": "Shot",
|
||||
"segment": "Segment",
|
||||
"stylePrompt": "Style/Prompt",
|
||||
"shotMode": "Shot/Mode",
|
||||
"regenerateImage": "Regenerate Image",
|
||||
"generateImage": "Generate Image",
|
||||
"cardView": "Card View",
|
||||
"tableView": "Table View",
|
||||
"shotTypeLabel": "Shot Type",
|
||||
"cameraMove": "Camera Move",
|
||||
"sourceText": "Source Text",
|
||||
"sceneDescription": "Scene Description",
|
||||
"videoPrompt": "Video Prompt",
|
||||
"videoPromptHint": "Describe subject movement, environment, and camera language",
|
||||
"locationLabel": "Location",
|
||||
"editLocation": "Edit Location",
|
||||
"characterLabel": "Character",
|
||||
"characterLabelWithCount": "Characters ({count})",
|
||||
"editCharacter": "Edit Characters",
|
||||
"select": "+ Select",
|
||||
"add": "+ Add",
|
||||
"noLocation": "No location selected",
|
||||
"locationNotEdited": "Location not edited yet",
|
||||
"noCharacters": "No characters selected",
|
||||
"charactersNotEdited": "Characters not edited yet",
|
||||
"shotTypePlaceholder": "Overhead medium shot...",
|
||||
"cameraMovePlaceholder": "Slow push, static...",
|
||||
"videoPromptPlaceholder": "Prompt for video generation...",
|
||||
"sceneDescriptionPlaceholder": "Describe subject, composition, lighting, and mood",
|
||||
"selectCharacter": "Select Character",
|
||||
"selectLocation": "Select Location",
|
||||
"noCharacterAssets": "No character assets",
|
||||
"noLocationAssets": "No location assets",
|
||||
"selected": "Selected",
|
||||
"defaultAppearance": "Default appearance",
|
||||
"newPanelDescription": "New shot description",
|
||||
"noShotType": "Shot type not set"
|
||||
},
|
||||
"image": {
|
||||
"generating": "Generating...",
|
||||
"regenerate": "Regenerate",
|
||||
"edit": "Edit",
|
||||
"editImage": "Edit Image",
|
||||
"candidate": "Candidate",
|
||||
"selectCandidate": "Select Candidate",
|
||||
"variants": "Variants",
|
||||
"generateVariants": "Generate Variants",
|
||||
"forceRegenerate": "Force Regenerate",
|
||||
"failed": "Generation Failed",
|
||||
"clickToPreview": "Click to preview",
|
||||
"enlargePreview": "Enlarge Preview",
|
||||
"candidateCount": "Candidate {count}",
|
||||
"candidateGenerating": "{count} generating",
|
||||
"selectingCandidate": "Selecting candidate...",
|
||||
"confirmCandidate": "Confirm Selection",
|
||||
"cancelSelection": "Cancel Selection",
|
||||
"noValidCandidates": "No valid candidates",
|
||||
"selectCount": "Select count",
|
||||
"generateMultiple": "Generate multiple candidates",
|
||||
"generateCount": "Generate {count}",
|
||||
"undoShort": "Back"
|
||||
},
|
||||
"candidate": {
|
||||
"title": "Select Candidate Image",
|
||||
"select": "Select",
|
||||
"cancel": "Cancel",
|
||||
"noImages": "No candidate images",
|
||||
"original": "Original"
|
||||
},
|
||||
"variant": {
|
||||
"title": "Image Variants",
|
||||
"generate": "Generate Variants",
|
||||
"select": "Use This Image",
|
||||
"close": "Close",
|
||||
"shotTitle": "Shot Variant - Based on #{number}",
|
||||
"originalDescription": "Original Shot Description",
|
||||
"noDescription": "No description",
|
||||
"noImage": "No image",
|
||||
"shotNum": "Shot {number}",
|
||||
"aiRecommend": "AI Recommended Variants",
|
||||
"reanalyze": "Re-analyze",
|
||||
"shotType": "Shot type:",
|
||||
"cameraMove": "Camera move:",
|
||||
"generating": "Generating",
|
||||
"clickToAnalyze": "Click Re-analyze to get AI recommendations",
|
||||
"customInstruction": "Or custom instruction",
|
||||
"customPlaceholder": "Enter the shot effect you want, e.g.: switch to reverse shot, focus on another character's expression...",
|
||||
"includeCharacter": "Include character reference",
|
||||
"includeLocation": "Include location reference",
|
||||
"customVariant": "Custom variant",
|
||||
"defaultShotType": "Medium Shot",
|
||||
"defaultCameraMove": "Static",
|
||||
"useCustomGenerate": "Generate with custom",
|
||||
"analyzeFailed": "Analysis failed",
|
||||
"creativeScore": "Creativity {score}/5"
|
||||
},
|
||||
"insert": {
|
||||
"title": "Insert New Panel",
|
||||
"position": "Insert Position",
|
||||
"before": "Before Panel {number}",
|
||||
"after": "After Panel {number}",
|
||||
"content": "Panel Content",
|
||||
"shotType": "Shot Type",
|
||||
"location": "Location",
|
||||
"characters": "Characters",
|
||||
"description": "Description",
|
||||
"text": "Corresponding Text",
|
||||
"placeholder": {
|
||||
"shotType": "Select shot type...",
|
||||
"location": "Enter location...",
|
||||
"characters": "Enter characters, comma separated",
|
||||
"description": "Describe the scene...",
|
||||
"text": "Corresponding script text..."
|
||||
},
|
||||
"insert": "Insert",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"common": {
|
||||
"actions": "Actions",
|
||||
"add": "Add",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"copy": "Copy",
|
||||
"delete": "Delete",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"generate": "Generate",
|
||||
"loading": "Loading...",
|
||||
"none": "None",
|
||||
"unknownError": "Unknown error",
|
||||
"preview": "Preview",
|
||||
"refresh": "Refresh",
|
||||
"regenerate": "Regenerate",
|
||||
"deleting": "Deleting",
|
||||
"editing": "Editing",
|
||||
"saving": "Saving...",
|
||||
"saveFailed": "Save failed, changes not synced",
|
||||
"retrySave": "Retry save",
|
||||
"save": "Save",
|
||||
"status": "Status",
|
||||
"submitFailed": "Submit Failed",
|
||||
"upload": "Upload"
|
||||
},
|
||||
"confirm": {
|
||||
"deletePanel": "Delete this shot? This action cannot be undone.",
|
||||
"deleteGroup": "Delete this storyboard group? This will remove all {count} shots in this segment. This action cannot be undone."
|
||||
},
|
||||
"messages": {
|
||||
"episodeNotFound": "Episode information not found",
|
||||
"downloadFailed": "Download failed: {error}",
|
||||
"panelNotFound": "Shot information not found",
|
||||
"modifyFailed": "Modify failed: {error}",
|
||||
"selectCandidateFailed": "Select candidate failed: {error}",
|
||||
"insertPanelFailed": "Insert shot failed: {error}",
|
||||
"addPanelFailed": "Add shot failed: {error}",
|
||||
"deletePanelFailed": "Delete shot failed: {error}",
|
||||
"deleteGroupFailed": "Delete storyboard group failed: {error}",
|
||||
"regenerateGroupFailed": "Regenerate storyboard failed: {error}",
|
||||
"addGroupFailed": "Add storyboard group failed: {error}",
|
||||
"moveGroupFailed": "Move storyboard group failed: {error}",
|
||||
"batchGenerateCompleted": "Batch generation completed:\nSucceeded: {succeeded}\nFailed: {failed}\n\nSample errors: {errors}",
|
||||
"batchGenerateFailed": "Batch generation failed: {error}"
|
||||
},
|
||||
"canvas": {
|
||||
"emptyTitle": "No storyboard data yet",
|
||||
"emptyDescription": "Generate clips and storyboard text first, or add a storyboard group above"
|
||||
},
|
||||
"imageEdit": {
|
||||
"title": "Edit Storyboard Image",
|
||||
"subtitle": "Enter a modify instruction and optionally upload reference images or assets",
|
||||
"promptPlaceholder": "Describe what to modify, e.g. change background color or adjust expression...",
|
||||
"referenceImagesLabel": "Reference Images",
|
||||
"referenceImagesHint": "(optional, paste supported)",
|
||||
"start": "Start Editing",
|
||||
"selectAsset": "Select Assets",
|
||||
"selectedAssetsLabel": "Referenced Assets",
|
||||
"selectedAssetsCount": "{count}",
|
||||
"addAsset": "Add Asset",
|
||||
"noAssets": "No assets selected. Click \"Add Asset\" to choose."
|
||||
},
|
||||
"screenplay": {
|
||||
"tabs": {
|
||||
"formatted": "Screenplay",
|
||||
"original": "Original"
|
||||
},
|
||||
"scene": "Scene {number}",
|
||||
"characters": "Characters",
|
||||
"voiceover": "Voiceover",
|
||||
"parseFailedTitle": "Failed to parse screenplay format",
|
||||
"parseFailedDescription": "Please check the original content"
|
||||
},
|
||||
"assets": {
|
||||
"character": {
|
||||
"confirming": "Confirming...",
|
||||
"editing": "Editing..."
|
||||
},
|
||||
"image": {
|
||||
"undo": "Undo to Previous Version"
|
||||
},
|
||||
"location": {
|
||||
"generateImage": "Generate Image"
|
||||
},
|
||||
"stage": {
|
||||
"analyzing": "Analyzing..."
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"toolbar": {
|
||||
"showPending": "Pending"
|
||||
},
|
||||
"panelCard": {
|
||||
"forceRegenerate": "Force Regenerate (if stuck)"
|
||||
}
|
||||
},
|
||||
"smartImport": {
|
||||
"errors": {
|
||||
"analyzeFailed": "Analysis Failed"
|
||||
},
|
||||
"preview": {
|
||||
"reanalyze": "Re-analyze"
|
||||
},
|
||||
"smartImport": {
|
||||
"recommended": "Recommended"
|
||||
}
|
||||
},
|
||||
"aiData": {
|
||||
"title": "AI Data Editor",
|
||||
"subtitle": "Panel {number} - Complete data sent to image generation AI",
|
||||
"basicData": "Storyboard Basic Data",
|
||||
"shotType": "Shot Type",
|
||||
"cameraMove": "Camera Movement",
|
||||
"shotTypePlaceholder": "Overhead, wide shot, eye-level, medium shot...",
|
||||
"cameraMovePlaceholder": "Slow push, static, follow...",
|
||||
"scene": "Scene (Read-only)",
|
||||
"notSelected": "Not selected",
|
||||
"summary": "Scene Summary",
|
||||
"characters": "Characters (Read-only)",
|
||||
"plot": "Plot",
|
||||
"summarize": "Summary",
|
||||
"visualDescription": "Visual Description",
|
||||
"videoPrompt": "Video Prompt",
|
||||
"negativePrompt": "Negative Prompt",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"lightingDirection": "Lighting Direction",
|
||||
"lightingQuality": "Lighting Quality",
|
||||
"depthOfField": "Depth of Field",
|
||||
"colorTone": "Color Tone",
|
||||
"characterPosition": "Character Position Rules",
|
||||
"position": "Position",
|
||||
"posture": "Posture",
|
||||
"facing": "Facing",
|
||||
"photographyRules": "Photography Rules",
|
||||
"viewData": "View Data",
|
||||
"jsonPreview": "JSON Preview",
|
||||
"actingNotes": "Acting Direction (acting_notes)",
|
||||
"actingTitle": "Acting Direction",
|
||||
"actingDescription": "Performance Notes",
|
||||
"noActingData": "No acting data"
|
||||
},
|
||||
"insertModal": {
|
||||
"insertBetween": "Insert between #{before} and #{after}",
|
||||
"panel": "Panel",
|
||||
"noImage": "No image",
|
||||
"insertAtEnd": "End",
|
||||
"aiAnalyze": "AI Auto-analyze",
|
||||
"analyzing": "AI analyzing...",
|
||||
"insert": "Insert",
|
||||
"inserting": "Inserting...",
|
||||
"placeholder": "Optional: Add notes, e.g. add a reaction shot..."
|
||||
},
|
||||
"panelActions": {
|
||||
"insertPanel": "Insert Panel",
|
||||
"panelVariant": "Panel Variant",
|
||||
"insertHere": "Insert panel here",
|
||||
"generateVariant": "Generate variant based on this panel",
|
||||
"needImage": "Need to generate image first",
|
||||
"deleteShot": "Delete Shot",
|
||||
"pasteSrtPlaceholder": "Paste new SRT content..."
|
||||
},
|
||||
"firstLastFrame": {
|
||||
"placeholder": "Enter first/last frame video prompt...",
|
||||
"modelTitle": "First/Last Frame Model"
|
||||
}
|
||||
}
|
||||
210
messages/en/video.json
Normal file
210
messages/en/video.json
Normal file
@@ -0,0 +1,210 @@
|
||||
{
|
||||
"panelCard": {
|
||||
"play": "Play",
|
||||
"pause": "Pause",
|
||||
"retry": "Retry",
|
||||
"regenerate": "Regenerate",
|
||||
"download": "Download",
|
||||
"edit": "Edit",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"generating": "Generating...",
|
||||
"failed": "Failed",
|
||||
"lipSync": "Lip Sync",
|
||||
"lipSyncVideo": "Lip Sync Video",
|
||||
"lipSyncLabel": "Lip Sync",
|
||||
"lipSyncTitle": "Lip Sync",
|
||||
"original": "Original",
|
||||
"synced": "Synced",
|
||||
"videoFixed": "✓ Video",
|
||||
"imagePreview": "Image Preview",
|
||||
"playVoice": "Play Voice",
|
||||
"stopVoice": "Stop",
|
||||
"noVoice": "No voice available",
|
||||
"forceRegenerate": "Force Regenerate (use if stuck)",
|
||||
"regenerateVideo": "Regenerate Video",
|
||||
"lipSyncStatus": "Lip syncing...",
|
||||
"lipSyncInProgress": "Lip syncing in progress...",
|
||||
"lipSyncMayTakeMinutes": "This may take a few minutes",
|
||||
"audioEnabled": "Audio enabled",
|
||||
"audioDisabled": "Audio disabled",
|
||||
"isSynced": "(Synced)",
|
||||
"needVideo": "(Please generate video first)",
|
||||
"needAudio": "(Please generate audio first)",
|
||||
"generateAudio": "Generate Audio",
|
||||
"regenerateLipSync": "Regenerate Lip Sync",
|
||||
"editPrompt": "Edit Prompt",
|
||||
"clickToEditPrompt": "Click to edit prompt...",
|
||||
"shot": "Shot {number}",
|
||||
"unknownShotType": "Unknown",
|
||||
"correspondingText": "Corresponding Text",
|
||||
"generateVideo": "Generate Video",
|
||||
"selectModel": "Select Video Model",
|
||||
"selectVoice": "Select voice to use:",
|
||||
"willAutoPad": "(will auto-pad)",
|
||||
"autoPadding": "Padding",
|
||||
"redo": "Redo",
|
||||
"generatingAudio": "Generating...",
|
||||
"error": {
|
||||
"audioFailed": "Audio generation failed"
|
||||
},
|
||||
"batchMode": "Batch Mode",
|
||||
"batchModeDesc": "Offline inference, 50% cheaper, completes within 24 hours",
|
||||
"batchModeEnabled": "Batch mode enabled",
|
||||
"batchModeDisabled": "Batch mode disabled"
|
||||
},
|
||||
"promptModal": {
|
||||
"title": "Edit Shot #{number} Video Prompt",
|
||||
"shotType": "Shot Type:",
|
||||
"duration": "s",
|
||||
"location": "Location:",
|
||||
"locationUnknown": "Unknown",
|
||||
"characters": "Characters:",
|
||||
"charactersNone": "None",
|
||||
"description": "Description:",
|
||||
"text": "Corresponding Text:",
|
||||
"promptLabel": "Video Prompt",
|
||||
"placeholder": "Enter video prompt...",
|
||||
"tip": "Tip: Video models don't recognize character names, use appearance descriptions like \"young man with black hair and blue eyes\" instead of \"Victor\"",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"toolbar": {
|
||||
"title": "Video Generation",
|
||||
"filter": "Filter",
|
||||
"viewAll": "View All",
|
||||
"showGenerated": "Generated",
|
||||
"showPending": "Pending",
|
||||
"showFailed": "Failed",
|
||||
"totalShots": "Total {count} shots",
|
||||
"generatingShots": "{count} generating",
|
||||
"completedShots": "{count} completed",
|
||||
"failedShots": "{count} failed",
|
||||
"generateAll": "Generate All Videos",
|
||||
"batchConfigTitle": "Batch Generation Settings",
|
||||
"batchConfigDesc": "Choose model and parameters before generating all videos.",
|
||||
"confirmGenerateAll": "Confirm and Generate All",
|
||||
"confirming": "Submitting...",
|
||||
"noVideos": "No videos to download",
|
||||
"downloadCount": "Download {count} videos",
|
||||
"packing": "Packing...",
|
||||
"downloadAll": "Download All",
|
||||
"enterEditor": "Enter Video Editor",
|
||||
"enterEdit": "Enter Editor",
|
||||
"back": "Back"
|
||||
},
|
||||
"stage": {
|
||||
"title": "Video Generation",
|
||||
"generateAll": "Generate All",
|
||||
"regenerateFailed": "Retry Failed",
|
||||
"downloadAll": "Download All Videos",
|
||||
"enterEditor": "Enter Editor",
|
||||
"lipSyncStatus": "Lip syncing...",
|
||||
"hasSynced": "✓ Generated",
|
||||
"generating": "Generating...",
|
||||
"downloading": "Downloading...",
|
||||
"downloadProgress": "Preparing video files... {current}/{total}",
|
||||
"noVideos": "No generated videos",
|
||||
"scrollTo": "Jump to shot",
|
||||
"error": {
|
||||
"saveFailed": "Failed to save video prompt",
|
||||
"lipSyncFailed": "Lip sync failed",
|
||||
"fetchVideosFailed": "Failed to fetch video list"
|
||||
},
|
||||
"downloadFailed": "Download failed",
|
||||
"unknownError": "Unknown error"
|
||||
},
|
||||
"firstLastFrame": {
|
||||
"title": "First/Last Frame Settings",
|
||||
"firstFrame": "First Frame",
|
||||
"lastFrame": "Last Frame",
|
||||
"range": "Shot {from} → Shot {to}",
|
||||
"link": "Link",
|
||||
"unlink": "Unlink",
|
||||
"unlinkAction": "Unlink",
|
||||
"asLastFrameFor": "As last frame for Shot {number}",
|
||||
"asFirstFrameFor": "As first frame for Shot {number}",
|
||||
"customPrompt": "Custom Prompt",
|
||||
"promptPlaceholder": "Enter first/last frame video prompt...",
|
||||
"useDefault": "Use Default",
|
||||
"generate": "Generate First/Last Frame Video",
|
||||
"generated": "First/Last Frame Video Generated",
|
||||
"model": "Model",
|
||||
"withAudio": "With Audio",
|
||||
"audioOn": "On",
|
||||
"audioOff": "Off",
|
||||
"linkToNext": "Link to next panel (First/Last Frame)",
|
||||
"asLastFrame": "As last frame for Panel {number}",
|
||||
"thenTransitionTo": "then transition to"
|
||||
},
|
||||
"editor": {
|
||||
"alert": {
|
||||
"saveSuccess": "Saved successfully",
|
||||
"saveFailed": "Save failed",
|
||||
"exportStarted": "Export has started. Please wait...",
|
||||
"exportFailed": "Export failed"
|
||||
},
|
||||
"toolbar": {
|
||||
"back": "← Back",
|
||||
"saveDirty": "Save *",
|
||||
"saved": "Saved",
|
||||
"export": "Export Video"
|
||||
},
|
||||
"left": {
|
||||
"title": "Media Library",
|
||||
"description": "Clips imported from the video stage will appear here"
|
||||
},
|
||||
"right": {
|
||||
"title": "Properties",
|
||||
"clipLabel": "Clip:",
|
||||
"clipFallback": "Clip {index}",
|
||||
"durationLabel": "Duration:",
|
||||
"transitionLabel": "Transition to Next Clip",
|
||||
"deleteConfirm": "Delete this clip?",
|
||||
"deleteClip": "Delete Clip",
|
||||
"selectClipHint": "Select a clip to view properties"
|
||||
},
|
||||
"preview": {
|
||||
"emptyStartEditing": "Add media to start editing"
|
||||
},
|
||||
"timeline": {
|
||||
"zoomLabel": "Zoom:",
|
||||
"videoTrack": "Video",
|
||||
"emptyHint": "Drag video clips from media library to here",
|
||||
"audioTrack": "Voice",
|
||||
"audioBadge": "A"
|
||||
},
|
||||
"transition": {
|
||||
"title": "Transition",
|
||||
"duration": "Duration",
|
||||
"options": {
|
||||
"none": "None",
|
||||
"dissolve": "Dissolve",
|
||||
"fade": "Fade",
|
||||
"slide": "Slide"
|
||||
}
|
||||
}
|
||||
},
|
||||
"errors": {
|
||||
"unknownError": "Unknown error"
|
||||
},
|
||||
"capability": {
|
||||
"generationMode": "Generation mode",
|
||||
"generateAudio": "Generate audio",
|
||||
"duration": "Duration",
|
||||
"fps": "Frame rate",
|
||||
"resolution": "Resolution",
|
||||
"aspectRatio": "Aspect ratio",
|
||||
"reasoningEffort": "Reasoning effort",
|
||||
"voice": "Voice",
|
||||
"rate": "Rate",
|
||||
"mode": "Mode"
|
||||
},
|
||||
"unit": {
|
||||
"second": "s",
|
||||
"frame": "fps"
|
||||
},
|
||||
"common": {
|
||||
"generate": "Generate"
|
||||
}
|
||||
}
|
||||
254
messages/en/voice.json
Normal file
254
messages/en/voice.json
Normal file
@@ -0,0 +1,254 @@
|
||||
{
|
||||
"title": "Voice Lines",
|
||||
"linesCount": "{count} lines total, ",
|
||||
"audioGeneratedCount": "{count} audio generated",
|
||||
"emotionPrompt": "Emotion Prompt",
|
||||
"emotionPromptTip": "(Leave empty for auto-reference)",
|
||||
"emotionPlaceholder": "e.g. laugh, English only...",
|
||||
"emotionStrength": "Emotion Strength",
|
||||
"flat": "Flat",
|
||||
"intense": "Intense",
|
||||
"generating": "Generating...",
|
||||
"generateVoice": "Generate Voice",
|
||||
"toolbar": {
|
||||
"back": "← Back",
|
||||
"analyzeLines": "Analyze Lines",
|
||||
"addLine": "+ Add Voice",
|
||||
"generateAll": "Generate All Voices",
|
||||
"downloadAll": "Download Voices",
|
||||
"generatingCount": "Generating ({count})",
|
||||
"packing": "Packing...",
|
||||
"stats": "{total} lines | {withVoice} with voice | {withAudio} generated",
|
||||
"noDownload": "No voices to download",
|
||||
"downloadCount": "Download {count} voices",
|
||||
"uploadReferenceHint": "Please upload reference audio for all characters first"
|
||||
},
|
||||
"speakerVoice": {
|
||||
"title": "Speaker Voice Status",
|
||||
"hint": "Please upload reference audio for characters in Asset Library",
|
||||
"linesCount": "{count} lines",
|
||||
"noVoice": "No reference voice",
|
||||
"configured": "✓ Configured",
|
||||
"playVoice": "Play current voice",
|
||||
"aiDesign": "AI Design Voice",
|
||||
"aiDesignVoice": "AI Design Voice",
|
||||
"redesign": "Redesign voice with AI",
|
||||
"uploadAudio": "Upload audio",
|
||||
"uploading": "Uploading",
|
||||
"upload": "Upload",
|
||||
"microsoftVoice": "Microsoft Voice",
|
||||
"microsoft": "MS",
|
||||
"maleVoices": "Male",
|
||||
"femaleVoices": "Female",
|
||||
"openAssetLibrary": "Asset Library",
|
||||
"configuredStatus": "Voice Set",
|
||||
"pendingStatus": "Voice Pending",
|
||||
"voiceSettings": "Voice Settings",
|
||||
"inlineLabel": "Inline"
|
||||
},
|
||||
"inlineBinding": {
|
||||
"title": "Set voice for \"{speaker}\"",
|
||||
"description": "This speaker is not in the asset library. Choose a method to set a reference voice.",
|
||||
"selectFromLibrary": "Select from Voice Library",
|
||||
"selectFromLibraryDesc": "Choose an existing global voice",
|
||||
"uploadAudio": "Upload Reference Audio",
|
||||
"uploadAudioDesc": "Upload MP3, WAV or other audio files as reference voice",
|
||||
"aiDesign": "AI Design Voice",
|
||||
"aiDesignDesc": "Use AI to generate an exclusive reference voice"
|
||||
},
|
||||
"embedded": {
|
||||
"linesStats": "{total} lines · {audio} generated",
|
||||
"reanalyze": "Re-analyze",
|
||||
"analyzeLines": "Analyze Lines",
|
||||
"reanalyzeHint": "Re-analyze lines and update shot matching",
|
||||
"analyzeHint": "Extract lines from script",
|
||||
"downloadVoice": "Download Voices",
|
||||
"generateAllVoice": "Generate All Voices",
|
||||
"pendingCount": "({count} pending)",
|
||||
"generatingProgress": "Generating ({current}/{total})",
|
||||
"generatingHint": "Generating...",
|
||||
"noVoiceHint": "Please set voice for all characters above first",
|
||||
"noLinesHint": "No lines to generate",
|
||||
"allDoneHint": "All lines generated",
|
||||
"generateHint": "Click to generate {count} pending voices",
|
||||
"addLine": "+ Add Voice",
|
||||
"speakerVoiceStatus": "Speaker Voice Status",
|
||||
"speakersCount": "{count}",
|
||||
"listen": "Listen",
|
||||
"listenVoice": "Listen to voice",
|
||||
"reset": "Reset",
|
||||
"resetDesign": "Redesign",
|
||||
"aiDesign": "AI Design",
|
||||
"assetLibrary": "Asset Library"
|
||||
},
|
||||
"lineCard": {
|
||||
"generatingVoice": "Generating",
|
||||
"speaker": "Speaker",
|
||||
"speakerPlaceholder": "Speaker name",
|
||||
"content": "Content",
|
||||
"contentPlaceholder": "Line content",
|
||||
"emotionConfigured": "Emotion set",
|
||||
"emotionSettings": "Emotion Settings",
|
||||
"voiceConfigured": "✓ Configured",
|
||||
"needVoice": "Please set voice above",
|
||||
"locatePanel": "Locate bound shot",
|
||||
"locateVideo": "Locate Video",
|
||||
"play": "Play",
|
||||
"pause": "Pause",
|
||||
"locatePanelCta": "Jump to Shot {index}",
|
||||
"editLine": "Edit line",
|
||||
"deleteLine": "Delete line",
|
||||
"deleteAudio": "Delete audio"
|
||||
},
|
||||
"lineEditor": {
|
||||
"addTitle": "Add Voice Line",
|
||||
"editTitle": "Edit Voice Line",
|
||||
"contentLabel": "Line Content",
|
||||
"contentPlaceholder": "Enter line content",
|
||||
"speakerLabel": "Speaker",
|
||||
"speakerPlaceholder": "Enter speaker name",
|
||||
"selectSpeaker": "Select a speaker",
|
||||
"noSpeakerOptions": "No available speakers in this project yet. Analyze lines first.",
|
||||
"bindPanelLabel": "Bind Shot",
|
||||
"unboundPanel": "Unbound",
|
||||
"panelLabel": "Shot {index}",
|
||||
"saveAdd": "Add Voice",
|
||||
"saveEdit": "Save Changes"
|
||||
},
|
||||
"empty": {
|
||||
"title": "No Voice Lines",
|
||||
"description": "Extract lines and speakers from script",
|
||||
"analyzeButton": "Analyze Lines",
|
||||
"hint": "Please upload reference audio for characters in Asset Library first"
|
||||
},
|
||||
"confirm": {
|
||||
"deleteLine": "Are you sure you want to delete this line?\n\n\"{content}\"\n\nThis action cannot be undone.",
|
||||
"deleteAudio": "Are you sure you want to delete this audio?\n\n\"{content}\"\n\nThis action cannot be undone."
|
||||
},
|
||||
"errors": {
|
||||
"saveFailed": "Save Failed",
|
||||
"analyzeFailed": "Analysis Failed",
|
||||
"generateFailed": "Generation Failed",
|
||||
"batchFailed": "Batch Generation Failed",
|
||||
"downloadFailed": "Download Failed",
|
||||
"deleteFailed": "Delete Failed",
|
||||
"addFailed": "Add Voice Failed",
|
||||
"invalidLineInput": "Content and speaker cannot be empty",
|
||||
"bindFailed": "Bind shot failed",
|
||||
"deleteAudioFailed": "Delete Audio Failed",
|
||||
"uploadFailed": "Upload Failed",
|
||||
"voiceDesignFailed": "Voice Design Save Failed",
|
||||
"emotionSaveFailed": "Emotion Settings Save Failed",
|
||||
"voiceGenerateFailed": "Voice Generation Failed"
|
||||
},
|
||||
"alerts": {
|
||||
"insufficientBalance": "Insufficient Balance",
|
||||
"insufficientBalanceMsg": "Account balance insufficient, please top up to continue",
|
||||
"noLinesToGenerate": "No lines to generate (please upload reference audio for characters first)",
|
||||
"generateComplete": "Complete: {success}/{total} successful",
|
||||
"generateFailed": "{count} failed",
|
||||
"speakerVoiceSet": "Reference audio set for {speaker}",
|
||||
"speakerVoiceUploaded": "Reference audio uploaded for {speaker}",
|
||||
"voiceDesignSet": "AI designed voice set for {speaker}"
|
||||
},
|
||||
"common": {
|
||||
"loading": "Loading...",
|
||||
"save": "Save",
|
||||
"cancel": "Cancel",
|
||||
"cancelling": "Cancelling...",
|
||||
"upload": "Upload",
|
||||
"download": "Download",
|
||||
"generate": "Generate",
|
||||
"regenerate": "Regenerate"
|
||||
},
|
||||
"assets": {
|
||||
"image": {
|
||||
"uploadFailed": "Upload Failed"
|
||||
},
|
||||
"stage": {
|
||||
"analyzing": "Analyzing..."
|
||||
}
|
||||
},
|
||||
"smartImport": {
|
||||
"errors": {
|
||||
"analyzeFailed": "Analysis Failed"
|
||||
}
|
||||
},
|
||||
"video": {
|
||||
"panelCard": {
|
||||
"play": "Play"
|
||||
}
|
||||
},
|
||||
"tts": {
|
||||
"generatedAudio": "Generated Audio",
|
||||
"browserNotSupport": "Your browser does not support audio playback",
|
||||
"audioDuration": "Audio Duration:",
|
||||
"subtitleCount": "Subtitle Count:",
|
||||
"noAudio": "No audio",
|
||||
"srtPreview": "SRT Subtitle Preview",
|
||||
"noSubtitle": "No subtitles",
|
||||
"stats": "Generation Stats",
|
||||
"minute": "min",
|
||||
"second": "sec",
|
||||
"items": "items",
|
||||
"completed": "✓ Completed",
|
||||
"regenerating": "Regenerating...",
|
||||
"regenerateTTS": "Regenerate TTS",
|
||||
"nextStep": "Next: Analyze Assets",
|
||||
"readyTip": "Click to proceed to asset analysis",
|
||||
"needGenerate": "Please generate TTS audio first"
|
||||
},
|
||||
"voiceCreate": {
|
||||
"aiDesignMode": "AI Design Voice",
|
||||
"uploadMode": "Upload Audio",
|
||||
"dropOrClick": "Drop file or click to select",
|
||||
"supportedFormats": "Supports MP3, WAV, OGG, M4A, AAC formats",
|
||||
"invalidFileType": "Unsupported file format. Please upload an audio file",
|
||||
"fileTooLarge": "File too large. Maximum 50MB supported",
|
||||
"previewAudio": "Preview Audio",
|
||||
"uploading": "Uploading...",
|
||||
"uploadFailed": "Upload failed",
|
||||
"uploadSuccess": "Upload successful"
|
||||
},
|
||||
"voiceDesign": {
|
||||
"presets": {
|
||||
"maleBroadcaster": "Male Broadcaster",
|
||||
"gentleFemale": "Gentle Female",
|
||||
"matureMale": "Mature Male",
|
||||
"livelyFemale": "Lively Girl",
|
||||
"intellectualFemale": "Intellectual Female",
|
||||
"narrator": "Narrator"
|
||||
},
|
||||
"presetsPrompts": {
|
||||
"maleBroadcaster": "Middle-aged male broadcaster with steady, deep voice, clear pronunciation",
|
||||
"gentleFemale": "Gentle and sweet young woman with clear, melodious voice",
|
||||
"matureMale": "Mature male with charismatic and expressive voice",
|
||||
"livelyFemale": "Lively young girl with sweet, cute, energetic voice",
|
||||
"intellectualFemale": "Elegant intellectual woman with clear, pleasant voice",
|
||||
"narrator": "Emotional narrator with warm, storytelling voice"
|
||||
},
|
||||
"defaultPreviewText": "Hello, nice to meet you. This is your AI-designed exclusive voice. Let me demonstrate its features for you. Whether it's a gentle conversation or an excited narration, I can deliver it perfectly. I hope you enjoy this voice, let's create amazing content together.",
|
||||
"pleaseSelectStyle": "Please enter or select a voice style",
|
||||
"designVoiceFor": "Design AI Voice for \"{speaker}\"",
|
||||
"hasExistingVoice": "Has voice",
|
||||
"selectStyle": "Select voice style:",
|
||||
"orCustomDescription": "Or custom description:",
|
||||
"describePlaceholder": "Describe voice characteristics: age, gender, tone, pitch...",
|
||||
"editPreviewText": "Edit preview text",
|
||||
"generate3Schemes": "Generate 3 Voice Schemes",
|
||||
"generating3Schemes": "Generating 3 voice schemes...",
|
||||
"estimatedTime": "Est. 15-30 seconds",
|
||||
"selectScheme": "Select voice scheme:",
|
||||
"schemeN": "Scheme {n}",
|
||||
"regenerate": "Regenerate",
|
||||
"confirmUse": "✓ Confirm Use",
|
||||
"confirmReplace": "Confirm Replace Voice?",
|
||||
"replaceWarning": "'s original voice, irreversible",
|
||||
"confirmReplaceBtn": "Confirm Replace",
|
||||
"noVoiceGenerated": "No voice generated",
|
||||
"generationError": "Voice generation failed",
|
||||
"generateFailed": "Failed to generate voice {n}",
|
||||
"preview": "Preview",
|
||||
"playing": "Playing"
|
||||
}
|
||||
}
|
||||
31
messages/en/workspace.json
Normal file
31
messages/en/workspace.json
Normal file
@@ -0,0 +1,31 @@
|
||||
{
|
||||
"title": "My Projects",
|
||||
"subtitle": "Manage your AI anime production projects",
|
||||
"newProject": "New Project",
|
||||
"searchPlaceholder": "Search project name or description...",
|
||||
"searchButton": "Search",
|
||||
"clearButton": "Clear",
|
||||
"updatedAt": "Updated at",
|
||||
"noProjects": "No projects yet",
|
||||
"noProjectsDesc": "Create your first AI anime production project",
|
||||
"noResults": "No matching projects found",
|
||||
"noResultsDesc": "Try using different search terms",
|
||||
"createProject": "New Project",
|
||||
"editProject": "Edit Project",
|
||||
"deleteProject": "Delete Project",
|
||||
"deleteConfirm": "Are you sure you want to delete project \"{name}\"? This action cannot be undone.",
|
||||
"projectName": "Project Name",
|
||||
"projectNamePlaceholder": "Enter project name",
|
||||
"projectDescription": "Project Description (Optional)",
|
||||
"projectDescriptionPlaceholder": "Enter project description",
|
||||
"creating": "Creating...",
|
||||
"saving": "Saving...",
|
||||
"createFailed": "Failed to create project",
|
||||
"updateFailed": "Failed to update project",
|
||||
"deleteFailed": "Failed to delete project",
|
||||
"totalProjects": "{count} projects in total",
|
||||
"statsEpisodes": "Episodes",
|
||||
"statsImages": "Images",
|
||||
"statsVideos": "Videos",
|
||||
"noContent": "No content yet"
|
||||
}
|
||||
24
messages/en/workspaceDetail.json
Normal file
24
messages/en/workspaceDetail.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"globalAssets": "Global Assets",
|
||||
"createFailed": "Creation failed",
|
||||
"deleteFailed": "Deletion failed",
|
||||
"renameFailed": "Rename failed",
|
||||
"refreshFailed": "Refresh failed",
|
||||
"projectNotFound": "Project not found",
|
||||
"backToWorkspace": "Back to Workspace",
|
||||
"episode": "Episode",
|
||||
"sidebar": {
|
||||
"dragToMove": "Drag to move position",
|
||||
"listTitle": "Episode List",
|
||||
"episodeCount": "{count} episodes",
|
||||
"empty": "No episodes yet. Create one below.",
|
||||
"save": "Save",
|
||||
"deleteConfirm": "Delete \"{name}\"?",
|
||||
"delete": "Delete",
|
||||
"cancel": "Cancel",
|
||||
"rename": "Rename",
|
||||
"newEpisodePlaceholder": "Enter episode name...",
|
||||
"create": "Create",
|
||||
"addEpisode": "Add Episode"
|
||||
}
|
||||
}
|
||||
6
messages/en/worldContextModal.json
Normal file
6
messages/en/worldContextModal.json
Normal file
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"title": "World & Character Settings",
|
||||
"description": "Define global character appearances, scene styles, and environment descriptions",
|
||||
"placeholder": "Example:\n【Protagonist】John, 25, short black hair, always wearing a faded denim jacket, melancholy eyes.\n【Heroine】Jane, 22, red twin tails, lively personality, likes to wear Lolita-style dresses.\n【Scene】Cyberpunk city in 2077, neon lights flashing, raining all year round...",
|
||||
"hint": "These settings will be inherited by all episodes as a reference for AI drawing."
|
||||
}
|
||||
Reference in New Issue
Block a user