Files
aigen/tests/studio2-canvas-seed.test.mjs
T

35 lines
2.7 KiB
JavaScript

import test from 'node:test'
import assert from 'node:assert/strict'
import {folderAssets,newestOutput,selectResult} from '../shared/studio2/viewer.mjs'
import {restoreAsset,resolveSize} from '../shared/studio2/input.mjs'
import {validateRequest} from '../shared/studio2/contracts.mjs'
import {applyResolvedImageSize} from '../shared/studio2/graphs.mjs'
const base={mode:'generate',engine:'flux',folderId:'f',prompt:'Walk'}
test('completed outputs join all folder assets and select only the output canvas',()=>{
const source={id:'source',folderId:'f'},output={id:'result',kind:'still',studio2:{savedAt:2}}
const jobs=[{request:{folderId:'f'},outputs:[output]}],library={stills:[source,{id:'other',folderId:'f'}],clips:[{id:'video',folderId:'f'}]}
const strip=folderAssets(library,jobs,'f');assert.equal(strip.length,4)
const state=selectResult({imageAId:'source',startClipId:'existing'},newestOutput(jobs,new Set(),'f'))
assert.equal(state.selected.id,'result');assert.equal(state.imageAId,'source');assert.equal(state.startClipId,'existing')
assert.equal(newestOutput(jobs,new Set(['result']),'f'),null)
})
test('Use as input binds the selected still, not its original parent input',()=>{
const next=restoreAsset({settings:{}},{id:'output',kind:'still',studio2:{imageAId:'old-parent',settings:{aspect:'1:1',seed:1}}})
assert.equal(next.imageAId,'output');assert.equal(next.startClipId,'');assert.equal(next.settings.aspect,'1:1');assert.equal(next.settings.seedMode,'random')
})
test('resolved aspect survives image graph default and megapixel scaling',()=>{
for(const aspect of ['auto','1:1','16:9','9:16']) {
const size=resolveSize(aspect,{width:1024,height:1024})
const request=validateRequest({...base,settings:{aspect,...size}})
const graph=applyResolvedImageSize({latent:{inputs:{width:1344,height:768}},scale:{class_type:'ImageScaleToTotalPixels',inputs:{image:['load',0],megapixels:1}}},request.settings)
assert.equal(graph.latent.inputs.width,size.width);assert.equal(graph.latent.inputs.height,size.height)
assert.equal(graph.scale.inputs.crop,'disabled');assert.equal(graph.scale.inputs.width,size.width)
if(['auto','1:1'].includes(aspect))assert.equal(size.width,size.height)
}
})
test('random Queues and shots differ; typed seed including 1 remains locked',()=>{
const a=validateRequest({...base,batch:['Turn','Sit']}),b=validateRequest(base)
assert.notEqual(a.settings.seed,b.settings.seed);assert.equal(new Set(a.shotSeeds).size,3);assert.ok(a.shotSeeds.every(s=>s!==1))
for(const seed of [1,987]){const raw={...base,batch:['Turn'],settings:{seedMode:'locked',seed}};assert.deepEqual(validateRequest(raw).shotSeeds,[seed,seed]);assert.equal(validateRequest(raw).settings.seed,seed)}
})