Skip to content

About

面向设计师的中文手写 AI 提示词素材库 · 纯静态网页,零依赖,可部署到 GitHub Pages

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

手写提示词库 · Handwritten Prompt Gallery

面向设计师的中文手写 AI 提示词素材库。把平时散落在 Markdown 里的手写字体提示词,变成能按风格筛选、能看效果图、能一键复制、能导出备份的可视化素材库。

纯静态网页,零后端、零数据库、零服务器成本,丢到 GitHub Pages 就能用。所有素材只存在你自己的浏览器里,不上传任何地方。

主界面

墨色暗主题 / 图片反推 / 相似风格检索(点开展开)

墨色暗主题

图片反推

相似风格检索

在线演示:https://feiteng68.github.io/Handwritten-Prompt-Gallery/

功能

当前版本

  • 素材录入:名称、风格分类、标签、正向提示词、负面提示词、备注、预览图
  • 卡片网格浏览,缩略图预览,未配图的素材用文案前三个字做占位
  • 左侧风格分类筛选 + 标签多选筛选 + 全文搜索(名称 / 提示词 / 标签 / 备注)
  • 排序:最近更新 / 录入时间 / 名称
  • 收藏:卡片右上角星标一键收藏,左侧「★ 收藏」单独筛选
  • 一键复制:单独复制正向词、单独复制负面词;整套支持四种输出模板(通用 / Midjourney / Stable Diffusion / 即梦)
  • 相似风格检索:详情里点「找相似」,按风格分类 + 标签重合 + 提示词文本相似度本地排序,点结果直接跳过去
  • 详情弹窗内直接编辑、删除;详情页支持 ← → 键快速翻看上一条/下一条
  • 双主题切换:宣纸墨色(默认)/ 墨色暗
  • 本地持久化:IndexedDB 存素材与图片,关掉浏览器再打开数据还在
  • 内置 8 条示例素材,一键载入
  • 导出:JSON 含预览图(单文件自包含)/ JSON 不含图片 / Markdown(按风格分组)/ ZIP(分出图片文件,可直接拖进 PS)
  • 导入:一次可选多个文件,JSON 和 ZIP 都能读,内容自动汇总后一起导入;支持合并或覆盖,按 id 去重,预览图从文件里还原回本地库
  • 图片反推:上传效果图 → 视觉模型识别笔触风格 → 自动生成名称、风格分类、正向/负面提示词、标签、适用场景 → 人工校验修改后入库,并标记来源为「图片反推」
  • 标签管理:批量重命名 / 删除标签,重命名成已存在的名字即自动合并

规划中

阶段 内容
后续 多张图片排队批量反推、可选本地后端(FastAPI + SQLite)、离线本地多模态模型

快速开始

页面用到了 fetch 读取示例数据、以及 Clipboard API 复制,直接双击 index.html 用 file:// 打开会被浏览器限制。请起一个本地静态服务:

# 方式一:Python(系统自带即可)
python -m http.server 5399

# 方式二:Node
npx serve -l 5399

# 方式三:VS Code 装 Live Server 插件,右键 index.html → Open with Live Server

然后浏览器打开 http://localhost:5399。

端口可以换成任意空闲端口。如果起服后打开页面发现是别的项目,说明端口被占了,换一个即可。

在线使用

直接访问 https://feiteng68.github.io/Handwritten-Prompt-Gallery/。因为是 HTTPS 环境,复制和 IndexedDB 都能正常工作。

部署到你自己的 GitHub Pages

  1. Fork 或把仓库 clone 到本地
  2. 推到你的 GitHub 仓库(不需要任何构建步骤,推上去就是成品)
  3. 仓库 Settings → Pages → Source 选 Deploy from a branch,分支选 main、目录选 / (root),保存
  4. 等 1 分钟左右,访问 https://<你的用户名>.github.io/<仓库名>/

整个项目没有任何构建流程,改了文件推上去就是新的。

目录结构

.
├── index.html              主页面(列表页 + 详情/编辑弹窗 + 导入弹窗)
├── css/
│   └── style.css           双主题样式(CSS 变量驱动)
├── js/
│   ├── store.js            数据层:IndexedDB 读写 + 图片压缩
│   ├── templates.js        输出模板:通用 / Midjourney / SD / 即梦
│   ├── zip.js              ZIP 打包(自写,零依赖,优先原生 deflate-raw)
│   ├── tags.js             标签管理:统计 / 重命名 / 合并 / 删除
│   ├── similar.js          相似风格检索:风格 + 标签 + 文本相似度打分
│   ├── api.js              AI 层:视觉模型适配、强制 JSON 提示词、容错解析
│   ├── export.js           导出 / 导入:JSON 打包解析、Markdown、ZIP、按 id 去重
│   └── main.js             交互层:列表/筛选/搜索/增删改/复制/主题/菜单
├── worker/
│   └── cloudflare-worker.js  可选:反推接口的跨域中转脚本
├── assets/
│   └── preview/            随仓库提交的示例图(用户上传的图不在这里)
├── prompts/
│   └── sample.json         内置示例素材
├── docs/                   README 用的截图
├── LICENSE                 MIT
└── README.md

