kingkont 0.20.27 → 0.20.29

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/lib/providers.js CHANGED
@@ -552,12 +552,16 @@ async function _startGenerationViaOpenRouterVideo({ key, prompt, imageInputs, fi
552
552
  console.warn(`[providers] OR video поддерживает только first/last frame (2 refs), у тебя ${imageInputs.length} — лишние #${frameImages.length+1}+ игнорированы`);
553
553
  }
554
554
  logCall('POST', 'OpenRouter', 'https://openrouter.ai/api/v1/videos',
555
- `model=${model} dur=${duration || '-'}s asp=${aspectRatio || '-'} res=${resolution || '-'} i2v=${startImage ? 'yes' : 'no'}`);
555
+ `model=${model} dur=${duration || '-'}s asp=${aspectRatio || '-'} res=${resolution || '-'} i2v=${frameImages.length ? `${frameImages.length}-frame` : 'no'}`);
556
556
  // Полный body-dump в лог — для верификации какие поля принял OpenRouter
557
- // (особенно `image_url` для i2v — без этого было непонятно почему ref
558
- // не используется).
557
+ // (особенно `frame_images` для i2v — раньше bare image_url/image_input
558
+ // молча игнорировались, см. v0.20.27).
559
559
  const bodyForLog = { ...body };
560
- if (bodyForLog.image_url) bodyForLog.image_url = String(bodyForLog.image_url).slice(0, 120) + '…';
560
+ if (bodyForLog.frame_images) {
561
+ bodyForLog.frame_images = bodyForLog.frame_images.map(fi => ({
562
+ ...fi, image_url: { url: String(fi.image_url?.url || '').slice(0, 120) + '…' },
563
+ }));
564
+ }
561
565
  console.log(`[providers] OpenRouter video body: ${JSON.stringify(bodyForLog)}`);
562
566
  const r = await fetch('https://openrouter.ai/api/v1/videos', {
563
567
  method: 'POST',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kingkont",
3
- "version": "0.20.27",
3
+ "version": "0.20.29",
4
4
  "description": "KingKont \u00b7 Chatium \u2014 \u043d\u043e\u0434-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u0446\u0435\u043d \u0441 AI-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438/\u0432\u0438\u0434\u0435\u043e/\u0433\u043e\u043b\u043e\u0441/SFX/\u043c\u0443\u0437\u044b\u043a\u0430/\u0442\u0435\u043a\u0441\u0442)",
5
5
  "main": "main.js",
6
6
  "bin": {
package/renderer/state.js CHANGED
@@ -713,6 +713,10 @@ async function plannedProvider(kind) {
713
713
  if (s.useElevenlabs === true) return 'elevenlabs';
714
714
  return 'none';
715
715
  case 'video':
716
+ // OR имеет приоритет для seedance-2/seedance-2-fast (см. lib/providers.js
717
+ // OPENROUTER_VIDEO_MODELS). UI-гесс без знания modelKey: если включён —
718
+ // скорее всего видео уйдёт на OR, иначе fallback на Chatium/KIE.
719
+ if (hasOpenrouter) return 'openrouter';
716
720
  if (hasChatium) return 'kingkont';
717
721
  if (s.useKie === true) return 'kie';
718
722
  return 'none';
package/settings.html CHANGED
@@ -144,7 +144,7 @@
144
144
  <label class="provider-head" for="useOpenrouter">
145
145
  <input type="checkbox" id="useOpenrouter" />
146
146
  <span>OpenRouter</span>
147
- <span class="badge">— текст</span>
147
+ <span class="badge">— текст / nano-banana / seedance</span>
148
148
  </label>
149
149
  <input type="password" id="openrouterKey" placeholder="sk-or-v1-..." autocomplete="off" />
150
150
  <div class="hint">openrouter.ai → Keys</div>