update
This commit is contained in:
22
prompts/test/common.ts
Normal file
22
prompts/test/common.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { app } from '../src/index.ts'
|
||||
import { config } from '../src/index.ts'
|
||||
export {
|
||||
app
|
||||
}
|
||||
|
||||
// const res = await app.run({
|
||||
// path: 'image-creator',
|
||||
// key: 'create-task',
|
||||
// })
|
||||
|
||||
// console.log('Route run result:', res)
|
||||
|
||||
|
||||
// const res = await app.run({
|
||||
// path: 'image-creator',
|
||||
// key: 'batch-update-tags',
|
||||
// })
|
||||
|
||||
// console.log('Route run result:', res)
|
||||
|
||||
console.log('typeof config.REDIS_PORT:', typeof config.REDIS_PORT);
|
||||
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
|
||||
57
prompts/test/generate-sentence.ts
Normal file
57
prompts/test/generate-sentence.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { SentenceGenerator } from '../src/module/sentence-generator.ts';
|
||||
import { writeFileSync } from 'node:fs';
|
||||
import { dirname, join } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const outputPath = join(__dirname, '../data/sentence-01.json');
|
||||
|
||||
console.log('🚀 开始生成1000条哲理句...\n');
|
||||
|
||||
const generator = new SentenceGenerator({
|
||||
count: 1000,
|
||||
outputFormat: 'json',
|
||||
withTags: true,
|
||||
templateTypes: ['对比', '因果', '隐喻', '判断']
|
||||
});
|
||||
|
||||
const results = generator.generateAndOutput() as any[];
|
||||
|
||||
// 添加元信息
|
||||
const outputData = {
|
||||
meta: {
|
||||
total: results.length,
|
||||
generatedAt: new Date().toISOString(),
|
||||
generator: 'sentence-generator.ts',
|
||||
version: '1.0'
|
||||
},
|
||||
sentences: results
|
||||
};
|
||||
|
||||
// 写入文件
|
||||
writeFileSync(outputPath, JSON.stringify(outputData, null, 2), 'utf-8');
|
||||
|
||||
console.log(`✅ 成功生成 ${results.length} 条句子`);
|
||||
console.log(`📁 输出到: ${outputPath}\n`);
|
||||
|
||||
// 打印统计信息
|
||||
console.log('📊 主题分布统计:');
|
||||
const stats = generator.getStats();
|
||||
const sortedStats = Object.entries(stats)
|
||||
.sort(([, a], [, b]) => b - a)
|
||||
.slice(0, 10);
|
||||
|
||||
sortedStats.forEach(([theme, count]) => {
|
||||
const bar = '█'.repeat(Math.floor(count / 10));
|
||||
console.log(` ${theme.padEnd(6)}: ${count.toString().padStart(4)} ${bar}`);
|
||||
});
|
||||
|
||||
console.log(`\n📋 模板类型分布:`);
|
||||
const templateCount: Record<string, number> = {};
|
||||
results.forEach((s: any) => {
|
||||
const type = s.template.split(/[\d]/)[0] || s.template;
|
||||
templateCount[type] = (templateCount[type] || 0) + 1;
|
||||
});
|
||||
Object.entries(templateCount).forEach(([type, count]) => {
|
||||
console.log(` ${type}: ${count} 条`);
|
||||
});
|
||||
37
prompts/test/import-sentence.ts
Normal file
37
prompts/test/import-sentence.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { app } from './common.ts';
|
||||
|
||||
import fs from 'node:fs';
|
||||
import path from 'node:path';
|
||||
|
||||
const sentence = path.join(process.cwd(), 'data', 'sentence-01-optimized.json');
|
||||
|
||||
const data = JSON.parse(fs.readFileSync(sentence, 'utf-8'));
|
||||
|
||||
async function run() {
|
||||
const sentences = data?.sentences || [];
|
||||
console.log(`Importing ${sentences.length} sentences...`);
|
||||
const res = await app.run({
|
||||
path: 'image-creator',
|
||||
// key: 'create-sentence-list',
|
||||
key: 'fix-sentences',
|
||||
payload: {
|
||||
data: sentences
|
||||
}
|
||||
});
|
||||
|
||||
console.log('Import sentence result:', res);
|
||||
}
|
||||
|
||||
// await run();
|
||||
|
||||
async function run2() {
|
||||
const sentences = data?.sentences || [];
|
||||
const res = await app.run({
|
||||
path: 'image-creator',
|
||||
key: 'perfect-sentence',
|
||||
});
|
||||
|
||||
console.log('Import sentence result:', res);
|
||||
}
|
||||
|
||||
await run2();
|
||||
18
prompts/test/jimeng.ts
Normal file
18
prompts/test/jimeng.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { JimengService } from '../src/services/jimeng.service.js';
|
||||
import { useConfig } from '@kevisual/use-config';
|
||||
const config = useConfig();
|
||||
|
||||
export const jimengService = new JimengService({
|
||||
apiKey: config.JIMENG_API_KEY,
|
||||
baseUrl: config.JIMENG_API_URL,
|
||||
timeout: parseInt(config.JIMENG_TIMEOUT || '30000'),
|
||||
});
|
||||
|
||||
const createImage = async () => {
|
||||
const response = await jimengService.generateImage({
|
||||
prompt: 'A beautiful landscape with mountains and a river, in the style of a watercolor painting',
|
||||
});
|
||||
console.log('Generated Image URL:', response);
|
||||
};
|
||||
|
||||
createImage();
|
||||
66
prompts/test/pb.ts
Normal file
66
prompts/test/pb.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { createStorage } from 'unstorage';
|
||||
import { config } from '../src/app.ts'
|
||||
|
||||
import { PBService } from '../src/services/pb.service.ts'
|
||||
import path from "node:path";
|
||||
import fsDriver from "unstorage/drivers/fs";
|
||||
|
||||
const sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));
|
||||
|
||||
const storage = createStorage({
|
||||
driver: fsDriver({ base: 'storage' }),
|
||||
});
|
||||
const pbService = new PBService({
|
||||
url: config.POCKETBASE_URL,
|
||||
token: config.POCKETBASE_TOKEN,
|
||||
});
|
||||
|
||||
async function main() {
|
||||
// const listStorage = await storage.getKeys();
|
||||
// const keys = listStorage.filter(key => key !== 'usage.json');
|
||||
// for (const key of keys) {
|
||||
// const value = await storage.getItem<any>(key);
|
||||
// console.log(`Generating PB record for key: ${value}`, value);
|
||||
// const { id, perfect: description, value: summary } = value;
|
||||
// pbService.collection.create({
|
||||
// title: '',
|
||||
// summary,
|
||||
// description,
|
||||
// tags: [],
|
||||
// data: {},
|
||||
// status: '计划中',
|
||||
// });
|
||||
// console.log(`Created record for prompt ID: ${id}`);
|
||||
// await sleep(100); // To avoid hitting rate limits
|
||||
// }
|
||||
|
||||
// const list = await pbService.collection.getFullList({
|
||||
// sort: '-created',
|
||||
// fields: 'id,title,summary,description,tags,status',
|
||||
// })
|
||||
// console.log('PocketBase Records:', list.length);
|
||||
|
||||
// const b = await pbService.client.collections.create({
|
||||
// name: 'exampleBase',
|
||||
// type: 'base',
|
||||
// fields: [
|
||||
// {
|
||||
// name: 'title',
|
||||
// type: 'text',
|
||||
// required: true,
|
||||
// min: 10,
|
||||
// },
|
||||
// {
|
||||
// name: 'status',
|
||||
// type: 'bool',
|
||||
// },
|
||||
// ],
|
||||
// });
|
||||
// console.log('Created collection:', b);
|
||||
|
||||
const c = await pbService.createCollection({
|
||||
name: 'exampleBase',
|
||||
});
|
||||
console.log('Created collection via PBService:', c);
|
||||
}
|
||||
main();
|
||||
48
prompts/test/perfect-sentence-image.ts
Normal file
48
prompts/test/perfect-sentence-image.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { ai } from '../src/index.ts'
|
||||
import { SentenceImage } from '../src/module/sentence-image.ts';
|
||||
|
||||
|
||||
export async function generatePerfectImage() {
|
||||
const sentenceImage = new SentenceImage();
|
||||
// const content = JSON.stringify({
|
||||
// "text": "选择像锁,终将奔跑。",
|
||||
// "theme": "选择",
|
||||
// "template": "{主}像{意象},终将{动}。",
|
||||
// "templateType": "隐喻",
|
||||
// "tags": [
|
||||
// "选择",
|
||||
// "隐喻",
|
||||
// "后悔",
|
||||
// "锁",
|
||||
// "奔跑"
|
||||
// ],
|
||||
// "index": 7,
|
||||
// "optimized": "选择如秤,终需掂量。"
|
||||
// });
|
||||
const content = JSON.stringify({
|
||||
"text": "人生如逆旅,我亦是行人。",
|
||||
"theme": "人生",
|
||||
"template": "人生如{意象},我亦是{身份}。",
|
||||
"templateType": "隐喻",
|
||||
"tags": [
|
||||
"人生",
|
||||
"隐喻",
|
||||
"旅途",
|
||||
"行人"
|
||||
],
|
||||
"index": 1,
|
||||
"optimized": "人生似长河,我自是过客。"
|
||||
});
|
||||
const prompt = sentenceImage.perfect(content);
|
||||
const response = await ai.chat([], {
|
||||
messages: [{ role: "user", content: prompt }],
|
||||
// model: 'qwen-turbo',
|
||||
// model: 'doubao-seed-1-6-251015',
|
||||
model: 'qwen-plus',
|
||||
enable_thinking: true
|
||||
})
|
||||
console.log('生成的海报设计方案:\n', response.choices[0].message.content);
|
||||
return response.choices[0].message.content;
|
||||
}
|
||||
|
||||
generatePerfectImage()
|
||||
90
prompts/test/perfect-sentence.ts
Normal file
90
prompts/test/perfect-sentence.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import { SentencePerfect } from '../src/module/sentence-perfect.ts';
|
||||
import { readFileSync, writeFileSync } from 'node:fs';
|
||||
import { join, dirname } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
import { Kevisual } from '@kevisual/ai';
|
||||
import { config } from '../src/module/config.ts';
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
|
||||
// 配置
|
||||
const INPUT_PATH = join(__dirname, '../data/sentence-01.json');
|
||||
const OUTPUT_PATH = join(__dirname, '../data/sentence-01-optimized.json');
|
||||
|
||||
// 读取原始句子
|
||||
const data = JSON.parse(readFileSync(INPUT_PATH, 'utf-8'));
|
||||
const sentences = data.sentences || data;
|
||||
|
||||
console.log(`📖 加载了 ${sentences.length} 条句子\n`);
|
||||
|
||||
// 创建 AI 实例
|
||||
const ai = new Kevisual({
|
||||
apiKey: config.KEVISUAL_NEW_API_KEY || '',
|
||||
model: 'qwen-turbo'
|
||||
});
|
||||
|
||||
// 创建优化器
|
||||
const perfect = new SentencePerfect({
|
||||
ai,
|
||||
concurrency: 3, // 并发数
|
||||
retryTimes: 2, // 重试次数
|
||||
|
||||
// 进度回调
|
||||
onProgress: (progress) => {
|
||||
const { current, total, percentage, successCount, errorCount } = progress;
|
||||
process.stdout.write(`\r🔄 进度: ${current}/${total} (${percentage}%) | 成功: ${successCount} | 失败: ${errorCount}`);
|
||||
},
|
||||
|
||||
// 成功回调
|
||||
onSuccess: (result) => {
|
||||
if (result.index % 10 === 0) {
|
||||
console.log(`\n✅ ${result.index}: "${result.text}"`);
|
||||
console.log(` → "${result.optimized}"`);
|
||||
}
|
||||
},
|
||||
|
||||
// 失败回调
|
||||
onError: (error) => {
|
||||
console.log(`\n❌ ${error.index}: ${error.error}`);
|
||||
}
|
||||
});
|
||||
|
||||
// 准备数据 - 只处理前20条作为测试
|
||||
// const items = sentences.slice(0, 2).map((s: any, i: number) => ({
|
||||
// ...s,
|
||||
// index: s.index || i + 1
|
||||
// }));
|
||||
const items = sentences;
|
||||
console.log('🚀 开始优化句子...\n');
|
||||
|
||||
// 执行优化
|
||||
const startTime = Date.now();
|
||||
const results = await perfect.perfectBatch(items);
|
||||
const elapsed = Date.now() - startTime;
|
||||
|
||||
console.log(`\n\n✅ 完成!耗时: ${(elapsed / 1000).toFixed(2)}秒`);
|
||||
|
||||
// 统计
|
||||
const successResults = results.filter(r => r.optimized !== r.text);
|
||||
console.log(` 成功: ${successResults.length}/${results.length}`);
|
||||
|
||||
// 保存结果
|
||||
const output = {
|
||||
meta: {
|
||||
total: results.length,
|
||||
success: successResults.length,
|
||||
optimizedAt: new Date().toISOString()
|
||||
},
|
||||
sentences: results
|
||||
};
|
||||
|
||||
writeFileSync(OUTPUT_PATH, JSON.stringify(output, null, 2), 'utf-8');
|
||||
console.log(`📁 结果已保存到: ${OUTPUT_PATH}`);
|
||||
|
||||
// 显示示例
|
||||
console.log('\n📝 优化示例:');
|
||||
successResults.slice(0, 5).forEach((r, i) => {
|
||||
console.log(`\n${i + 1}. [${r.theme}]`);
|
||||
console.log(` 原: ${r.text}`);
|
||||
console.log(` 优: ${r.optimized}`);
|
||||
});
|
||||
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)",
|
||||
"糖霜甜点装饰风",
|
||||
"雪花结晶微观视角",
|
||||
"星空粒子特效",
|
||||
"幻彩渐变晕染",
|
||||
"蜡笔涂鸦童趣风",
|
||||
"青铜器铭文融合",
|
||||
"敦煌壁画色彩",
|
||||
"激光雕刻线条",
|
||||
"毛毡布艺手工感",
|
||||
"琉璃透光材质",
|
||||
"水墨晕染+数字合成",
|
||||
"霓虹灯牌背景",
|
||||
"复古胶片颗粒感",
|
||||
"动态流体模拟",
|
||||
"万圣节南瓜灯氛围"
|
||||
],
|
||||
|
||||
}
|
||||
15
prompts/test/upload-image.ts
Normal file
15
prompts/test/upload-image.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { jimengService, ossService } from '../src/index.ts'
|
||||
const url = 'https://p3-dreamina-sign.byteimg.com/tos-cn-i-tb4s082cfz/4947076125c64a999e4c392de03048f8~tplv-tb4s082cfz-aigc_resize:360:360.webp?lk3s=43402efa&x-expires=1770336000&x-signature=Fjeeb3qloxxzxmHJpmqu6v8fwrM%3D&format=.webp'
|
||||
|
||||
|
||||
const uploadImage = async () => {
|
||||
const response = await jimengService.downloadImage(url);
|
||||
const filename = `uploaded_image_${Date.now()}.png`;
|
||||
await ossService.putObject(filename, response);
|
||||
const ossUrl = ossService.getLink(filename);
|
||||
// console.log('Uploaded Image URL:', response)
|
||||
// const uploadJons = await ossService.putObject('a1.json', { b: '123' })
|
||||
// console.log('Upload JSON Result:', uploadJons)
|
||||
return ossUrl;
|
||||
}
|
||||
uploadImage();
|
||||
Reference in New Issue
Block a user