使用教程

手动新增提示词

  1. 点右上角「+ 新增素材」
  2. 填写名称、选择风格分类、填标签(用逗号分隔,如 标题字, 描边, 竖排)
  3. 正向提示词建议按这个顺序写:书写工具 → 笔触特点 → 线条与字距 → 背景材质 → 用途
  4. 负面提示词写你不想要的东西,例如 印刷体,宋体,笔画等宽,模糊,水印
  5. 拖拽或点击上传预览图(保存时会自动压缩到长边 800px)
  6. 保存后自动跳到详情页,可以直接复制验证

一键复制

  • 卡片上的「复制全集」按默认模板复制整套
  • 详情弹窗里点「复制 ▾」可以选任意模板复制,也可以分别复制正向、负面
  • 选过的模板会成为新的默认模板,下次点卡片就直接用这个格式

输出模板

同一份提示词,按目标工具拼成不同语法。点左侧栏「输出模板设置」配置,右侧有实时预览。

模板 拼装结果
通用纯文本 带「正向提示词:/负面提示词:」标签行,贴哪都能用
Midjourney 正向 + --no 负面关键词 + --ar 3:4 --style raw --v 6.1 --stylize 100(比例、版本、风格化可调;负面词里的中文逗号会自动转成英文逗号)
Stable Diffusion A1111 格式,正向 + Negative prompt: + Steps / Sampler / CFG scale / Size 参数行
即梦 Dreamina 正向 + 不希望出现:负面 的中文句式(前缀可改)

模板只影响复制出来的文本,不改动素材内容。

收藏与相似风格

  • 收藏:鼠标移到卡片上,右上角会出现一个星标,点一下就收藏。左侧栏最上方的「★ 收藏」可以只看收藏过的素材。
  • 找相似:打开一条素材的详情,点「找相似」。它会在本地把你库里最接近的素材排出来,标出相似度和「同风格 / 跨风格」,点一下直接跳过去看。计算方式是「风格分类 40% + 标签重合 30% + 提示词文本相似度 30%」,全程在浏览器里算,不上传任何数据。

觉得结果太少?说明素材的标签打得不够。标签越具体,相似检索越准。

标签管理

点左侧栏「标签」旁的「管理」:

  • 重命名:直接改输入框里的名字
  • 合并:重命名时填一个已存在的标签名,两个标签会自动合并,同一条素材内的重复标签会去掉
  • 删除:从所有素材上移除这个标签,素材本身不受影响

标签改动不会更新素材的更新时间——改个标签名不该把素材顶到「最近更新」最前面。

导出备份

点右上角「导出 ▾」,四选一:

选项 适用场景 说明
JSON · 含预览图 换电脑、重装浏览器、长期存档 图片以 base64 内嵌进同一个文件,单文件自包含,导入后预览图一并还原
JSON · 不含图片 分享提示词、存进 git 体积小得多,导入后素材在但没有预览图
Markdown · 纯文字 放进 Obsidian、Notion 按风格分组,带风格索引,提示词放在代码块里
ZIP 压缩包 想拿到图片原文件 分出 images/ 目录,JPEG 可直接拖进 PS / 剪映;同时附 JSON 与 Markdown

ZIP 包内结构:

hpg-20260914-1330/
├── items.json      素材数据(含 id 与图片对应关系)
├── images/         预览图,文件名即素材 id
├── 提示词.md       按风格分组的 Markdown
└── 怎么用.txt      说明

导入恢复

点「导入」,一次可以选多个文件,JSON 和 ZIP 都能读,内容会汇总后一起导入。选完先弹出预览:

  • 一共几个文件、多少条素材、多少张预览图、有没有无效条目
  • 与现有库有多少条 id 相同——相同就表示合并时会覆盖

确认后选一种方式:

  • 合并:保留现有素材,id 相同的用文件内容覆盖,其余作为新素材加入,不会产生重复条目。日常迁移用这个。
  • 覆盖:先清空当前全部素材与预览图,再导入文件内容。不可撤销,只在你确定要用这份备份完整替换时使用。

ZIP 和 JSON 都能完整回导——ZIP 里的 images/ 会被读出来还原进本地库,收藏状态也一并保留。

建议:导入前先导出一份当前素材作为保险,弹窗底部也有这句提示。

