Literally beat me by a minute... Although, to be fair, my path copy code is mangled from code that The Aaron gave me a couple of years ago (also, no need to select for this one, just works on the page you're on). Warning, didn't test much! on ( "ready" , function () { // change constants to desired lighting and map color/width const dllPathColor = "#ffff00" const mapPathColor = "#666666" const dllPathWidth = 5 const mapPathWidth = 10 const simpleObject = function ( o ){ return JSON . parse ( JSON . stringify ( o )) } const pathCopier = function ( drawing , layer ){ let newpath = _ . omit ( simpleObject ( drawing ),[ '_id' , '_type' ]) if ( _ . contains ([ '' , '[]' ], newpath . _path )){ return } newpath . path = JSON . stringify ( newpath . _path ) newpath . stroke = layer === "lighting" ? dllPathColor : mapPathColor newpath . layer = layer === "lighting" ? "walls" : "map" newpath . stroke_width = layer === "lighting" ? dllPathWidth : mapPathWidth let newPathObj = createObj ( 'path' , newpath ) } on ( "chat:message" , function ( msg ) { if ( msg . type === "api" && msg . content === "!ToLightingPathCopy" && playerIsGM ( msg . playerid )) { var page = getObj ( 'page' , getObj ( 'player' , msg . playerid ). get ( 'lastpage' )) paths = findObjs ({ _type : 'path' , _pageid : getObj ( 'player' , msg . playerid ). get ( 'lastpage' ), layer : 'map' }) if ( paths ) { for ( var i = 0 ; i < paths . length ; i ++) { pathCopier ( paths [ i ], 'lighting' ) } } } if ( msg . type === "api" && msg . content === "!ToMapPathCopy" && playerIsGM ( msg . playerid )) { var page = getObj ( 'page' , getObj ( 'player' , msg . playerid ). get ( 'lastpage' )) paths = findObjs ({ _type : 'path' , _pageid : getObj ( 'player' , msg . playerid ). get ( 'lastpage' ), layer : 'walls' }) if ( paths ) { for ( var i = 0 ; i < paths . length ; i ++) { pathCopier ( paths [ i ], 'map' ) } } } }); });