diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm
index e3faa052f0f..ea9cf8eb067 100644
--- a/code/game/objects/structures/artstuff.dm
+++ b/code/game/objects/structures/artstuff.dm
@@ -527,6 +527,87 @@
loaded = TRUE
update_appearance()
+/*
+ * Recursive Proc. If given no arguments, requests user to input arguments with warning that generating the list may be res intensive
+ * Upon generating arguments, calls itself and spawns the painting
+ * Ideally called using the vvar dropdown admin verb and used using debugging the SSpersistence list to minimize lag
+ * usr must have an admin holder (ergo: only staff may use this)
+ * TODO: create a machine in the library for curators to spawn canvases and refactor this to use the proc used there.
+ * For now, we do it this way because calling this on a canvas itself might cause issues due to the whole dimension thing.
+*/
+/obj/structure/sign/painting/proc/admin_lateload_painting(var/spawn_specific = 0, var/which_painting = 0)
+ if(!usr.client.holder)
+ return 0
+ if(spawn_specific && isnum(which_painting))
+ var/list/painting = SSpersistence.all_paintings[which_painting]
+ var/title = painting["title"]
+ var/author_name = painting["author"]
+ var/author_ckey = painting["ckey"]
+ var/persistence_id = painting["persistence_id"]
+ var/png = "data/persistent/paintings/[persistence_id]/[painting["md5"]].png"
+ to_chat(usr, span_notice("The chosen painting is the following \n\n \
+ Title: [title] \n \
+ Author's Name: [author_name]. \n \
+ Author's CKey: [author_ckey]"))
+ if(tgui_alert(usr, "Check your chat log (if filtering for notices, check where you don't) for painting details.",
+ "Is this the painting you want?", list("Yes", "No")) == "No")
+ return 0
+ if(!fexists("data/persistent/paintings/[persistence_id]/[painting["md5"]].png"))
+ to_chat(usr, span_warning("Chosen painting could not be loaded! Incident was logged, but no action taken at this time"))
+ log_debug("[usr] tried to spawn painting of list id [which_painting] in all_paintings list and associated file could not be found. \n \
+ Painting was titled [title] by [author_ckey] of [persistence_id]")
+ return 0
+
+ var/icon/I = new(png)
+ var/obj/item/canvas/new_canvas
+ var/w = I.Width()
+ var/h = I.Height()
+ for(var/T in typesof(/obj/item/canvas))
+ new_canvas = T
+ if(initial(new_canvas.width) == w && initial(new_canvas.height) == h)
+ new_canvas = new T(src)
+ break
+
+ if(!new_canvas)
+ warning("Couldn't find a canvas to match [w]x[h] of painting")
+ return 0
+
+ new_canvas.fill_grid_from_icon(I)
+ new_canvas.generated_icon = I
+ new_canvas.icon_generated = TRUE
+ new_canvas.finalized = TRUE
+ new_canvas.painting_name = title
+ new_canvas.author_name = author_name
+ new_canvas.author_ckey = author_ckey
+ new_canvas.name = "painting - [title]"
+ current_canvas = new_canvas
+ loaded = TRUE
+ update_appearance()
+ log_and_message_admins("spawned painting from [author_ckey] with title [title]", usr)
+
+ else
+
+ if(tgui_alert(usr, "No painting list ID was given. You may obtain such by debugging SSPersistence and checking the all_paintings entry. \
+ If you do not wish to do that, you may request a list to be generated of painting titles. This might be resource intensive. \
+ Proceed? It will likely have over 500 entries", "Generate list?", list("Proceed!", "Cancel")) == "Cancel")
+ return
+
+ log_debug("[usr] generated list of paintings from SSPersistence")
+ var/list/paintings = list()
+ var/current = 1
+ for(var/entry in SSpersistence.all_paintings)
+ var/key = "[entry["title"]] by [entry["author"]]"
+ paintings[key] = current
+ current += 1
+
+ var/choice = tgui_input_list(usr, "Choose which painting to spawn!", "Spawn painting", paintings, null)
+ if(!choice)
+ return 0
+ admin_lateload_painting(1, paintings[choice])
+
+
+
+
/obj/structure/sign/painting/proc/save_persistent()
if(!persistence_id || !current_canvas || current_canvas.no_save)
return
@@ -598,4 +679,4 @@
QDEL_NULL(P.current_canvas)
P.update_appearance()
loaded = FALSE
- log_and_message_admins("[key_name_admin(user)] has deleted persistent painting made by [author].")
\ No newline at end of file
+ log_and_message_admins("[key_name_admin(user)] has deleted persistent painting made by [author].")