Browse Source
- Remove obsolete scripts/cleanup-workflow.js - Revert locked guards from group drag/resize/rename (lock is execution-only, not interaction) - Add lock icon in group title pill for visual feedback Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>handoff-20260429-1057
2 changed files with 8 additions and 77 deletions
@ -1,72 +0,0 @@ |
|||||
/** |
|
||||
* One-time script to clean up outputGallery nodes with embedded images |
|
||||
* This fixes workflows saved before the outputGallery externalization bug was fixed |
|
||||
*/ |
|
||||
|
|
||||
const fs = require('fs'); |
|
||||
const path = require('path'); |
|
||||
|
|
||||
const workflowPath = process.argv[2]; |
|
||||
|
|
||||
if (!workflowPath) { |
|
||||
console.error('Usage: node cleanup-workflow.js <path-to-workflow.json>'); |
|
||||
process.exit(1); |
|
||||
} |
|
||||
|
|
||||
console.log(`Reading workflow: ${workflowPath}`); |
|
||||
const workflow = JSON.parse(fs.readFileSync(workflowPath, 'utf8')); |
|
||||
|
|
||||
let cleaned = false; |
|
||||
let totalSizeBefore = 0; |
|
||||
let totalSizeAfter = 0; |
|
||||
|
|
||||
workflow.nodes.forEach((node, index) => { |
|
||||
if (node.type === 'outputGallery' && node.data.images && node.data.images.length > 0) { |
|
||||
const sizeBefore = JSON.stringify(node.data.images).length; |
|
||||
const imageCount = node.data.images.filter(img => img && img.startsWith('data:')).length; |
|
||||
|
|
||||
if (imageCount > 0) { |
|
||||
const removedImages = node.data.images.filter(img => img && img.startsWith('data:')); |
|
||||
const removedSize = removedImages.reduce((sum, img) => sum + img.length, 0); |
|
||||
|
|
||||
console.log(`\nNode ${index} (${node.id}):`); |
|
||||
console.log(` Found ${imageCount} embedded images`); |
|
||||
console.log(` Size: ${(removedSize / 1024 / 1024).toFixed(2)} MB`); |
|
||||
|
|
||||
node.data.images = node.data.images.filter(img => !(img && img.startsWith('data:'))); |
|
||||
totalSizeBefore += removedSize; |
|
||||
cleaned = true; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
if (node.type === 'output' && node.data.image && node.data.image.startsWith('data:')) { |
|
||||
const sizeBefore = node.data.image.length; |
|
||||
console.log(`\nNode ${index} (${node.id}):`); |
|
||||
console.log(` Found embedded output image`); |
|
||||
console.log(` Size: ${(sizeBefore / 1024 / 1024).toFixed(2)} MB`); |
|
||||
|
|
||||
node.data.image = null; |
|
||||
totalSizeBefore += sizeBefore; |
|
||||
cleaned = true; |
|
||||
} |
|
||||
}); |
|
||||
|
|
||||
if (cleaned) { |
|
||||
const backupPath = workflowPath.replace('.json', '.backup.json'); |
|
||||
console.log(`\nCreating backup: ${backupPath}`); |
|
||||
fs.copyFileSync(workflowPath, backupPath); |
|
||||
|
|
||||
console.log(`Writing cleaned workflow...`); |
|
||||
fs.writeFileSync(workflowPath, JSON.stringify(workflow, null, 2)); |
|
||||
|
|
||||
const finalSize = fs.statSync(workflowPath).size; |
|
||||
const originalSize = fs.statSync(backupPath).size; |
|
||||
|
|
||||
console.log(`\n✅ Done!`); |
|
||||
console.log(` Original size: ${(originalSize / 1024 / 1024).toFixed(2)} MB`); |
|
||||
console.log(` New size: ${(finalSize / 1024 / 1024).toFixed(2)} MB`); |
|
||||
console.log(` Saved: ${((originalSize - finalSize) / 1024 / 1024).toFixed(2)} MB`); |
|
||||
console.log(`\nBackup saved to: ${backupPath}`); |
|
||||
} else { |
|
||||
console.log('\n✓ No embedded images found - workflow is already clean!'); |
|
||||
} |
|
||||
Loading…
Reference in new issue