Recently Adobe introduced Creative Cloud Libraries Panel and it became vital while developing any User Interface Design in Photoshop.
Libraries allow to organize hundreds of elements (sprites, icons, panels, fx) in a very handy way and allow to share it all accross big team.
I'm a UI/UX Lead in game development company and we utilize full circle of Node.js + Adobe Generator + JSX in our production pipeline.
Creative Cloud Libraries have one HUGE issue. Library owner can not be changed. That's done INTENTIONALLY to prevent users from creating new corporate accounts with a "first year discount". And this fraud mechanics is not mentioned anywhere. So at the end we have corporate account that owns all libraries and there is NO way to trnsfer ownership to another account. The only thing you can do with CC Library is to "Share it" with other account and allow to edit it. When original owner deletes library it desappears forever for everyone. There is an option to "Copy Shared CC Library" to own cloud storage BUT as a result all the links in the PSD file will be broken because they will point to an old CC Library.
I'd love to get help or even pay something for the development of a panel that will allow to Batch-relink Creative Cloud Library elements to other libraries.
How this panel should work in a first iteration (usability level: programmer

1. Panel gets all linked CCL (Creative cloud Library) layers from opened PSD.
2. Panel gets all library names which is used in that PSD.
3. User inputs copied library names near each found library name in opened PSD.
4. Script iterates througth all found CCL layers and replaces links to copied library.
5..
6. Profit. Now we relinked all CCL elements to new copied libraries and thats how you change library owner.
Here is my research of DOM model for SINGLE linked CC library smartobject.
Just open this script in the ESTK, connect to Photoshop, run it and look into the console
https://dl.dropbox.com/s/p6rjk2do8jp27c ... ucture.jsx
Legend:
property_name(type_id) = value :: property_type
> - if property is object iterate throuth its fields, read|write flag
... - tree level
Code: Select all
name(1315774496) = common_menu_arrow :: DescValueType.STRINGTYPE
color(1131180576) = 1131180576 :: DescValueType.ENUMERATEDTYPE
visible(1450402412) = true :: DescValueType.BOOLEANTYPE
mode(1298407456) = 1114402381 :: DescValueType.ENUMERATEDTYPE
opacity(1332765556) = 255 :: DescValueType.INTEGERTYPE
layerID(1283027529) = 117 :: DescValueType.INTEGERTYPE
itemIndex(1232366921) = 14 :: DescValueType.INTEGERTYPE
count(1131312160) = 24 :: DescValueType.INTEGERTYPE
preserveTransparency(1349677908) = false :: DescValueType.BOOLEANTYPE
layerFXVisible(1818654838) = false :: DescValueType.BOOLEANTYPE
globalAngle(1734503489) = 90 :: DescValueType.INTEGERTYPE
background(1113811815) = false :: DescValueType.BOOLEANTYPE
layerSection(1477) = 4018 :: DescValueType.ENUMERATEDTYPE
layerLocking(387) = layerLocking(387) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...protectTransparency(1628) = false :: DescValueType.BOOLEANTYPE
...protectComposite(1629) = false :: DescValueType.BOOLEANTYPE
...protectPosition(1630) = false :: DescValueType.BOOLEANTYPE
...protectArtboardAutonest(4019) = false :: DescValueType.BOOLEANTYPE
...protectAll(1631) = false :: DescValueType.BOOLEANTYPE
group(1198683504) = false :: DescValueType.BOOLEANTYPE
targetChannels(3242) = [ActionList] :: DescValueType.LISTTYPE
visibleChannels(3243) = [ActionList] :: DescValueType.LISTTYPE
channelRestrictions(1294) = [ActionList] :: DescValueType.LISTTYPE
fillOpacity(1295) = 255 :: DescValueType.INTEGERTYPE
hasUserMask(2319) = false :: DescValueType.BOOLEANTYPE
hasVectorMask(2320) = false :: DescValueType.BOOLEANTYPE
proportionalScaling(3244) = false :: DescValueType.BOOLEANTYPE
layerKind(3240) = 5 :: DescValueType.INTEGERTYPE
hasFilterMask(3257) = false :: DescValueType.BOOLEANTYPE
userMaskDensity(1296) = 255 :: DescValueType.INTEGERTYPE
userMaskFeather(1297) = 0 :: DescValueType.DOUBLETYPE
vectorMaskDensity(1298) = 255 :: DescValueType.INTEGERTYPE
vectorMaskFeather(1299) = 0 :: DescValueType.DOUBLETYPE
bounds(1434) = rectangle(1382249582) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...top(1416589344) = 564 :: DescValueType.UNITDOUBLE
...left(1281713780) = 536 :: DescValueType.UNITDOUBLE
...bottom(1114926957) = 581 :: DescValueType.UNITDOUBLE
...right(1382508660) = 564 :: DescValueType.UNITDOUBLE
...width(1466201192) = 28 :: DescValueType.UNITDOUBLE
...height(1214736500) = 17 :: DescValueType.UNITDOUBLE
boundsNoEffects(3966) = rectangle(1382249582) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...top(1416589344) = 564 :: DescValueType.UNITDOUBLE
...left(1281713780) = 536 :: DescValueType.UNITDOUBLE
...bottom(1114926957) = 581 :: DescValueType.UNITDOUBLE
...right(1382508660) = 564 :: DescValueType.UNITDOUBLE
...width(1466201192) = 28 :: DescValueType.UNITDOUBLE
...height(1214736500) = 17 :: DescValueType.UNITDOUBLE
boundsNoMask(3965) = rectangle(1382249582) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...top(1416589344) = 564 :: DescValueType.UNITDOUBLE
...left(1281713780) = 536 :: DescValueType.UNITDOUBLE
...bottom(1114926957) = 581 :: DescValueType.UNITDOUBLE
...right(1382508660) = 564 :: DescValueType.UNITDOUBLE
...width(1466201192) = 28 :: DescValueType.UNITDOUBLE
...height(1214736500) = 17 :: DescValueType.UNITDOUBLE
smartObject(919) = smartObject(919) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...placed(2476) = 2476 :: DescValueType.ENUMERATEDTYPE
...documentID(1148150601) = xmp.did:fddb4c8a-e616-fe45-b4e4-a4843fb016c6 :: DescValueType.STRINGTYPE
...compsList(3249) = null(1853189228) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......compID(344) = -1 :: DescValueType.INTEGERTYPE
......originalCompID(3203) = -1 :: DescValueType.INTEGERTYPE
...linked(1282304868) = true :: DescValueType.BOOLEANTYPE
...fileReference(1181314130) = common_menu_arrow.psd :: DescValueType.STRINGTYPE
...link(1282304800) = ccLibrariesElement(3118) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......elementReference(591752274) = cloud-asset://cc-api-storage.adobe.io/assets/adobe-libraries/1fdc8600-4216-4504-ba91-b7b897582164;node=b7e9d629-c9bf-4a32-8423-90060a7439ce :: DescValueType.STRINGTYPE
......name(1315774496) = common_menu_arrow :: DescValueType.STRINGTYPE
......libraryName(3117) = SA icons :: DescValueType.STRINGTYPE
......dateModified(3119) = 1476962482458 :: DescValueType.DOUBLETYPE
......adobeStockId(3120) = :: DescValueType.STRINGTYPE
......adobeStockLicenseState(3121) = 3121 :: DescValueType.ENUMERATEDTYPE
...linkMissing(3970) = false :: DescValueType.BOOLEANTYPE
...linkChanged(3971) = false :: DescValueType.BOOLEANTYPE
useAlignedRendering(1309) = false :: DescValueType.BOOLEANTYPE
generatorSettings(3991) = generatorSettings(3991) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
keyOriginType(352) = [ActionList] :: DescValueType.LISTTYPE
fillEnabled(1198) = false :: DescValueType.BOOLEANTYPE
animationProtection(4021) = animationProtection(4021) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...animationUnifyPosition(1314) = false :: DescValueType.BOOLEANTYPE
...animationUnifyEffects(1315) = false :: DescValueType.BOOLEANTYPE
...animationUnifyVisibility(1316) = false :: DescValueType.BOOLEANTYPE
...animationPropagate(1317) = true :: DescValueType.BOOLEANTYPE
artboard(377) = artboard(377) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...artboardRect(973) = classFloatRect(974) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......top(1416589344) = 0 :: DescValueType.DOUBLETYPE
......left(1281713780) = 0 :: DescValueType.DOUBLETYPE
......bottom(1114926957) = 0 :: DescValueType.DOUBLETYPE
......right(1382508660) = 0 :: DescValueType.DOUBLETYPE
...guideIDs(4023) = [ActionList] :: DescValueType.LISTTYPE
...artboardPresetName(4024) = :: DescValueType.STRINGTYPE
...color(1131180576) = RGBColor(1380401731) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......red(1382293536) = 255 :: DescValueType.DOUBLETYPE
......grain(1198681632) = 255 :: DescValueType.DOUBLETYPE
......blue(1114382368) = 255 :: DescValueType.DOUBLETYPE
...artboardBackgroundType(4025) = 1 :: DescValueType.INTEGERTYPE
artboardEnabled(1322) = false :: DescValueType.BOOLEANTYPE
vectorMaskEnabled(1311) = false :: DescValueType.BOOLEANTYPE
vectorMaskEmpty(3258) = true :: DescValueType.BOOLEANTYPE
textWarningLevel(3259) = 0 :: DescValueType.INTEGERTYPE
smartObjectMore(4022) = null(1853189228) :: DescValueType.OBJECTTYPE
> count : number , readonly
> typename : string , readonly
> __proto__ : Object , readwrite
...ID(1231318644) = 30a07a6e-d666-11e6-96ef-93fdf85a80f9 :: DescValueType.STRINGTYPE
...placed(2476) = 30a07a41-d666-11e6-96ef-93fdf85a80f9 :: DescValueType.STRINGTYPE
...pageNumber(1348947565) = 1 :: DescValueType.INTEGERTYPE
...totalPages(3199) = 1 :: DescValueType.INTEGERTYPE
...crop(1131573104) = 1 :: DescValueType.INTEGERTYPE
...frameStep(3200) = null(1853189228) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......numerator(2383) = 0 :: DescValueType.INTEGERTYPE
......denominator(2384) = 600 :: DescValueType.INTEGERTYPE
...duration(1074) = null(1853189228) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......numerator(2383) = 0 :: DescValueType.INTEGERTYPE
......denominator(2384) = 600 :: DescValueType.INTEGERTYPE
...frameCount(3201) = 1 :: DescValueType.INTEGERTYPE
...antiAliasType(1097756276) = 16 :: DescValueType.INTEGERTYPE
...type(1417244773) = 2 :: DescValueType.INTEGERTYPE
...transform(1416785510) = [ActionList] :: DescValueType.LISTTYPE
...nonAffineTransform(3202) = [ActionList] :: DescValueType.LISTTYPE
...warp(879) = warp(879) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......warpStyle(1436) = 1436 :: DescValueType.ENUMERATEDTYPE
......warpValue(1437) = 0 :: DescValueType.DOUBLETYPE
......warpPerspective(1438) = 0 :: DescValueType.DOUBLETYPE
......warpPerspectiveOther(1439) = 0 :: DescValueType.DOUBLETYPE
......warpRotate(1440) = 1332899444 :: DescValueType.ENUMERATEDTYPE
......bounds(1434) = rectangle(1382249582) :: DescValueType.OBJECTTYPE
......> count : number , readonly
......> typename : string , readonly
......> __proto__ : Object , readwrite
.........top(1416589344) = 0 :: DescValueType.UNITDOUBLE
.........left(1281713780) = 0 :: DescValueType.UNITDOUBLE
.........bottom(1114926957) = 21 :: DescValueType.UNITDOUBLE
.........right(1382508660) = 32 :: DescValueType.UNITDOUBLE
......uOrder(1441) = 4 :: DescValueType.INTEGERTYPE
......vOrder(1442) = 4 :: DescValueType.INTEGERTYPE
...size(1400512544) = paint(1349415968) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......width(1466201192) = 32 :: DescValueType.DOUBLETYPE
......height(1214736500) = 21 :: DescValueType.DOUBLETYPE
...resolution(1383296116) = 72 :: DescValueType.UNITDOUBLE
...comp(1668246896) = -1 :: DescValueType.INTEGERTYPE
...compInfo(3185) = null(1853189228) :: DescValueType.OBJECTTYPE
...> count : number , readonly
...> typename : string , readonly
...> __proto__ : Object , readwrite
......compID(344) = -1 :: DescValueType.INTEGERTYPE
......originalCompID(3203) = -1 :: DescValueType.INTEGERTYPE
https://dl.dropbox.com/s/uwdbmulv63jkbt ... onTest.psd
Test Library
https://adobe.ly/2iZNGkB
CC Library JSON (also has other my libraries) can be found at c:\Users\__USERNAME__\AppData\Roaming\Adobe\Creative Cloud Libraries\LIBS\
https://dl.dropbox.com/s/r0umljdp5221p5 ... lookupfile
Source code for Creative cloud library panel with prettified main.js (its stil compiled with AMD/requirejs but readable)
https://dl.dropbox.com/s/6g8x3dbvon6yhs ... l.html.rar
Look for word "Chosen" in main.js - this is the event when relinking to another CC Library element happens.
Finaly the dev project for CC Library Migration panel Jetbrains Webstorm project (uses Grunt + Nodejs for extension deployment)
https://github.com/artfabrique/CC-Libra ... ree/master
Here comes the problems:
ScriptListener DOES NOT recording anything when you "Relink To CC Library Item" but thy still have API and after hacking into CC Libraries panel into main.js i've catched that they dispatch an event with data:
Code: Select all
{"requestRef":{"docAndLayerIDs":"197/117"},"elementRef":"cloud-asset://cc-api-storage.adobe.io/assets/
adobe-libraries/1fdc8600-4216-4504-b391-b7b897582164;node=d438cab2-c103-4644-b5d8-313db4cf8aaZ","name":"common_icon_power_XS","libraryName":"SA icons","modifiedTime":1480685831931,"creationTime":1480685831911,"data":["C:/Users/a.vinogradov/AppData/Roaming/Adobe/Creative Cloud Libraries/LIBS/17BS6582520302C5oA49OD4D_AdobeID/creative_cloud/dox/1fdc8600-4216-4504-b391-b7b897582164/components/639c717e-d305-4348-8ba7-cc5cd6d21f74.psd"]}

Video:
http://take.ms/MsStz
I've found couple ActionDescriptors but i completely dont know how to use them..

sTID('placedLayerRelinkToLibraries');
sTID('ccLibrariesElement');
etc..
If there where a way just to replace couple strings and numbers in PSD dom for smartobject desctiptor..