上传图片反推提示词

  1. 先在左侧栏底部「AI 反推设置」里配好服务商和 API Key(只需配一次)
  2. 点右上角「图片反推」
  3. 拖一张手写字体效果图进去,点「开始反推」,等 5–20 秒
  4. AI 会填好名称、风格分类、正向提示词、负面提示词、标签、适用场景,并给出它的观察和把握度
  5. 自己核对修改一遍——反推只是近似描述,不可能 100% 复刻原图。标签可以直接点 × 删掉不合适的
  6. 点「确认入库」,这条素材会带「图片反推」标记存进素材库,和手动录入的区分开

不满意可以点「重跑一次」。展开「AI 的观察与原始返回」能看到模型的原始输出,方便判断它是不是看错了。

数据存在哪

素材和图片都存进浏览器的 IndexedDB(数据库名 hpg),只存本地。清理浏览器站点数据会一并清掉,所以请养成定期导出的习惯——尤其换电脑或重装浏览器之前。

为什么不用 localStorage?它的容量只有约 5MB,图片转 base64 还要再膨胀 33%,几十张就写满,而且超限是静默失败——素材会「看着存了,其实没存」。

反推接口配置

图片反推要调用一个多模态视觉模型。点左侧栏底部的「AI 反推设置」配置,四家可切换:

服务商 默认模型 开通地址
通义千问(默认) qwen-vl-max https://bailian.console.aliyun.com/
豆包 需自己填推理接入点 ID(ep-xxx) https://console.volcengine.com/ark
DeepSeek deepseek-v4-flash-vision-exp(实验版) https://platform.deepseek.com/
OpenAI gpt-4o-mini https://platform.openai.com/api-keys
自定义 任意 OpenAI 兼容接口 —

DeepSeek 目前只有 deepseek-v4-flash-vision-exp 这一个模型能读图,其余模型(deepseek-chat 等)会直接报「This model does not support image」。该模型是实验版,图按最多 384 token 计费;日后若模型改名,在设置的「模型」栏里手填即可。

配好后点「测试连接」,能拿到模型回复就说明通了。

关于跨域

浏览器直接请求这些接口,可能被跨域策略(CORS)拦掉,表现为「请求没能发出去」。两种解法:

  1. 配代理(推荐):把 worker/cloudflare-worker.js 部署到 Cloudflare Workers,把地址填进设置里的「代理地址」。免费额度每天 10 万次,个人绰绰有余。
  2. 把页面部署到能正常访问该接口的环境再试。

代理脚本还支持在 Worker 的环境变量里配一个加密变量 API_KEY——配了之后请求由服务端带 Key,前端就不必保存 Key 了。

安全与成本

  • API Key 只存在你自己浏览器的 localStorage(键名 hpg.ai),不会上传到任何地方
  • 不要把 Key 写进代码或提交到仓库,.gitignore 已屏蔽 .env / local.json / keys.json
  • 上传的图片会先在前端压缩到长边 1024px、JPEG 质量 0.85 再发送,单张约 100–200KB,控制请求体积和调用成本
  • 模型只输出 JSON,前端对返回值做了四层容错(直接解析 → 剥 markdown 围栏 → 抠花括号区间 → 去尾逗号重试),并对字段做归一化,模型返回中文键名、字符串标签、离谱的风格分类都能兜住

素材示例

prompts/sample.json 内置 8 条示例,覆盖 5 种风格:秀丽笔标题字、中性笔手账体、细钢笔复古信笺、马克笔街头字、黑底白字霓虹字。首次打开点「载入示例素材」即可查看。示例 id 固定,重复载入只会覆盖不会产生重复条目。

技术说明

  • 不引入框架与构建工具:原生 HTML/CSS/JS,改一行存盘刷新即生效,开源贡献者不需要懂构建链路
  • 不引入 Tailwind CDN:双主题 + 国风配色用 CSS 变量表达更直接,且页面零外部依赖、断网可用。样式全部集中在 css/style.css,改 :root 里的变量即可换肤
  • ZIP 是手写的:为了不引入 JSZip 这类外部依赖,js/zip.js 自己实现了 ZIP 结构(本地文件头 + 中央目录 + EOCD + CRC32),压缩优先用浏览器原生 CompressionStream('deflate-raw'),不支持时退回不压缩存储。写出来的包用 Python zipfile 校验过 CRC
  • IndexedDB 而非 localStorage:见上文「数据存在哪」
  • file:// 直开的限制:受浏览器安全策略,file:// 下 Clipboard API 与 fetch 会受限,请务必用本地服务器或 GitHub Pages 访问

免责声明

本项目只提供提示词管理与检索工具,不附带任何字体文件,也不包含他人作品。示例提示词仅供设计灵感参考,请勿盗用他人作品用于商业用途。使用视觉模型反推得到的结果仅为近似风格描述,无法 100% 复刻原图;上传他人原创效果图请仅作个人灵感留存,商用需自行取得授权。

开源协议

MIT

About

面向设计师的中文手写 AI 提示词素材库 · 纯静态网页,零依赖,可部署到 GitHub Pages

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages