91 lines
3.0 KiB
Markdown
91 lines
3.0 KiB
Markdown
|
|
# Documentation
|
|
- Class name: LoadSinglePromptFromFile __Inspire
|
|
- Category: InspirePack/Prompt
|
|
- Output node: False
|
|
|
|
该节点旨在从文件中加载特定的提示文本,允许根据索引有针对性地检索文本提示。它有助于从结构化文本文件中提取创意或指导性内容,增强了内容生成工作流程的灵活性和特异性。
|
|
|
|
# Input types
|
|
## Required
|
|
- prompt_file
|
|
- 指定从中加载提示文本的文件路径,作为所需内容源的直接引用。
|
|
- Comfy dtype: COMBO[STRING]
|
|
- Python dtype: str
|
|
- index
|
|
- 确定要从文件中加载的特定提示,实现内容的选择性检索。
|
|
- Comfy dtype: INT
|
|
- Python dtype: int
|
|
|
|
# Output types
|
|
- zipped_prompt
|
|
- 返回一个元组列表,每个元组包含从指定提示中提取的正面和负面文本,以及文件名。这种被称为"zipped_prompt"的结构化输出可供进一步处理。
|
|
- Comfy dtype: ZIPPED_PROMPT
|
|
- Python dtype: List[Tuple[str, str, str]]
|
|
|
|
|
|
## Usage tips
|
|
- Infra type: `CPU`
|
|
- Common nodes: unknown
|
|
|
|
|
|
## Source code
|
|
```python
|
|
class LoadSinglePromptFromFile:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
global prompts_path
|
|
try:
|
|
prompt_files = []
|
|
for root, dirs, files in os.walk(prompts_path):
|
|
for file in files:
|
|
if file.endswith(".txt"):
|
|
file_path = os.path.join(root, file)
|
|
rel_path = os.path.relpath(file_path, prompts_path)
|
|
prompt_files.append(rel_path)
|
|
except Exception:
|
|
prompt_files = []
|
|
|
|
return {"required": {
|
|
"prompt_file": (prompt_files,),
|
|
"index": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("ZIPPED_PROMPT",)
|
|
OUTPUT_IS_LIST = (True,)
|
|
|
|
FUNCTION = "doit"
|
|
|
|
CATEGORY = "InspirePack/Prompt"
|
|
|
|
def doit(self, prompt_file, index):
|
|
prompt_path = os.path.join(prompts_path, prompt_file)
|
|
|
|
prompts = []
|
|
try:
|
|
with open(prompt_path, "r", encoding="utf-8") as file:
|
|
prompt_data = file.read()
|
|
prompt_list = re.split(r'\n\s*-+\s*\n', prompt_data)
|
|
try:
|
|
prompt = prompt_list[index]
|
|
except Exception:
|
|
prompt = prompt_list[-1]
|
|
|
|
pattern = r"positive:(.*?)(?:\n*|$)negative:(.*)"
|
|
matches = re.search(pattern, prompt, re.DOTALL)
|
|
|
|
if matches:
|
|
positive_text = matches.group(1).strip()
|
|
negative_text = matches.group(2).strip()
|
|
result_tuple = (positive_text, negative_text, prompt_file)
|
|
prompts.append(result_tuple)
|
|
else:
|
|
print(f"[WARN] LoadPromptsFromFile: invalid prompt format in '{prompt_file}'")
|
|
except Exception as e:
|
|
print(f"[ERROR] LoadPromptsFromFile: an error occurred while processing '{prompt_file}': {str(e)}")
|
|
|
|
return (prompts, )
|
|
|
|
```
|