kingkont 0.20.3 → 0.20.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Тест: использует ли gpt-image-2-image-to-image референсное изображение?
|
|
3
|
+
//
|
|
4
|
+
// Делаем 2 генерации с одинаковым промптом:
|
|
5
|
+
// 1) text-only ("control") — gpt-image-2-text-to-image
|
|
6
|
+
// 2) image-to-image — gpt-image-2-image-to-image + reference URL
|
|
7
|
+
//
|
|
8
|
+
// Если референс реально работает — результат #2 будет иметь композицию/
|
|
9
|
+
// объект из reference. Если игнорируется — результаты будут похожи между собой.
|
|
10
|
+
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
const fs = require('node:fs');
|
|
14
|
+
const path = require('node:path');
|
|
15
|
+
const { loadSettings, applySettingsToEnv } = require('../lib/settings');
|
|
16
|
+
const { startGeneration, waitForGeneration, uploadFile, downloadUrl } = require('../lib/providers');
|
|
17
|
+
|
|
18
|
+
// Референс: фото конкретного полосатого котика (Wikipedia, public).
|
|
19
|
+
// Если модель его «видит» — на выходе должен быть похожий кот (та же поза,
|
|
20
|
+
// тот же фон), просто в новом цвете. Если игнорирует — выйдет
|
|
21
|
+
// generic-кот на generic-фоне.
|
|
22
|
+
const REF_URL = 'https://upload.wikimedia.org/wikipedia/commons/3/3a/Cat03.jpg';
|
|
23
|
+
const PROMPT = 'recolor this exact cat to be completely white, keep the same pose, background, framing, and scene, photorealistic';
|
|
24
|
+
|
|
25
|
+
(async () => {
|
|
26
|
+
const s = loadSettings();
|
|
27
|
+
applySettingsToEnv(s);
|
|
28
|
+
console.log('[test] useChatium=%s hasToken=%s base=%s', s.useChatium, !!s.chatium?.token, s.chatium?.base);
|
|
29
|
+
|
|
30
|
+
// 1) Скачать референс с Wikipedia, загрузить в Chatium-storage.
|
|
31
|
+
console.log('[test] download ref:', REF_URL);
|
|
32
|
+
const refBuf = await downloadUrl(REF_URL);
|
|
33
|
+
console.log('[test] ref size:', refBuf.length, 'bytes');
|
|
34
|
+
const up = await uploadFile({ buffer: refBuf, filename: 'cat-ref.jpg', mime: 'image/jpeg', settings: s });
|
|
35
|
+
console.log('[test] uploaded ref →', up.url);
|
|
36
|
+
|
|
37
|
+
// 2) Параллельно: text-only (control) + image-to-image (with ref).
|
|
38
|
+
console.log('[test] kick off 2 generations...');
|
|
39
|
+
const opts = { kind: 'image', modelKey: 'gpt-image-2', prompt: PROMPT, aspectRatio: '1:1', settings: s };
|
|
40
|
+
const [ctrlStart, refStart] = await Promise.all([
|
|
41
|
+
startGeneration({ ...opts }),
|
|
42
|
+
startGeneration({ ...opts, imageInputs: [up.url] }),
|
|
43
|
+
]);
|
|
44
|
+
console.log('[test] control task:', ctrlStart.taskId);
|
|
45
|
+
console.log('[test] withref task:', refStart.taskId);
|
|
46
|
+
|
|
47
|
+
const [ctrlRes, refRes] = await Promise.all([
|
|
48
|
+
waitForGeneration(ctrlStart.taskId, s, { timeoutMs: 240000, onProgress: (r) => console.log(' control:', r.state || r.status) }),
|
|
49
|
+
waitForGeneration(refStart.taskId, s, { timeoutMs: 240000, onProgress: (r) => console.log(' withref:', r.state || r.status) }),
|
|
50
|
+
]);
|
|
51
|
+
|
|
52
|
+
console.log('\n[test] === RESULTS ===');
|
|
53
|
+
console.log('CONTROL:', JSON.stringify(ctrlRes, null, 2));
|
|
54
|
+
console.log('WITH REF:', JSON.stringify(refRes, null, 2));
|
|
55
|
+
|
|
56
|
+
// Скачать оба результата, чтобы можно было визуально сравнить.
|
|
57
|
+
const outDir = '/tmp/kk-gptimage-ref-test';
|
|
58
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
59
|
+
fs.writeFileSync(path.join(outDir, 'reference.jpg'), refBuf);
|
|
60
|
+
for (const [name, res] of [['control', ctrlRes], ['withref', refRes]]) {
|
|
61
|
+
const url = res?.url || res?.result?.url || res?.imageUrl || res?.images?.[0];
|
|
62
|
+
if (!url) { console.warn('[test] no url for', name); continue; }
|
|
63
|
+
const buf = await downloadUrl(url);
|
|
64
|
+
const out = path.join(outDir, `${name}.jpg`);
|
|
65
|
+
fs.writeFileSync(out, buf);
|
|
66
|
+
console.log(`[test] saved ${name}: ${out} (${buf.length} bytes, src=${url})`);
|
|
67
|
+
}
|
|
68
|
+
console.log('\n[test] open with: open ' + outDir);
|
|
69
|
+
})().catch(e => { console.error('[test] FAILED:', e); process.exit(1); });
|