Files
rays 9e24dcd5b9 fix(security): render fix suggestions as text and apply them only to exact nodes
Fix suggestions come from model output and can be steered by prompt
injection. Button labels and titles are now set as text, buttons are only
offered on assistant replies, node ids must match a live node exactly
(execution paths walk real subgraph hosts only), and suggested values are
parsed strictly per widget type (number range, toggle literals, combo
membership, bounded text) before anything is changed. Undo and highlight
use the resolved node instead of re-parsing the id.

Adds a Playwright spec that streams a hostile fix block through the chat
island and covers role gating, exact-id resolution and value rejection.
2026-10-13 13:15:54 +08:00

293 lines
21 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"language": "en",
"suggestions": {
"animatediff_context_error": "AnimateDiff Context Error: Context length is invalid or out of range. Adjust the context_length parameter.",
"animatediff_frame_mismatch": "AnimateDiff Frame Mismatch: Frame count doesn't match expectations. Ensure consistent frame count throughout the workflow.",
"animatediff_model_not_found": "AnimateDiff Model Not Found: The AnimateDiff motion model file could not be found. Check models/animatediff/ directory.",
"animatediff_oom": "AnimateDiff Out of Memory: Out of memory during animation generation. Reduce frame count, resolution, or batch size.",
"assertion": "Assertion Failed: {0}. This usually indicates the input data doesn't meet the node's expectations. Check the upstream node's output format.",
"attribute_error": "Attribute Error: Type '{0}' has no attribute '{1}'. This might be due to version mismatch in custom nodes or incorrect model format.",
"autograd": "A PyTorch Autograd error occurred. If you are training, check your loss function. If inference, this shouldn't happen.",
"checkpoint_corrupted": "Corrupted Checkpoint: Model checkpoint file is corrupted or invalid. Try re-downloading the checkpoint.",
"clip_encoding_error": "CLIP Text Encoding Failed: CLIP failed to encode the text prompt. Check for special characters or try simplifying the prompt.",
"controlnet_channel_mismatch": "ControlNet Channel Mismatch: The control image channel count doesn't match expectations. Ensure correct image format (RGB/Grayscale).",
"controlnet_device_mismatch": "ControlNet Device Mismatch: ControlNet model is on a different device than the base model. Ensure all models are on the same device (GPU/CPU).",
"controlnet_invalid_strength": "Invalid ControlNet Strength: The control strength value must be between 0 and 1. Adjust the strength parameter.",
"controlnet_missing_preprocessor": "Missing ControlNet Preprocessor: Required preprocessor not installed. Install the missing preprocessor via ComfyUI-Manager.",
"controlnet_model_not_found": "ControlNet Model Not Found: The specified ControlNet model could not be found. Check if the model file exists in models/controlnet/ directory.",
"controlnet_preprocessor_failed": "ControlNet Preprocessor Failed: The preprocessor execution failed. Verify the preprocessor is correctly installed and the input image is valid.",
"controlnet_size_mismatch": "ControlNet Size Mismatch: The control image dimensions don't match the base image. Ensure both images have the same resolution.",
"controlnet_unsupported_model": "Unsupported ControlNet Model: This ControlNet model type is not supported. Try using a different model or updating your ControlNet nodes.",
"cudnn_error": "CUDNN Execution Failed: Your GPU or Driver might have issues with specific operations. Try running ComfyUI with '--force-fp32' or update your NVIDIA drivers.",
"device_type": "Device/Type Error: Input is {0} but Weights are {1}. Ensure everything is on the same device (GPU/CPU) and same precision.",
"dimension_mismatch": "Dimension Mismatch: Tensor {0} (size {1}) doesn't match Tensor {2} (size {3}) at dim {4}. Check your latent dimensions or image sizes. Are you mixing different resolutions?",
"facerestore_detection_failed": "Face Detection Failed: No faces detected in the input image. Ensure the image contains visible faces.",
"facerestore_model_not_found": "Face Restoration Model Not Found: CodeFormer or GFPGAN model not found. Install via ComfyUI-Manager or check models/facerestore/.",
"facerestore_oom": "Face Restoration Out of Memory: Out of memory during face restoration. Reduce image resolution or batch size.",
"file_not_found": "File Not Found: '{0}'. Please verify the path is correct and check if the model or LoRA has been downloaded.",
"image_format_unsupported": "Unsupported Image Format: The image file format is not supported. Use common formats like PNG, JPG, or WEBP.",
"invalid_prompt": "Invalid Prompt Format: The workflow JSON sent to ComfyUI is malformed. If this is from API, check your JSON syntax.",
"ipadapter_image_encoding_failed": "IPAdapter Image Encoding Failed: Failed to encode image with CLIP vision model. Verify image format and model compatibility.",
"ipadapter_incompatible": "Incompatible IPAdapter: This IPAdapter is incompatible with the current base model. Ensure correct IPAdapter version (SD1.5/SDXL).",
"ipadapter_model_not_found": "IPAdapter Model Not Found: The IPAdapter model file could not be found. Check models/ipadapter/ directory.",
"ipadapter_weight_error": "Invalid IPAdapter Weight: IPAdapter weight value is invalid. Typical range is 0.0 to 2.0.",
"key_error": "Key Error: Key '{0}' not found. This might be due to incompatible model config or malformed Workflow JSON.",
"lora_corrupted": "Corrupted LoRA File: The LoRA file appears to be corrupted or has an invalid format. Try re-downloading the file.",
"lora_incompatible": "Incompatible LoRA: This LoRA is incompatible with the current base model architecture. Ensure you're using the correct LoRA for your model (SD1.5/SDXL).",
"lora_key_mismatch": "LoRA Key Mismatch: LoRA weight keys don't match the model structure. This LoRA may be for a different model architecture.",
"lora_not_found": "LoRA Not Found: The specified LoRA model file could not be found. Check if the file exists in models/loras/ directory.",
"lora_oom": "LoRA Out of Memory: Out of memory when loading or applying LoRA. Try reducing batch size or using fewer LoRAs simultaneously.",
"lora_strength_invalid": "Invalid LoRA Strength: The LoRA strength value is invalid. Typical range is -2.0 to 2.0, with 1.0 being normal strength.",
"matrix_mult": "Matrix Multiplication Error: This usually happens when model architecture doesn't match the weights (e.g., SD1.5 vs SDXL). Check if your Checkpoint matches your LoRA/ControlNet.",
"meta_tensor": "Empty Data: Detected a 'Meta Tensor' which contains shape info but no actual data. This usually happens before model execution. If this persists during execution, check upstream nodes.",
"missing_input": "Missing Input: Required input '{0}' is not provided. Check if the upstream node output is connected correctly.",
"missing_insightface": "Missing InsightFace: IPAdapter or Reactor node requires 'insightface'. Please follow ComfyUI-Manager guide to install the pre-built wheel.",
"missing_module": "Missing Dependency: Python module '{0}' is missing. Please run 'pip install {0}' in your ComfyUI python environment.",
"model_vae_mismatch": "Model/VAE Mismatch: Detected mismatched configurations (e.g. SDXL VAE with SD1.5 Model). Please replace the VAE or Checkpoint.",
"mps_oom": "MPS (Mac) OOM: Out of memory on Mac Metal backend. Try setting 'PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0' environment variable.",
"oom": "OOM (Out Of Memory): Your GPU VRAM is full. Try: 1. Reducing Batch Size. 2. Using '--lowvram' flag. 3. Closing other GPU apps.",
"safetensors_error": "SafeTensors Error: Failed to load model. The file might be corrupted (incomplete download). Please delete and re-download the model.",
"sampler_not_found": "Sampler Not Found: The specified sampler is not available. Check sampler name or update ComfyUI to the latest version.",
"scheduler_error": "Scheduler Configuration Error: The scheduler configuration is invalid. Verify scheduler parameters and compatibility.",
"shape_mismatch": "Shape Mismatch: {0}. Please verify input image dimensions match the model's expectations.",
"tensor_nan_inf": "Data Anomaly: Detected {0} in the tensor. This often causes black images. Check your model precision (FP16/FP32), VAE config, or CFG scale.",
"torch_oom": "PyTorch Out of Memory! This is the newer CUDA OOM error format. Suggestions: 1. Reduce Batch Size 2. Use --lowvram 3. Close other GPU programs.",
"type_mismatch": "Type Mismatch: The model expects {0} (e.g., fp16) but received {1} (e.g., float32). Try using a 'Cast Tensor' node or checking your VAE/Model loading precision.",
"vae_batch_size_error": "VAE Batch Size Too Large: Batch size is too large for VAE processing. Reduce batch size or use tiled VAE.",
"vae_decode_failed": "VAE Decode Failed: VAE latent decode operation failed. Check VAE model compatibility and ensure latent dimensions are correct.",
"vae_encode_failed": "VAE Encode Failed: VAE image encode operation failed. Verify input image format and VAE model compatibility.",
"vae_fp16_issue": "VAE Precision Issue: VAE has precision issues, likely fp16/fp32 mismatch. Try using --force-fp32 or switch to a fp32 VAE.",
"vae_tiling_error": "VAE Tiling Error: VAE tiling configuration is invalid. Adjust the tile size parameters or disable tiling.",
"validation_error": "Validation Error in {0}: {1}. Check input connections and ensure node requirements are met.",
"value_not_in_list": "Value Not In List: '{0}' is not available in the current dropdown/list. This often happens when importing someone else's workflow. Fix: 1) Install the referenced model/resource (Checkpoint/LoRA/VAE/ControlNet, etc.) with the same filename, or 2) Change the node's selection to an existing local option and save the workflow. If you recently added/renamed models, refresh model lists or restart ComfyUI."
},
"ui_text": {
"ai_analysis_header": "🤖 AI Analysis",
"ai_analysis_title": "AI Analysis:",
"ai_provider_label": "AI Provider",
"analysis_failed_header": "⚠️ Analysis Failed",
"analyze_prompt_label": "Analyze this error and provide debugging suggestions:\n\n**Error:** {0}\n**Node:** {1}",
"analyze_with_ai": "✨ Analyze with AI",
"analyzing": "⏳ Analyzing...",
"analyzing_error_label": "Analyzing error: {0}",
"api_key_label": "API Key",
"api_key_migrated_notice": "Your previously saved API key has been moved to session memory and cleared from stored settings.<br>For permanent storage, use <code>DOCTOR_LLM_API_KEY</code> environment variable or the <strong>Advanced Key Store</strong> below.",
"api_key_migrated_title": "ℹ️ API Key Migrated",
"api_key_placeholder": "Leave empty for local LLMs",
"api_key_session_only_hint": "⚡ Session-only — cleared on reload. Use Advanced Key Store below to persist.",
"api_key_tip": "Session-only: this key is cleared on reload. For persistent keys, use ENV vars (DOCTOR_LLM_API_KEY) or the Advanced Key Store below. See:",
"ask_ai_placeholder": "Ask AI about this error...",
"auto_open_on_error_hint": "When enabled, the right-side error report panel will automatically open when a new error is detected",
"auto_open_on_error_label": "Auto-open error report panel on new errors",
"base_url_label": "Base URL",
"category_framework": "Framework",
"category_generic": "Generic",
"category_memory": "Memory",
"category_model_loading": "Model Loading",
"category_workflow": "Workflow",
"chat_ask_ai_placeholder": "Ask AI...",
"chat_cleared": "Chat cleared. Click \"Analyze with AI\" to start again",
"chat_error": "Chat error",
"clear_btn": "Clear",
"clear_history": "Clear History",
"click_to_start_debugging": "Click \"Analyze with AI\" to start debugging",
"configure_api_key_hint": "Please configure your API Key in:",
"confirm_clear": "Clear conversation?",
"connecting_to_ai": "Connecting to AI...",
"connecting_to_local_llm": "Connecting to local LLM...",
"diagnostics_ack": "Acknowledge",
"diagnostics_critical": "Critical",
"diagnostics_empty": "Run diagnostics to check your workflow health",
"diagnostics_evidence": "Evidence",
"diagnostics_ignore": "Ignore",
"diagnostics_info": "Info",
"diagnostics_intent_none": "No dominant intent detected",
"diagnostics_issues": "Issues",
"diagnostics_last_run": "Last run",
"diagnostics_likely_intent": "Likely intent",
"diagnostics_likely_intents": "Likely intents",
"diagnostics_locate_node": "Locate Node",
"diagnostics_no_issues": "No issues detected",
"diagnostics_recommendation": "Recommendation",
"diagnostics_run_btn": "Run Diagnostics",
"diagnostics_running": "Running...",
"diagnostics_score": "Health",
"diagnostics_show_less": "Show less",
"diagnostics_show_more": "Show more",
"diagnostics_title": "Diagnostics",
"diagnostics_warning": "Warning",
"doctor_ai_title": "🤖 Doctor AI",
"doctor_title": "ComfyUI Doctor",
"enable_doctor_label": "Enable Doctor (requires restart)",
"enter_model_manually": "Enter model name manually",
"error_boundary_copied": "Copied!",
"error_boundary_copy_failed": "Copy Failed",
"error_boundary_copy_id_btn": "Copy Error ID",
"error_boundary_error_id_label": "Error ID:",
"error_boundary_msg": "This component encountered an error.",
"error_boundary_permanent_msg": "This component failed after 3 reload attempts.",
"error_boundary_permanent_title": "Component Failed to Load",
"error_boundary_reload_btn": "Reload Component",
"error_boundary_title": "Component Error",
"error_header": "⚠️ Error",
"error_label": "Error",
"error_loading_models": "Error loading models - use manual input",
"llm_destination_not_allowed": "This LLM endpoint is not approved on this server. Ask the server operator to add it to DOCTOR_LLM_ALLOWED_BASE_URLS.",
"error_message": "Error",
"expand_btn": "Expand",
"feedback_admin_token_placeholder": "Admin token (optional if loopback/no DOCTOR_ADMIN_TOKEN)",
"feedback_autofill_btn": "↺ Autofill from latest error",
"feedback_include_stats_label": "Include statistics snapshot (30d)",
"feedback_pattern_id_placeholder": "pattern id",
"feedback_preview_btn": "Preview Sanitized Payload",
"feedback_preview_empty": "Preview output will appear here.",
"feedback_preview_failed": "Preview failed",
"feedback_preview_ready": "Preview ready",
"feedback_preview_ready_warnings": "Preview ready ({0} warnings)",
"feedback_previewing_btn": "⏳ Previewing...",
"feedback_quick_hint": "Create a sanitized feedback PR with pattern candidate + verified suggestion. Server-side GitHub token required for submit.",
"feedback_quick_title": "📨 Quick Community Feedback (GitHub PR)",
"feedback_regex_placeholder": "Regex pattern",
"feedback_submit_btn": "Create GitHub PR",
"feedback_submit_failed": "Submit failed",
"feedback_submit_success": "GitHub PR created",
"feedback_submitting_btn": "⏳ Creating PR...",
"feedback_suggestion_placeholder": "Verified suggestion / fix notes",
"fix_applied": "✓ Applied",
"fix_apply_button": "⚡ Apply",
"fix_apply_tooltip": "Apply parameter fix",
"fix_applying": "Applying...",
"fix_error_invalid_number": "Invalid number value",
"fix_error_node_not_found": "Node not found",
"fix_error_unsafe_type": "Unsafe widget type",
"fix_error_invalid_value": "Invalid value for this widget",
"fix_error_widget_not_found": "Widget not found",
"generation_stopped_user": "Generation stopped by user.",
"global_error_banner_title": "An error occurred",
"info_message": "Click 🏥 Doctor button (left sidebar) to analyze errors with AI",
"info_title": "INFO",
"intent_controlnet": "ControlNet Guided",
"intent_img2img": "Image to Image",
"intent_inpainting": "Inpainting",
"intent_ipadapter": "IP-Adapter Style Transfer",
"intent_lora": "LoRA Fine-tuning",
"intent_stage_generation": "Generation",
"intent_stage_postprocess": "Postprocess",
"intent_stage_setup": "Setup",
"intent_txt2img": "Text to Image",
"intent_upscaling": "Upscaling",
"intent_video": "Video Generation",
"keystore_admin_token_label": "Admin Token (if configured)",
"keystore_admin_token_placeholder": "optional",
"keystore_api_key_label": "API Key",
"keystore_delete_btn": "🗑️ Delete",
"keystore_delete_confirm": "Delete server-stored key for \"{0}\"?",
"keystore_delete_failed": "❌ Delete failed",
"keystore_delete_success": "✅ Deleted {0} key.",
"keystore_deleting_btn": "⏳ Deleting...",
"keystore_no_providers": "No providers configured.",
"keystore_provider_generic_option": "Generic (fallback)",
"keystore_provider_label": "Provider",
"keystore_provider_status": "Provider Status:",
"keystore_save_btn": "💾 Save to Server",
"keystore_save_failed": "❌ Save failed",
"keystore_save_success": "✅ Saved {0} key to server.",
"keystore_saving_btn": "⏳ Saving...",
"keystore_status_required": "Provider and API Key are required.",
"keystore_title": "🔐 Advanced Key Store (Server-side)",
"keystore_warning": "⚠️ Server store saves keys as plaintext JSON on disk (protected by OS file permissions).<br>ENV vars always take higher priority. Use only in trusted localhost/single-user environments.",
"language_label": "Language",
"latest_diagnosis_title": "LATEST DIAGNOSIS",
"lines_omitted": "{0} lines omitted",
"loading_models": "Loading models...",
"locate_node_btn": "Locate Node on Canvas",
"mark_as": "Mark as",
"mark_ignored_btn": "⚪ Ignored",
"mark_resolved_btn": "✔ Resolved",
"mark_unresolved_btn": "⚠ Unresolved",
"missing_api_key_title": "Missing API Key",
"model_manual_placeholder": "e.g., gpt-4o, deepseek-chat",
"model_name_label": "Model Name",
"no_analysis_returned": "No analysis returned",
"no_error_to_mark": "No error to mark",
"no_errors": "No active errors detected.",
"no_errors_detected": "No errors detected",
"no_models_found": "No models found - use manual input",
"no_suggestion_available": "No suggestion available yet",
"no_user_msg_to_regenerate": "No user message to regenerate",
"node_label": "Node",
"nodes_count": "{0} nodes",
"plugins_none_found": "No plugins found.",
"privacy_mode": "Privacy Mode",
"privacy_mode_basic": "Basic (Recommended)",
"privacy_mode_hint": "Controls what sensitive information is removed before sending to AI",
"privacy_mode_none": "None (No sanitization)",
"privacy_mode_strict": "Strict (Maximum privacy)",
"refresh_btn": "Refresh",
"refresh_model_list": "Refresh model list",
"regenerate_btn": "Regenerate Last",
"sanitization_basic": "Basic",
"sanitization_label": "Privacy",
"sanitization_none": "None",
"sanitization_pii_found": "PII removed",
"sanitization_pii_not_found": "No PII detected",
"sanitization_strict": "Strict",
"save_settings_btn": "Save Settings",
"saved_message": "Saved!",
"send_btn": "Send",
"set_base_url_first": "Please set Base URL first",
"settings_hint": "Settings available in",
"settings_path": "ComfyUI Settings → Doctor",
"settings_path_llm": "ComfyUI Settings → Doctor → AI API Key",
"settings_title": "Settings",
"show_error_details": "▶ Show error details",
"show_full_error": "▶ Show full error details",
"sidebar_config_hint": "Configure Doctor settings in the sidebar (left panel)",
"sidebar_doctor_title": "Doctor",
"sidebar_doctor_tooltip": "ComfyUI Doctor - Error Diagnostics",
"sidebar_hint": "Open the Doctor sidebar (left panel) to analyze with AI",
"statistics_title": "Error Statistics",
"stats_categories": "Categories",
"stats_error": "Failed to load statistics",
"stats_ignored": "Ignored",
"stats_last_24h": "Last 24h",
"stats_last_30d": "Last 30d",
"stats_last_7d": "Last 7d",
"stats_loading": "Loading...",
"stats_no_data": "No data yet",
"stats_reset_btn": "Reset",
"stats_reset_confirm": "Reset statistics? This will clear all error history.",
"stats_reset_failed": "Failed to reset statistics",
"stats_reset_success": "Statistics reset successfully",
"stats_resolution_rate": "Resolution Rate",
"stats_resolved": "Resolved",
"stats_top_patterns": "Top Error Patterns",
"stats_total_errors": "Total (30d)",
"stats_unresolved": "Unresolved",
"status_update_failed": "Failed to update status",
"status_update_success": "Status updated",
"stop_btn": "Stop Generating",
"stream_error": "Stream Error",
"suggestion_label": "💡 Suggestion",
"system_running_smoothly": "System running smoothly",
"tab_chat": "Chat",
"tab_settings": "Settings",
"tab_stats": "Statistics",
"telemetry_buffer_count": "Currently buffered: {n} events",
"telemetry_clear_all": "Clear All",
"telemetry_cleared": "Telemetry buffer cleared",
"telemetry_confirm_clear": "Clear all telemetry data?",
"telemetry_description": "Send anonymous usage data to help improve Doctor (Under Construction)",
"telemetry_export": "Export",
"telemetry_label": "Anonymous Telemetry",
"telemetry_upload_none": "Upload destination: None (local only)",
"telemetry_view_buffer": "View Buffer",
"thinking": "Thinking...",
"trust_health_hint": "Fetch /doctor/health and plugin trust report (scan-only).",
"trust_health_title": "Trust & Health",
"unknown_error": "Unknown Error",
"validation_failed_count": "Validation failed for {0} output(s)",
"wait_seconds_hint": "Please wait, this may take a few seconds..."
}
}