Download Auto-Photoshop-StableDiffusion-Plugin/selection.js from toto10/extensions: direct link, hf CLI and curl.
- Browser
- Download file 5.04 kB
-
https://huggingface.co/toto10/extensions/resolve/refs%2Fpr%2F2/Auto-Photoshop-StableDiffusion-Plugin/selection.js
- Command line
-
hf download hf://toto10/extensions@refs/pr/2/Auto-Photoshop-StableDiffusion-Plugin/selection.js
-
curl -L -o selection.js https://huggingface.co/toto10/extensions/resolve/refs%2Fpr%2F2/Auto-Photoshop-StableDiffusion-Plugin/selection.js
5.04 kB
| const psapi = require('./psapi') | |
| const html_manip = require('./utility/html_manip') | |
| function finalWidthHeight( | |
| selectionWidth, | |
| selectionHeight, | |
| minWidth, | |
| minHeight | |
| ) { | |
| // const minWidth = 512 | |
| // const minHeight = 512 | |
| // const selectionWidth = 256 | |
| // const selectionHeight = 1000 | |
| let finalWidth = 0 | |
| let finalHeight = 0 | |
| if (selectionWidth <= selectionHeight) { | |
| //do operation on the smaller dimension | |
| const scaleRatio = selectionWidth / minWidth | |
| finalWidth = minWidth | |
| finalHeight = selectionHeight / scaleRatio | |
| } else { | |
| const scaleRatio = selectionHeight / minHeight | |
| finalHeight = minHeight | |
| finalWidth = selectionWidth / scaleRatio | |
| } | |
| return [finalWidth, finalHeight] | |
| } | |
| async function selectionToFinalWidthHeight() { | |
| // const { getSelectionInfoExe } = require('./psapi') | |
| try { | |
| const selectionInfo = await psapi.getSelectionInfoExe() | |
| const [finalWidth, finalHeight] = finalWidthHeight( | |
| selectionInfo.width, | |
| selectionInfo.height, | |
| 512, | |
| 512 | |
| ) | |
| return [ | |
| parseInt(finalWidth), | |
| parseInt(finalHeight), | |
| selectionInfo.width, | |
| selectionInfo.height, | |
| ] | |
| } catch (e) { | |
| console.warn('you need a rectangular selection', e) | |
| } | |
| } | |
| async function selectBoundingBox() { | |
| let l = await app.activeDocument.activeLayers[0] | |
| let bounds = await l.boundsNoEffects | |
| let selectionInfo = convertSelectionObjectToSelectionInfo(bounds) | |
| await psapi.reSelectMarqueeExe(selectionInfo) | |
| return selectionInfo | |
| } | |
| function convertSelectionObjectToSelectionInfo(selection_obj) { | |
| let selection_info = { | |
| left: selection_obj._left, | |
| right: selection_obj._right, | |
| bottom: selection_obj._bottom, | |
| top: selection_obj._top, | |
| height: selection_obj._bottom - selection_obj._top, | |
| width: selection_obj._right - selection_obj._left, | |
| } | |
| return selection_info | |
| } | |
| const SelectionInfoDesc = () => ({ | |
| _obj: 'get', | |
| _target: [ | |
| { | |
| _property: 'selection', | |
| }, | |
| { | |
| _ref: 'document', | |
| _id: app.activeDocument._id, | |
| }, | |
| ], | |
| _options: { | |
| dialogOptions: 'dontDisplay', | |
| }, | |
| }) | |
| class Selection { | |
| static async getSelectionInfoExe() { | |
| //return a selectionInfo object or undefined | |
| try { | |
| const selection = await executeAsModal(async () => { | |
| const result = await batchPlay([SelectionInfoDesc()], { | |
| synchronousExecution: true, | |
| modalBehavior: 'execute', | |
| }) | |
| return result[0]?.selection | |
| }) | |
| if (this.isSelectionValid(selection)) { | |
| let selection_info = { | |
| left: selection.left._value, | |
| right: selection.right._value, | |
| bottom: selection.bottom._value, | |
| top: selection.top._value, | |
| height: selection.bottom._value - selection.top._value, | |
| width: selection.right._value - selection.left._value, | |
| } | |
| // console.dir({selection_info}) | |
| return selection_info | |
| } | |
| } catch (e) { | |
| console.warn('selection info error', e) | |
| } | |
| } | |
| static isSelectionValid(selection) { | |
| console.warn( | |
| 'isSelectionValid is deprecated use selection.isSelectionValid instead' | |
| ) | |
| if ( | |
| selection && // check if the selection is defined | |
| selection.hasOwnProperty('left') && | |
| selection.hasOwnProperty('right') && | |
| selection.hasOwnProperty('top') && | |
| selection.hasOwnProperty('bottom') | |
| ) { | |
| return true | |
| } | |
| return false | |
| } | |
| static reselectArea(selection_info) {} | |
| static isSameSelection(selection_info_1, selection_info_2) {} | |
| static async getImageToSelectionDifference() { | |
| const selectionInfo = await psapi.getSelectionInfoExe() | |
| const width = html_manip.getWidth() | |
| const height = html_manip.getHeight() | |
| const scale_info_str = `${parseInt(width)}x${parseInt( | |
| height | |
| )} => ${parseInt(selectionInfo.width)}x${parseInt( | |
| selectionInfo.height | |
| )} ` | |
| let ratio = | |
| (width * height) / (selectionInfo.width * selectionInfo.height) | |
| // const arrow = percentage >= 1 ? '↑' : '↓' | |
| // percentage = percentage >= 1 ? percentage : 1 / percentage | |
| // const percentage_str = `${arrow}X${percentage.toFixed(2)}` | |
| // console.log('scale_info_str: ', scale_info_str) | |
| // console.log('percentage_str: ', percentage_str) | |
| return ratio | |
| } | |
| static {} | |
| } | |
| module.exports = { | |
| finalWidthHeight, | |
| selectionToFinalWidthHeight, | |
| selectBoundingBox, | |
| convertSelectionObjectToSelectionInfo, | |
| Selection, | |
| } | |