npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

visual-prompt-kit

v0.1.0

Published

Composable visual prompt toolkit for image generation workflows.

Downloads

16

Readme

visual-prompt-kit

面向图像生成工作流的结构化提示词 toolkit。

目标

  • 所有内容统一服务于 甜美少女摄影
  • 每个维度都保持 短词、解耦、可随机拼装
  • 第一阶段负责生成结构化关键词。
  • 第二阶段负责给 AI 一段重组指令,把关键词写成适合 Google、豆包等通用生图模型理解的最终提示词。

维护者如果要新增或修改关键词,直接看 docs/keyword-authoring.md

当前主题

目前内置 1 个主题:

  • sweet-girl

它包含 10 个维度:

  • scene
  • expression
  • lighting
  • style
  • vibe
  • facial
  • subject
  • outfit
  • pose
  • camera

目录结构

photo_skills/
  package.json
  README.md
  docs/
    keyword-authoring.md
  skills/
    image-prompt-composer/
      SKILL.md
  bin/
    visual-prompt.js
  src/
    index.js
    cli.js
    define.js
    generator/
      export.js
      generateTags.js
      locks.js
      pick.js
      seed.js
    prompt/
      buildPromptRequest.js
      index.js
      serializePromptRequest.js
    validate/
      index.js
      rules.js
      theme.js
    themes/
      index.js
      sweet-girl/
        index.js
        manifest.js
        presets/
          index.js
        dimensions/
          scene.js
          expression.js
          lighting.js
          style.js
          vibe.js
          facial.js
          subject.js
          outfit.js
          pose.js
          camera.js
  test/
    cli.test.js
    prompt.test.js
    theme.test.js

两阶段工作流

推荐按两阶段使用:

  1. 第一阶段:生成视觉骨架关键词。
  2. 第二阶段:输出给 AI 的重组指令,让 AI 把这些关键词写成适合通用生图模型理解的最终生图提示词。

对应关系:

  • generate / generateTags():生成关键词
  • prompt / buildPromptRequest():生成给 AI 的重组指令

对外 API

包的主入口在 src/index.js

当前暴露的核心 API:

  • getTheme(themeId)
  • listThemes()
  • listDimensions(themeOrId)
  • getDimension(themeOrId, dimensionKey)
  • validateTheme(theme)
  • generateTags(options)
  • buildPromptRequest(options)
  • flattenSelection(tags)
  • serializeSelection(result, format)
  • serializePromptRequest(request, format)

使用示例

第一阶段:生成关键词

const { getTheme, generateTags } = require("./src");

const result = generateTags({
  theme: getTheme("sweet-girl"),
  seed: "2026-03-28",
  preset: "campus",
  locks: {
    scene: ["樱花步道"],
    vibe: ["校园心动感"]
  }
});

console.log(result.tags);
console.log(result.flat);

第二阶段:生成给 AI 的重组指令

const { getTheme, generateTags, buildPromptRequest } = require("./src");

const selection = generateTags({
  theme: getTheme("sweet-girl"),
  seed: "2026-03-28",
  preset: "flowerhouse"
});

const request = buildPromptRequest({
  theme: getTheme("sweet-girl"),
  selection
});

console.log(request.system);
console.log(request.user);

你可以把 request.systemrequest.user 直接喂给外部 AI,让它输出适合 Google、豆包等常见模型理解的最终生图提示词。

Preset

当前内置 4 个 preset:

  • campus
  • beach
  • bedroom
  • flowerhouse

校验规则

validateTheme(theme) 当前会检查:

  • 维度 key 是否重复
  • 词条是否为空
  • 维度内是否有重复词
  • 词条长度是否超标
  • 是否命中主题禁词
  • 词库规模是否低于推荐阈值

命令

photo_skills/ 目录下可直接运行:

npm test
npm run validate
npm run sample -- --seed sample-seed --preset beach
npm run prompt -- --seed sample-seed --preset campus

安装后 Bin 使用示例

本地开发阶段,先在包目录执行:

cd photo_skills
npm link

完成后即可直接调用:

visual-prompt themes
visual-prompt dimensions --theme sweet-girl
visual-prompt presets --theme sweet-girl
visual-prompt validate --theme sweet-girl
visual-prompt generate --theme sweet-girl --preset campus --seed 2026-03-28
visual-prompt generate --theme sweet-girl --preset beach --lock scene=海边栈桥 --format txt
visual-prompt prompt --theme sweet-girl --preset campus --seed 2026-03-28
visual-prompt prompt --theme sweet-girl --preset flowerhouse --lock scene=白色花房 --format txt

如果不想全局链接,而是在其他项目里按本地包安装,也可以这样:

npm install ../photo_skills
npx visual-prompt themes
npx visual-prompt generate --theme sweet-girl --preset bedroom --format txt
npx visual-prompt prompt --theme sweet-girl --preset bedroom

CLI 命令

当前 CLI 支持:

  • themes
  • dimensions
  • presets
  • validate
  • generate
  • prompt

CLI 关键参数:

  • --theme, -t
  • --preset, -p
  • --seed, -s
  • --format, -f
  • --lock, -l
  • --count, -c

默认输出策略:

  • generate 默认输出 json
  • prompt 默认输出 txt
  • themes / dimensions / presets / validate 默认输出文本

Skill 封装

项目内提供了一个通用 Agent Skills 兼容 skill:

  • skills/image-prompt-composer

这个 skill 的职责不是重复实现生成逻辑,而是教代理如何调用 visual-prompt generatevisual-prompt prompt。它适合给 OpenClaw、Claude 或 Codex 这类支持 SKILL.md 的环境复用。