update 添加保存
This commit is contained in:
1
prompts/.env
Normal file
1
prompts/.env
Normal file
@@ -0,0 +1 @@
|
||||
KEVISUAL_NEW_API_KEY=sk-YyVo5WqJBmAnhIPfww9XpUPvHNhsuiXs9a1OSfBul94d7O47
|
||||
6
prompts/.gitignore
vendored
Normal file
6
prompts/.gitignore
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
node_modules
|
||||
|
||||
storage
|
||||
|
||||
.env
|
||||
!.env*example
|
||||
5002
prompts/docs/prompts-01.json
Normal file
5002
prompts/docs/prompts-01.json
Normal file
File diff suppressed because it is too large
Load Diff
624
prompts/package-lock.json
generated
Normal file
624
prompts/package-lock.json
generated
Normal file
@@ -0,0 +1,624 @@
|
||||
{
|
||||
"name": "prompts",
|
||||
"version": "0.0.1",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "prompts",
|
||||
"version": "0.0.1",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"es-toolkit": "^1.43.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@kevisual/types": "^0.0.10",
|
||||
"tsx": "^4.21.0"
|
||||
}
|
||||
},
|
||||
"../node_modules/.pnpm/@kevisual+types@0.0.10/node_modules/@kevisual/types": {
|
||||
"version": "0.0.10",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"../node_modules/.pnpm/es-toolkit@1.43.0/node_modules/es-toolkit": {
|
||||
"version": "1.43.0",
|
||||
"license": "MIT",
|
||||
"workspaces": [
|
||||
"docs",
|
||||
"benchmarks"
|
||||
],
|
||||
"devDependencies": {
|
||||
"@arethetypeswrong/cli": "^0.15.3",
|
||||
"@changesets/changelog-github": "^0.5.0",
|
||||
"@changesets/cli": "^2.27.1",
|
||||
"@eslint/js": "^9.9.0",
|
||||
"@rollup/plugin-terser": "^0.4.4",
|
||||
"@rollup/plugin-typescript": "^12.1.0",
|
||||
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
||||
"@types/broken-link-checker": "^0",
|
||||
"@types/eslint": "^9",
|
||||
"@types/jscodeshift": "^0.12.0",
|
||||
"@types/lodash": "^4.17.20",
|
||||
"@types/node": "^22.7.4",
|
||||
"@types/tar": "^6.1.13",
|
||||
"@typescript-eslint/parser": "^8.26.1",
|
||||
"@vitest/coverage-istanbul": "^2.1.2",
|
||||
"@vitest/eslint-plugin": "^1.3.4",
|
||||
"@vue/compiler-sfc": "^3.5.10",
|
||||
"broken-link-checker": "^0.7.8",
|
||||
"eslint": "^9.22.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-no-for-of-array": "^0.0.1",
|
||||
"eslint-plugin-prettier": "^5.2.1",
|
||||
"eslint-plugin-vue": "^9.28.0",
|
||||
"execa": "^9.3.0",
|
||||
"globals": "^15.9.0",
|
||||
"happy-dom": "^16.7.3",
|
||||
"jscodeshift": "^17.0.0",
|
||||
"packlint": "^0.2.4",
|
||||
"prettier": "^3.2.5",
|
||||
"prettier-plugin-sort-re-exports": "^0.1.0",
|
||||
"rollup": "^4.19.0",
|
||||
"rollup-plugin-dts": "^6.1.1",
|
||||
"tar": "^6",
|
||||
"tslib": "^2.6.3",
|
||||
"tsx": "^4.19.0",
|
||||
"typescript": "^5.8.2",
|
||||
"typescript-eslint": "^8.6.0",
|
||||
"vercel": "^41.4.1",
|
||||
"vitest": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/aix-ppc64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz",
|
||||
"integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"aix"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz",
|
||||
"integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/android-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/darwin-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/freebsd-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz",
|
||||
"integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ia32": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz",
|
||||
"integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-loong64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz",
|
||||
"integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==",
|
||||
"cpu": [
|
||||
"loong64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-mips64el": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz",
|
||||
"integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==",
|
||||
"cpu": [
|
||||
"mips64el"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-ppc64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz",
|
||||
"integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-riscv64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz",
|
||||
"integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-s390x": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz",
|
||||
"integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/linux-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/netbsd-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"netbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/netbsd-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"netbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/openbsd-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"openbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/openbsd-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"openbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/openharmony-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"openharmony"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/sunos-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"sunos"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-arm64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz",
|
||||
"integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-ia32": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz",
|
||||
"integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@esbuild/win32-x64": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz",
|
||||
"integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@kevisual/types": {
|
||||
"resolved": "../node_modules/.pnpm/@kevisual+types@0.0.10/node_modules/@kevisual/types",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/es-toolkit": {
|
||||
"resolved": "../node_modules/.pnpm/es-toolkit@1.43.0/node_modules/es-toolkit",
|
||||
"link": true
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz",
|
||||
"integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@esbuild/aix-ppc64": "0.27.2",
|
||||
"@esbuild/android-arm": "0.27.2",
|
||||
"@esbuild/android-arm64": "0.27.2",
|
||||
"@esbuild/android-x64": "0.27.2",
|
||||
"@esbuild/darwin-arm64": "0.27.2",
|
||||
"@esbuild/darwin-x64": "0.27.2",
|
||||
"@esbuild/freebsd-arm64": "0.27.2",
|
||||
"@esbuild/freebsd-x64": "0.27.2",
|
||||
"@esbuild/linux-arm": "0.27.2",
|
||||
"@esbuild/linux-arm64": "0.27.2",
|
||||
"@esbuild/linux-ia32": "0.27.2",
|
||||
"@esbuild/linux-loong64": "0.27.2",
|
||||
"@esbuild/linux-mips64el": "0.27.2",
|
||||
"@esbuild/linux-ppc64": "0.27.2",
|
||||
"@esbuild/linux-riscv64": "0.27.2",
|
||||
"@esbuild/linux-s390x": "0.27.2",
|
||||
"@esbuild/linux-x64": "0.27.2",
|
||||
"@esbuild/netbsd-arm64": "0.27.2",
|
||||
"@esbuild/netbsd-x64": "0.27.2",
|
||||
"@esbuild/openbsd-arm64": "0.27.2",
|
||||
"@esbuild/openbsd-x64": "0.27.2",
|
||||
"@esbuild/openharmony-arm64": "0.27.2",
|
||||
"@esbuild/sunos-x64": "0.27.2",
|
||||
"@esbuild/win32-arm64": "0.27.2",
|
||||
"@esbuild/win32-ia32": "0.27.2",
|
||||
"@esbuild/win32-x64": "0.27.2"
|
||||
}
|
||||
},
|
||||
"node_modules/fsevents": {
|
||||
"version": "2.3.3",
|
||||
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
|
||||
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/get-tsconfig": {
|
||||
"version": "4.13.0",
|
||||
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz",
|
||||
"integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"resolve-pkg-maps": "^1.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/resolve-pkg-maps": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
|
||||
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/tsx": {
|
||||
"version": "4.21.0",
|
||||
"resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz",
|
||||
"integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "~0.27.0",
|
||||
"get-tsconfig": "^4.7.5"
|
||||
},
|
||||
"bin": {
|
||||
"tsx": "dist/cli.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
27
prompts/package.json
Normal file
27
prompts/package.json
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"name": "prompts",
|
||||
"version": "0.0.1",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"perfect": "bun test/generate-perfect.ts",
|
||||
"pony": "bun test/generate-pony.ts"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "abearxiong <xiongxiao@xiongxiao.me> (https://www.xiongxiao.me)",
|
||||
"license": "MIT",
|
||||
"packageManager": "pnpm@10.26.0",
|
||||
"type": "module",
|
||||
"devDependencies": {
|
||||
"@kevisual/ai": "^0.0.19",
|
||||
"@kevisual/types": "^0.0.10",
|
||||
"@kevisual/use-config": "^1.0.21",
|
||||
"@types/bun": "^1.3.5",
|
||||
"@types/node": "^25.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"es-toolkit": "^1.43.0",
|
||||
"nanoid": "^5.1.6",
|
||||
"unstorage": "^1.17.3"
|
||||
}
|
||||
}
|
||||
14
prompts/src/index.ts
Normal file
14
prompts/src/index.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { PromptGenerator, type PromptGeneratorOptions } from "./prompt-geneator.ts";
|
||||
import { writeFile } from "node:fs/promises";
|
||||
import { Prompt } from "./prompt-perfect.ts";
|
||||
import { customAlphabet } from "nanoid";
|
||||
|
||||
const letter = 'abcdefghijklmnopqrstuvwxyz'
|
||||
const randomString = customAlphabet(letter, 16);
|
||||
async function saveToFile(data: Map<string, string>, outputPath: string): Promise<void> {
|
||||
const arrayData = Array.from(data.entries()).map(([key, value]) => ({ key, value, id: randomString() }));
|
||||
await writeFile(outputPath, JSON.stringify(arrayData, null, 2), "utf-8");
|
||||
console.log(`Generated ${arrayData.length} prompts and saved to ${outputPath}`);
|
||||
}
|
||||
|
||||
export { PromptGenerator, PromptGeneratorOptions, saveToFile, Prompt };
|
||||
91
prompts/src/prompt-geneator.ts
Normal file
91
prompts/src/prompt-geneator.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { randomInt as random } from "es-toolkit";
|
||||
import { max } from "es-toolkit/compat";
|
||||
|
||||
export interface PromptGeneratorOptions {
|
||||
count?: number;
|
||||
outputPath?: string;
|
||||
sourceKeys?: string[];
|
||||
additionalValues?: string[];
|
||||
source?: { [key: string]: string[] };
|
||||
endString?: string;
|
||||
}
|
||||
|
||||
export class PromptGenerator {
|
||||
sourceKeys: string[];
|
||||
additionalValues: string[];
|
||||
count: number;
|
||||
source: { [key: string]: string[] } = {};
|
||||
endString: string = "";
|
||||
map: Map<string, string> = new Map();
|
||||
constructor(options: PromptGeneratorOptions = {}) {
|
||||
this.additionalValues = options.additionalValues || [];
|
||||
this.count = options.count ?? 1000;
|
||||
this.source = options.source || {};
|
||||
if (options?.sourceKeys) {
|
||||
this.sourceKeys = options.sourceKeys || [];
|
||||
} else {
|
||||
this.sourceKeys = Object.keys(this.source);
|
||||
}
|
||||
this.endString = options.endString || "";
|
||||
}
|
||||
|
||||
generateMap(opts?: { max?: number }): Map<string, string> {
|
||||
const map = new Map<string, string>();
|
||||
const source = this.source
|
||||
let _max = max([opts?.max || 1200, this.count + 1000])!;
|
||||
|
||||
let k = 0;
|
||||
while (map.size < this.count) {
|
||||
const selectedValues: string[] = [];
|
||||
this.sourceKeys.forEach((key: string) => {
|
||||
const values = source[key];
|
||||
if (!values) {
|
||||
return;
|
||||
}
|
||||
const randomIndex = random(0, values.length - 1);
|
||||
const randomValue = values[randomIndex];
|
||||
selectedValues.push(randomValue);
|
||||
});
|
||||
|
||||
const randomSlect = random(1, 3);
|
||||
const additionalRandomValue = this.pickRandomValue(randomSlect, this.additionalValues);
|
||||
selectedValues.push(...additionalRandomValue);
|
||||
if (this.endString) {
|
||||
selectedValues.push(this.endString);
|
||||
}
|
||||
const key = selectedValues.join(",");
|
||||
|
||||
k++;
|
||||
if (k > _max) {
|
||||
console.warn(`Reached maximum attempts (${_max}) to generate unique prompts. Generated ${map.size} unique prompts.`);
|
||||
break;
|
||||
}
|
||||
if (!map.has(key)) {
|
||||
map.set(key, selectedValues.join(" "));
|
||||
}
|
||||
}
|
||||
this.map = map;
|
||||
return map;
|
||||
}
|
||||
/**
|
||||
* 获取随机附加值
|
||||
* @param num
|
||||
* @param arr
|
||||
* @returns
|
||||
*/
|
||||
pickRandomValue(num: number, arr: string[]): string[] {
|
||||
const randomAdditionalValues: string[] = [];
|
||||
const usedIndices: Set<number> = new Set();
|
||||
if (num > arr.length) {
|
||||
num = Math.min(num, arr.length - 1);
|
||||
}
|
||||
while (randomAdditionalValues.length < num && usedIndices.size < arr.length) {
|
||||
const randomIndex = random(0, arr.length - 1);
|
||||
if (!usedIndices.has(randomIndex)) {
|
||||
usedIndices.add(randomIndex);
|
||||
randomAdditionalValues.push(arr[randomIndex]);
|
||||
}
|
||||
}
|
||||
return randomAdditionalValues;
|
||||
}
|
||||
}
|
||||
18
prompts/src/prompt-perfect.ts
Normal file
18
prompts/src/prompt-perfect.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
export interface PromptOptions {
|
||||
perfectPrompt?: string;
|
||||
}
|
||||
|
||||
const DefaultPerfectPrompt = "我需要你帮我完善提示词,使其更加详细和具体。\n";
|
||||
|
||||
export class Prompt {
|
||||
perfectPrompt: string = "";
|
||||
constructor(options: PromptOptions = {}) {
|
||||
this.perfectPrompt = options.perfectPrompt || DefaultPerfectPrompt;
|
||||
}
|
||||
perfect(info: string): string {
|
||||
return `${info}\n当前的提示词是,在<perfect/>标签中:\n<perfect>${this.perfectPrompt}</perfect>`;
|
||||
}
|
||||
clearPerfectTags(text: string): string {
|
||||
return text.replace('<perfect>', '').replace('</perfect>', '').trim();
|
||||
}
|
||||
}
|
||||
93
prompts/test/generate-perfect.ts
Normal file
93
prompts/test/generate-perfect.ts
Normal file
@@ -0,0 +1,93 @@
|
||||
import { Kevisual } from "@kevisual/ai";
|
||||
import { useConfig } from '@kevisual/use-config'
|
||||
import path from "node:path";
|
||||
import fs from "node:fs";
|
||||
import { createStorage } from "unstorage";
|
||||
import { Prompt } from "../src/index.ts";
|
||||
import fsDriver from "unstorage/drivers/fs";
|
||||
|
||||
const promptPath = path.join(process.cwd(), "./docs/prompts-01.json");
|
||||
|
||||
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
const storage = createStorage({
|
||||
driver: fsDriver({ base: 'storage' }),
|
||||
});
|
||||
const config = useConfig();
|
||||
const kevisual = new Kevisual({
|
||||
token: config.KEVISUAL_NEW_API_KEY || "",
|
||||
model: "qwen-turbo"
|
||||
});
|
||||
|
||||
if (!fs.existsSync(promptPath)) {
|
||||
console.error("Prompt file not found:", promptPath);
|
||||
process.exit(1);
|
||||
}
|
||||
const prompts = JSON.parse(fs.readFileSync(promptPath, "utf-8")) as { key: string, value: string, id: string }[];
|
||||
|
||||
const currentUsage = (await storage.getItem("usage.json") as any) || { prompt_tokens: 0, total_tokens: 0, completion_tokens: 0 };
|
||||
|
||||
console.log("Current usage:", currentUsage);
|
||||
async function generatePerfectPrompts() {
|
||||
for (const promptData of prompts) {
|
||||
const id = promptData.id + '.json';
|
||||
const has = await storage.get(id);
|
||||
if (has) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
const perfectPrompt = `请你将以下提示词进行完善,使其更加详细和具体,适合用于生成高质量的像素艺术图像。要求如下:
|
||||
1. 只返回完善后的提示词,不要包含任何多余的内容或解释。
|
||||
2. 确保提示词专注于像素艺术风格,包括但不限于像素化角色、场景和物体的描述。
|
||||
3. 使用具体的细节来增强提示词的表现力,例如颜色、构图、光影效果等。
|
||||
4. 避免使用与像素艺术无关的术语或描述。
|
||||
5. 保持提示词的简洁性,避免过于冗长,但要确保信息量充足。
|
||||
6. 如果需要颜色,需要整个图像的颜色更少的描述,而不是复杂的颜色细节, 背景默认纯蓝色。
|
||||
7. 使用中文进行描述。
|
||||
`;
|
||||
const prompt = new Prompt({ perfectPrompt });
|
||||
const result = await kevisual.chat([
|
||||
{
|
||||
role: "user",
|
||||
content: prompt.perfect(promptData.value),
|
||||
}
|
||||
])
|
||||
const text = prompt.clearPerfectTags(kevisual.responseText);
|
||||
await storage.setItem(id, {
|
||||
value: promptData.value,
|
||||
id: promptData.id,
|
||||
perfect: text,
|
||||
});
|
||||
|
||||
await sleep(2000); // Avoid rate limits
|
||||
const _usage = kevisual.getChatUsage()
|
||||
console.log("Generated perfect prompt for:", promptData.id, _usage?.total_tokens);
|
||||
currentUsage.total_tokens += _usage?.total_tokens || 0;
|
||||
currentUsage.prompt_tokens += _usage?.prompt_tokens || 0;
|
||||
currentUsage.completion_tokens += _usage?.completion_tokens || 0;
|
||||
// Update usage
|
||||
await storage.setItem("usage.json", {
|
||||
prompt_tokens: currentUsage.prompt_tokens,
|
||||
total_tokens: currentUsage.total_tokens,
|
||||
completion_tokens: currentUsage.completion_tokens,
|
||||
});
|
||||
console.log('优化的提示词', text);
|
||||
} catch (error) {
|
||||
console.error("Error generating perfect prompt for:", promptData, error);
|
||||
// 如果是超时错误,等待一段时间后继续
|
||||
if ((error as any)?.message?.includes("timeout")) {
|
||||
console.log("Timeout occurred, waiting for 30 seconds before retrying...");
|
||||
await sleep(10000);
|
||||
continue;
|
||||
} else {
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
generatePerfectPrompts();
|
||||
|
||||
// bun test/generate-perfect.ts
|
||||
// pm2 start --name "generate-perfect" --interpreter=bun -- test/generate-perfect.ts
|
||||
28
prompts/test/random-pony.ts
Normal file
28
prompts/test/random-pony.ts
Normal file
@@ -0,0 +1,28 @@
|
||||
import { PromptGenerator, saveToFile } from "../src/index.ts";
|
||||
import { source } from "./source.ts";
|
||||
import path from 'node:path';
|
||||
|
||||
const coreValue = [
|
||||
"像素艺术",
|
||||
"矢量插画",
|
||||
"线条艺术",
|
||||
"可爱",
|
||||
"日式可爱",
|
||||
"Q版",
|
||||
"萌",
|
||||
"简约",
|
||||
"极简主义",
|
||||
"干净线条",
|
||||
"扁平色彩",
|
||||
]
|
||||
const promptGenerator = new PromptGenerator({
|
||||
count: 1000,
|
||||
source: source,
|
||||
additionalValues: coreValue,
|
||||
endString: '纯色背景'
|
||||
});
|
||||
|
||||
const promptMap = promptGenerator.generateMap();
|
||||
|
||||
const outputPath = path.join(process.cwd(), "./docs/prompts.json");
|
||||
await saveToFile(promptMap, outputPath);
|
||||
155
prompts/test/source.ts
Normal file
155
prompts/test/source.ts
Normal file
@@ -0,0 +1,155 @@
|
||||
export const source = {
|
||||
"subject": [
|
||||
"圆滚滚的马",
|
||||
"穿衣服的马",
|
||||
"胖乎乎的小马",
|
||||
"戴帽子的马",
|
||||
"毛茸茸的斑马",
|
||||
"拿气球的独角兽",
|
||||
"瘦长的马",
|
||||
"Q版马",
|
||||
"戴墨镜的马",
|
||||
"拿着星星的马",
|
||||
"古代战马披铠甲",
|
||||
"水墨风格的骏马",
|
||||
"发光的梦幻马",
|
||||
"机械赛博格马",
|
||||
"戴着皇冠的皇家马",
|
||||
"背着书包上学的小马",
|
||||
"会魔法的飞马",
|
||||
"穿着宇航服的太空马",
|
||||
"抱着吉他的摇滚马",
|
||||
"正在画画的艺术家马",
|
||||
"穿唐装的新年马",
|
||||
"骑着扫帚的巫师马",
|
||||
"戴着围巾的冬日小马",
|
||||
"撑伞的雨中马",
|
||||
"戴着耳机听音乐的潮马",
|
||||
"背着礼物袋的圣诞马",
|
||||
"在镜子前自拍的爱美马",
|
||||
"变成龙形的神驹",
|
||||
"半植物半马的自然精灵",
|
||||
"透明水晶质感的玻璃马",
|
||||
"由星尘组成的宇宙马",
|
||||
"纸艺折纸风格小马",
|
||||
"黏土手办风格马",
|
||||
"影子轮廓马",
|
||||
"像素复古游戏马",
|
||||
"剪纸艺术风格马",
|
||||
"霓虹灯线条马",
|
||||
"蒸汽朋克齿轮马",
|
||||
"浮世绘风格日本马",
|
||||
"黄金雕像马"
|
||||
],
|
||||
"action": [
|
||||
"坐着发呆",
|
||||
"奔跑",
|
||||
"跳跃",
|
||||
"飞翔在空中",
|
||||
"游泳",
|
||||
"跳舞",
|
||||
"大笑",
|
||||
"惊讶地看着前方",
|
||||
"抱着胡萝卜",
|
||||
"放风筝",
|
||||
"睡觉",
|
||||
"吃草",
|
||||
"哭泣",
|
||||
"挥手打招呼",
|
||||
"翻滚",
|
||||
"冥想漂浮",
|
||||
"变魔术",
|
||||
"写毛笔字",
|
||||
"演奏小提琴",
|
||||
"骑滑板",
|
||||
"拍照留念",
|
||||
"讲笑话",
|
||||
"种花",
|
||||
"搭建积木城堡",
|
||||
"阅读童话书",
|
||||
"打太极拳",
|
||||
"喷火",
|
||||
"召唤闪电",
|
||||
"隐身消失",
|
||||
"时间暂停",
|
||||
"穿越虫洞",
|
||||
"绘制星空",
|
||||
"拥抱朋友",
|
||||
"滑冰",
|
||||
"攀岩",
|
||||
"倒立行走",
|
||||
"吐彩虹",
|
||||
"用尾巴画画",
|
||||
"变身成光球",
|
||||
"与蝴蝶共舞",
|
||||
"点亮灯笼",
|
||||
"解开谜题"
|
||||
],
|
||||
"scene": [
|
||||
"纯白色背景",
|
||||
"纯黑色背景",
|
||||
"纯红色背景",
|
||||
"纯蓝色背景",
|
||||
"纯绿色背景",
|
||||
"纯黄色背景",
|
||||
"纯橙色背景",
|
||||
"纯紫色背景",
|
||||
"纯粉色背景",
|
||||
"纯灰色背景",
|
||||
"纯米色背景",
|
||||
"纯青色背景",
|
||||
"纯金色背景",
|
||||
"纯银色背景",
|
||||
"纯棕色背景",
|
||||
"纯天蓝色背景",
|
||||
"纯珊瑚色背景",
|
||||
"纯薄荷绿背景",
|
||||
"纯薰衣草紫背景",
|
||||
"纯象牙白背景"
|
||||
],
|
||||
"style": [
|
||||
"卡通渲染风格",
|
||||
"水彩手绘质感",
|
||||
"油画厚涂技法",
|
||||
"中国风水墨画",
|
||||
"赛博朋克霓虹光影",
|
||||
"皮克斯3D动画风格",
|
||||
"低多边形(Low Poly)",
|
||||
"极简扁平设计",
|
||||
"超现实主义梦境感",
|
||||
"蒸汽朋克机械细节",
|
||||
"浮世绘木刻纹理",
|
||||
"儿童绘本插图",
|
||||
"复古8-bit像素风",
|
||||
"哥特式暗黑美学",
|
||||
"波普艺术鲜艳撞色",
|
||||
"剪纸拼贴艺术",
|
||||
"玻璃彩绘效果",
|
||||
"金属蚀刻工艺",
|
||||
"沙画流动质感",
|
||||
"全息投影光泽",
|
||||
"黏土定格动画",
|
||||
"铅笔素描线稿",
|
||||
"荧光夜光风格",
|
||||
"大理石雕塑质感",
|
||||
"丝绸刺绣图案",
|
||||
"动态模糊运动感",
|
||||
"故障艺术(Glitch Art)",
|
||||
"糖霜甜点装饰风",
|
||||
"雪花结晶微观视角",
|
||||
"星空粒子特效",
|
||||
"幻彩渐变晕染",
|
||||
"蜡笔涂鸦童趣风",
|
||||
"青铜器铭文融合",
|
||||
"敦煌壁画色彩",
|
||||
"激光雕刻线条",
|
||||
"毛毡布艺手工感",
|
||||
"琉璃透光材质",
|
||||
"水墨晕染+数字合成",
|
||||
"霓虹灯牌背景",
|
||||
"复古胶片颗粒感",
|
||||
"动态流体模拟",
|
||||
"万圣节南瓜灯氛围"
|
||||
],
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user