@@ -23,6 +23,11 @@ const sd_config = require('./utility/sdapi/config')
23
23
const session = require ( './utility/session' )
24
24
const ui = require ( './utility/ui' )
25
25
const script_horde = require ( './utility/sd_scripts/horde' )
26
+
27
+ const formats = require ( 'uxp' ) . storage . formats
28
+ const storage = require ( 'uxp' ) . storage
29
+ const fs = storage . localFileSystem
30
+
26
31
async function hasSessionSelectionChanged ( ) {
27
32
try {
28
33
const isSelectionActive = await psapi . checkIfSelectionAreaIsActive ( )
@@ -2302,6 +2307,149 @@ async function placeEmbedded(image_path) {
2302
2307
}
2303
2308
}
2304
2309
2310
+ function _base64ToArrayBuffer ( base64 ) {
2311
+ var binary_string = window . atob ( base64 )
2312
+ var len = binary_string . length
2313
+ var bytes = new Uint8Array ( len )
2314
+ for ( var i = 0 ; i < len ; i ++ ) {
2315
+ bytes [ i ] = binary_string . charCodeAt ( i )
2316
+ }
2317
+ return bytes . buffer
2318
+ }
2319
+ async function base64ToFile ( b64Image ) {
2320
+ // const b64Image =
2321
+ // 'iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAADMElEQVR4nOzVwQnAIBQFQYXff81RUkQCOyDj1YOPnbXWPmeTRef+/3O/OyBjzh3CD95BfqICMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMO0TAAD//2Anhf4QtqobAAAAAElFTkSuQmCC'
2322
+
2323
+ const img = _base64ToArrayBuffer ( b64Image )
2324
+
2325
+ const img_name = 'output_image.png'
2326
+
2327
+ const folder = await storage . localFileSystem . getTemporaryFolder ( )
2328
+ const file = await folder . createFile ( img_name , { overwrite : true } )
2329
+
2330
+ await file . write ( img , { format : storage . formats . binary } )
2331
+
2332
+ const token = await storage . localFileSystem . createSessionToken ( file ) // batchPlay requires a token on _path
2333
+
2334
+ let place_event_result
2335
+ await executeAsModal ( async ( ) => {
2336
+ const result = await batchPlay (
2337
+ [
2338
+ {
2339
+ _obj : 'placeEvent' ,
2340
+ ID : 6 ,
2341
+ null : {
2342
+ _path : token ,
2343
+ _kind : 'local' ,
2344
+ } ,
2345
+ freeTransformCenterState : {
2346
+ _enum : 'quadCenterState' ,
2347
+ _value : 'QCSAverage' ,
2348
+ } ,
2349
+ offset : {
2350
+ _obj : 'offset' ,
2351
+ horizontal : {
2352
+ _unit : 'pixelsUnit' ,
2353
+ _value : 0 ,
2354
+ } ,
2355
+ vertical : {
2356
+ _unit : 'pixelsUnit' ,
2357
+ _value : 0 ,
2358
+ } ,
2359
+ } ,
2360
+ _isCommand : true ,
2361
+ _options : {
2362
+ dialogOptions : 'dontDisplay' ,
2363
+ } ,
2364
+ } ,
2365
+ ] ,
2366
+ {
2367
+ synchronousExecution : true ,
2368
+ modalBehavior : 'execute' ,
2369
+ }
2370
+ )
2371
+ console . log ( 'placeEmbedd batchPlay result: ' , result )
2372
+
2373
+ place_event_result = result [ 0 ]
2374
+ } )
2375
+
2376
+ return place_event_result
2377
+ }
2378
+
2379
+ async function placeImageB64ToLayer ( image_path ) {
2380
+ //silent importer
2381
+
2382
+ try {
2383
+ console . log ( 'placeEmbedded(): image_path: ' , image_path )
2384
+
2385
+ const formats = require ( 'uxp' ) . storage . formats
2386
+ const storage = require ( 'uxp' ) . storage
2387
+ const fs = storage . localFileSystem
2388
+
2389
+ const names = image_path . split ( '/' )
2390
+ const length = names . length
2391
+ const image_name = names [ length - 1 ]
2392
+ const project_name = names [ length - 2 ]
2393
+ let pluginFolder = await fs . getPluginFolder ( )
2394
+
2395
+ const image_dir = `./server/python_server/output/${ project_name } `
2396
+ // image_path = "output/f027258e-71b8-430a-9396-0a19425f2b44/output- 1674323725.126322.png"
2397
+
2398
+ let img_dir = await pluginFolder . getEntry ( image_dir )
2399
+ // const file = await img_dir.createFile('output- 1674298902.0571606.png', {overwrite: true});
2400
+
2401
+ const file = await img_dir . createFile ( image_name , { overwrite : true } )
2402
+
2403
+ const img = await file . read ( { format : formats . binary } )
2404
+ const token = await storage . localFileSystem . createSessionToken ( file )
2405
+ let place_event_result
2406
+ await executeAsModal ( async ( ) => {
2407
+ const result = await batchPlay (
2408
+ [
2409
+ {
2410
+ _obj : 'placeEvent' ,
2411
+ ID : 6 ,
2412
+ null : {
2413
+ _path : token ,
2414
+ _kind : 'local' ,
2415
+ } ,
2416
+ freeTransformCenterState : {
2417
+ _enum : 'quadCenterState' ,
2418
+ _value : 'QCSAverage' ,
2419
+ } ,
2420
+ offset : {
2421
+ _obj : 'offset' ,
2422
+ horizontal : {
2423
+ _unit : 'pixelsUnit' ,
2424
+ _value : 0 ,
2425
+ } ,
2426
+ vertical : {
2427
+ _unit : 'pixelsUnit' ,
2428
+ _value : 0 ,
2429
+ } ,
2430
+ } ,
2431
+ _isCommand : true ,
2432
+ _options : {
2433
+ dialogOptions : 'dontDisplay' ,
2434
+ } ,
2435
+ } ,
2436
+ ] ,
2437
+ {
2438
+ synchronousExecution : true ,
2439
+ modalBehavior : 'execute' ,
2440
+ }
2441
+ )
2442
+ console . log ( 'placeEmbedd batchPlay result: ' , result )
2443
+
2444
+ place_event_result = result [ 0 ]
2445
+ } )
2446
+
2447
+ return place_event_result
2448
+ } catch ( e ) {
2449
+ console . warn ( e )
2450
+ }
2451
+ }
2452
+
2305
2453
// document.getElementById('btnImageFileToLayer').addEventListener('click', placeEmbedded)
2306
2454
2307
2455
// open an image in the plugin folder as new document
0 commit comments