NightCafe 没有公开的稳定命令行 API,批量渲染无法通过直接调用接口的方式实现。当前可用的路线是:用 Python 脚本读取本地提示词列表,再用浏览器自动化工具(如 Playwright 或 Selenium)模拟操作网页,或生成可逐条粘贴的提示词片段,最终点击生成仍发生在 NightCafe 网页端。
适用场景:你有一批提示词文本,想减少在 NightCafe 网页上重复复制粘贴的体力操作。处理方向:用脚本读取 CSV 并生成待提交列表;可选用浏览器自动化半自动点击,但每次提交前保留人工确认。验证方式:观察任务列表数量变化、结果缩略图是否出现,并让脚本截图留档。风险边界:脚本依赖网页 DOM 结构,NightCafe 改版后需要同步调整选择器,且自动化操作不保证 100% 成功。
先判断能在哪一层自动化
NightCafe 目前在网页端提供图像生成服务,没有官方公开的 API 给用户直接提交任务。你能自动化的部分只有输入框操作和按钮点击。通用工具可选 Selenium 或 Playwright,两者都可以驱动真实浏览器。Selenium 更成熟,Playwright 对等待和截图支持更好。你还需要一个能读取本地提示词的 Python 环境,推荐使用 pandas 或内置 csv 模块处理文本列表。
# 安装示例(在终端执行)
pip install playwright
playwright install chromium注意,NightCafe 的页面结构会变化,脚本里的选择器需要结合当前页面实际确认。不建议用无头模式跑全自动,因为 NightCafe 可能要求登录或做滑块验证。
读取提示词列表的 Python 脚本骨架
新建一个 Python 文件,读取 CSV。CSV 里至少包含 prompt 列,可选 negative_prompt 和 num_images。脚本输出一个列表,每个元素是字典,方便后续逐条处理。
import csv
def load_prompts(csv_path):
prompts = []
with open(csv_path, newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
prompts.append({
'prompt': row.get('prompt', '').strip(),
'negative_prompt': row.get('negative_prompt', '').strip(),
'num_images': int(row.get('num_images', 1) or 1),
})
return prompts
if __name__ == '__main__':
data = load_prompts('prompts.csv')
for item in data:
print(item)CSV 示例:
prompt,negative_prompt,num_images
"cat in the rain","blurry, low quality",2
"mountain landscape, sunset","watermark",1生成可粘贴到 NightCafe 的提示词片段
NightCafe 的输入框接受纯文本,逗号和换行都区分标记。为了让每条提示词更清晰,拼接字段为单行文本,自动分割多图时用逗号分隔。输出到控制台,方便人工复制。
def format_for_nightcafe(item):
parts = []
if item['negative_prompt']:
parts.append(f"negative_prompt: {item['negative_prompt']}")
parts.append(f"num_images: {item['num_images']}")
text = item['prompt']
if parts:
text += " -- " + ", ".join(parts)
return text
# 在加载提示词后使用
for item in data:
print(format_for_nightcafe(item))
print("---")你也可以直接生成带换行的文本,但 NightCafe 输入框通常会把换行当作同一提示词的换行,所以用 -- 分隔参数更保险。实际格式可以先在网页里手动试一次再调整。
用浏览器自动化半自动提交任务
Playwright 示例:打开创建页,填入第一条提示词,点击生成按钮,然后暂停等待人工检查。通过 input() 等待确认,再继续。
import time
from playwright.sync_api import sync_playwright
def run(playwright, items):
browser = playwright.chromium.launch(headless=False)
page = browser.new_page()
page.goto("https://creator.nightcafe.studio/creation")
# 登录等操作需要人工处理,可以先在此处暂停
input("登录完成后按回车继续...")
for idx, item in enumerate(items):
page.fill("textarea[placeholder*='prompt'], textarea", item['prompt'])
page.click("button[type='submit'], button:has-text('Create')")
print(f"已提交第 {idx+1} 条。")
input("检查页面状态,然后按回车继续...")
page.wait_for_timeout(2000)
browser.close()
with sync_playwright() as pw:
items = load_prompts('prompts.csv')
run(pw, items)这段代码依赖页面上的输入框和按钮选择器。实现时需要用开发者工具确认实际情况。自动化时建议保留人工确认,否则可能漏掉错误提示。
验证脚本是否真的成功提交
提交后,NightCafe 创建页或任务列表会显示新任务。你可以通过任务数量变化判断是否提交成功,等待生成结果缩略图出现。脚本每次操作后截图保存,方便事后检查。
page.screenshot(path=f"screenshot_{idx+1}.png")确认脚本稳定后,可以把暂停确认去掉,但保留等待时间,并增加异常捕获。遇到页面元素定位失败,先打印当前页面标题或 URL,再决定是否调整。