diff --git a/.gitignore b/.gitignore
index 0ff8dbc..3eef71b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,11 @@
-.idea
-image/dzi
-image/original
-image/script
image/image.txt
-.venv
+image/dzi
+image/dzi_edited
+image/original
+image/script/bin
+image/script/include
+image/script/lib
+image/script/lib64
+image/script/pyvenv.cfg
+upload.sh
+annotations
diff --git a/annotations/annotations.w3c.json b/annotations/annotations.w3c.json
index d4e4fe9..239fa69 100644
--- a/annotations/annotations.w3c.json
+++ b/annotations/annotations.w3c.json
@@ -1,72 +1,2002 @@
-[{
- "@context": "http://www.w3.org/ns/anno.jsonld",
- "id": "#a88b22d0-6106-4872-9435-c78b5e890000",
- "type": "Annotation",
- "body": [{
- "type": "TextualBody",
- "value": "ruler by @username",
- "format" : "text/html",
- "language" : "en"
- }],
- "target": {
- "selector": {
- "type": "FragmentSelector",
- "conformsTo": "http://www.w3.org/TR/media-frags/",
- "value": "xywh=pixel:0,0,1000,1000"
+[
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#96f1b457-bea7-400e-b071-65087b462a3b",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @SakuraStrawberry",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:9000,0,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#9d49fcd2-ecea-430c-b181-9c92ded47041",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f GRIENEISNEI
\ud83d\udc64 @MASOCHIST_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:10000,0,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#7d706411-b6ff-4e3d-bdb1-99d22122ff99",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Fizzmire",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:11000,0,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#1c845c29-1415-4f5e-8d7c-15be8dec39fd",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Bank Heist
\ud83d\udc64 @ex0ticdreamers",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#573477ef-9edd-4ec5-8120-5140005fc095",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab !!
\ud83d\udc64 @PHEONIIX_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#0bd35177-512f-42bc-b921-a70d630b1373",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f 735th post-SUCollab
\ud83d\udc64 @juicy_cream357",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:7000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#30b9e7e0-3a39-49f0-b09f-aafce02fdf82",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f \ud83c\udf4eRed skelly\ud83d\udc80
\ud83d\udc64 @soulskull",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:8000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#886841ee-73c2-4387-96fa-2f0b7c408ad7",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f TERENCE\u203c\ufe0f\u203c\ufe0f\u203c\ufe0f\ud83c\udf08
\ud83d\udc64 @segasaturnsonic",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:9000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#911f4ab0-91c8-482a-8f73-804d01e23371",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Zoe_the_weirdo",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:10000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#4cfec64e-f825-41e5-ac0a-7cc640fcf036",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Violetta baked a cake for Sketchers United \ud83c\udf82
\ud83d\udc64 @VioletGem",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:11000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#95971746-75eb-4b66-8474-6f06f92221b1",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f my entry for the #SUcollab
\ud83d\udc64 @itsjustfaz",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:12000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#878fc8c3-bb9c-4822-bcd2-bab1a0c875ee",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f My entry for the new SU collab!
\ud83d\udc64 @RayManiaPlus897",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:13000,1000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#9594e37f-53b9-45a1-b86d-c6e7485a5c89",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f \ud83e\udea9
\ud83d\udc64 @NotSoEdibleFruit",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#dc9d29bf-4fbb-4706-a4e1-24476d788715",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f \u2728\ufe0f
\ud83d\udc64 @Zarzi",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#cffe5132-70b2-46da-aab8-01d677a40159",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Tr3v0r",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#85fcc6b2-d134-4ced-b720-f055efd552cb",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Human glockenspiel. Bottom text
\ud83d\udc64 @Meowtown",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#3bf63e1e-67e1-4835-ae83-53cd92d22844",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f something before I go to art class
\ud83d\udc64 @9funkt",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#7bdd5832-30c6-4c1b-9441-5f64a2921615",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @_HeadlessMoron",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:7000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#23b35c64-063e-40f6-bd27-99ca83eb6578",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f sillies
\ud83d\udc64 @devon",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:8000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#214b90ab-1386-48a6-a657-5ef833cb186a",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f whoa #SUcollab
\ud83d\udc64 @scrae",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:9000,2000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#e5ae39f3-de1e-4181-ae1d-77e5e6d945dc",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Josey! He\u2019s back! Happy birthday SU! 4 years!
\ud83d\udc64 @EnchantedKing",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,3000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#99c66e36-e7ad-4f97-875e-e68c806eb113",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Worsethansoap",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,3000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#95b0b4ce-de06-42d8-926e-e63db46f4e04",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f IM BLUE
\ud83d\udc64 @Tv_kid",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,3000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#39aff65d-b79b-46ac-9e7e-13a6ad1746f1",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @QuackAlt",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,3000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#62507269-b865-4bf1-bfd2-9a7ff27ae764",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f I didn't rly know what to draw for this lol
\ud83d\udc64 @Fl0wer1235",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,3000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#03f60773-99d6-4bd1-b990-efe1328e30ae",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Sanity",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:1000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#89d22688-ed59-4fc4-b4f1-ae453e3c73fa",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Colorful\ud83d\udc7e
\ud83d\udc64 @SkyHeartbreaking",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#a15e9241-d062-4e47-a6f4-0383b2cec284",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy birthday, SU #SUcollab
\ud83d\udc64 @GH00000000TLYBUN",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#97112f51-3e6a-4fc9-8b12-3b87a7d19a2c",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab !!!!!!!!! \ud83d\udca5\ud83d\udca5\ud83d\udca5\ud83d\udca5\ud83d\udca5\ud83d\udca5
\ud83d\udc64 @alxft",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#ce538fef-1bae-40f6-9a4f-c88855c7a929",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @SpongeIsANerd",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#9bb0f711-9a0f-4b5b-82b1-b47bfd9b47ff",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Weee
\ud83d\udc64 @godofbots",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#33294eca-37bd-4f8f-aad6-debbad29b275",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Typicalmoth581",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:15000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#58e71eec-f5b6-4253-b275-98a450ae5ab0",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @_AutumnMushroom_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:16000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#197ba862-4a0f-4772-a003-bdad0971206f",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Me
\ud83d\udc64 @Amidot1",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:17000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#5ee14a48-1810-4240-860b-3476025e12fa",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab !!!!!!
\ud83d\udc64 @makronen",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:18000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#5b0027b1-a4f3-4034-9525-ebfa017697a1",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab \ud83d\udc40
\ud83d\udc64 @ThatLonelyArtist",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:19000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#e2731bc7-cc03-4f35-8f5c-362a6d432fcc",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @mole",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:20000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#9ae8419a-013e-4379-883d-ec484c906b33",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUCollab
\ud83d\udc64 @Blue_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:21000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#a15c7a73-e7c3-4ee5-bb09-4800080f7801",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @DaSonicBoi",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:22000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#846d605f-43b9-460e-8c74-b18658c03d48",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUCollab
\ud83d\udc64 @urlocalthing",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:23000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#0760545e-418d-4cfe-a7e5-d58f97c6eb97",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @__s0m3p3rs0n__",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:24000,4000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#93e7fd1e-3d03-47a4-8140-11c0b20540a3",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @doomkittyzero",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:0,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#90c8d5fb-4bca-4645-980b-431e79dac5bc",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Axolotl564",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:1000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#7486232b-ce31-4b38-ae57-3884777cbc8e",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f I missed everything [but happy 4th year su
\ud83d\udc64 @catteboi",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#a689922a-2156-414e-bd8b-1cf8c47cb41b",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Yay #SUcollab
\ud83d\udc64 @Cresent_StarMoon",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#f5b84431-bc5b-4a74-87e5-87e5aae31f2c",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Saur!1!1!
\ud83d\udc64 @Goose_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#c05ff0de-b795-4d97-bc39-1b236f0c84f8",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f silly
\ud83d\udc64 @spookychip",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#40601a84-470e-4ab3-bb13-4828f5d0baec",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy 4th Bday to SU!!! \ud83e\udd73
\ud83d\udc64 @That1FoxThing",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#c3a1e550-4347-4e5f-bab6-8d6ddacd4352",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab (eye strain)
\ud83d\udc64 @TheNerve",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:7000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#b9d519e1-8213-42dc-9c41-7271ae68fde0",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Idk
\ud83d\udc64 @Alphyy",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:8000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#25640cad-2379-4ceb-b1c2-42094ad884c3",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f \u2728Happy Four Years Of SU!!\u2728
\ud83d\udc64 @DerpyAxolotl",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:9000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#aba7c7ba-755e-4aaa-a606-b5eebf502010",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f THE CAKE IS A TRUTH!??!?!? \ud83d\ude28\ud83d\ude28
\ud83d\udc64 @Ai_Is_Here",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:10000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#0303a9a1-4664-4a46-bf28-551d2e2ae292",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Feeling stupid rn
\ud83d\udc64 @Imstilldead",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:11000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#fc46bfd6-90ec-4811-8d79-8ad9d30cd3ea",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Simple Celebration draw
\ud83d\udc64 @Ontos",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:12000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#aeae9411-eb35-4d02-875d-44defda7c597",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f 4 YEARS OF SKETCHERS UNITED
\ud83d\udc64 @MLG_Doggo",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:13000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#261936a2-3272-483b-9ed2-41138926e8de",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab LIGHTNING
\ud83d\udc64 @pancake_lover73",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:14000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#6db9fd84-4ea9-40fa-9a4f-43c468a1d361",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f SU is 4 years??? #SUCollab
\ud83d\udc64 @kittipaw",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:15000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#7a747aa4-1ac9-443b-a498-5a1058922b9f",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f \ud83c\udf89HAPPY ANNIVERSARY SU\ud83c\udf0c
\ud83d\udc64 @SCP_lover123",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:16000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#03bcb31d-0e39-4786-b3ee-c39518c66f28",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy 4th year SU!!!
\ud83d\udc64 @Michael1997",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:17000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#475870b3-8494-42ef-b1cf-a4388c4faca5",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Where does the time go?
\ud83d\udc64 @DarlynFlame",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:18000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#8e4e2700-e6dc-4d37-988e-0fa470108285",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Hi.
\ud83d\udc64 @TotallyAHuman_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:19000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#71402690-0a85-4def-b5bd-19d03bbd2f6a",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f HAPPY 4TH ANNIVERSARY
\ud83d\udc64 @soulskull",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:20000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#2c4e50cd-44f7-4dd0-ab28-df4a37b4699d",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @glitchyLion",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:21000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#ac974b09-9b2d-4d2b-87e8-9d10dfc56a03",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Repost
\ud83d\udc64 @ObjectSupremacy",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:22000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#c1020ac6-5b7a-4771-9803-162906e9d606",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @craftghoul",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:23000,5000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#6ae88234-7a74-470f-a962-0bf10fc2937a",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUCollab
\ud83d\udc64 @ElmoInSpace",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:1000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#73cd1e6a-c65b-407b-b507-5b97588d893d",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f a mascot
\ud83d\udc64 @puftdank",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#589665a5-629a-498e-a0df-483e9c7cdb93",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @pipsqueakk",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#b7727d6f-be7e-46e7-bfce-3773ebb62141",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUCollab
\ud83d\udc64 @smoggy",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#a5ee2be6-6de8-45dd-a410-4e84b56235cb",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f am I late to the party?
\ud83d\udc64 @kazthespooder",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#30636c72-f25a-4d45-b287-a8688c2662a3",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f \ud83c\udf8a
\ud83d\udc64 @undefined",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#19d506f2-23b9-482c-8838-7fd70f7333ce",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @boligomaboi",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:7000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#163eafb0-02af-4b64-ab67-39211e001b67",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @emmatwn3",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:8000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#1f64b7dd-e3cc-4649-8497-e438ef22a9fc",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Filbert (submission)
\ud83d\udc64 @Quackidee_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:9000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#102a8833-9aad-48e0-8cd2-28c1d9fc8d24",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy 4 years Sketchers United!
\ud83d\udc64 @DeathMuffinProd",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:10000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#4ecdc68f-b896-4afe-83cc-b4a14df3a92b",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Joined the #SUcollab !
\ud83d\udc64 @NotADino",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:11000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#872a84a7-22fc-4e0f-aaca-5ddb01ed5741",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab \ud83e\udd14
\ud83d\udc64 @UNIQUEUSERNAME_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:12000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#aed4b835-e188-4959-be0c-5f24cf2521ec",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Fixed
\ud83d\udc64 @dabbing_goose",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:13000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#cd2121f4-91c6-449c-86b6-431542c7360a",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab \ud83c\udf82\u2728
\ud83d\udc64 @Goldie_Exotic",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:14000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#12a537c4-0688-4752-b9b6-76e33fded949",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @AlexLikesTon",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:15000,6000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#d71f4460-7569-405b-aece-d3698eee6cba",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f SUcollab submission!
\ud83d\udc64 @Jazzers",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:1000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#6960dad1-0c96-45e2-a842-e8d19cd5407e",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Ver 2 for #SUcollab
\ud83d\udc64 @txi",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#68a87630-8d43-4150-a209-5afc835b88d8",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Electr0",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#ae82e6b2-8797-44d2-8221-61fc02854fd2",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Mathlet_foox",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#7eb2e0d4-b324-4c28-9e7e-a7f17456e69a",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @selfryed",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#a269b166-7053-4d42-a846-fa6fab6e8fd3",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @Glue",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#618e5fa0-ba66-4ae0-8ff4-afa05ce5b280",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f SYLVIA GREETS SU!!
\ud83d\udc64 @_Golden_Bow_",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:7000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#79c774f1-9b48-460a-9332-44f0bbbbf51e",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @AverageGameMemer",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:8000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#223d3dca-19a2-4bfd-a2b9-2bfc31e27aff",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Yay finished the art for the #SUcollab !!
\ud83d\udc64 @CarmelTheDoggo",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:9000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#a2ee02a4-5be0-4422-9ec7-3fe2c6bacfab",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Title
\ud83d\udc64 @adam_is_emo",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:10000,7000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#cdeee299-d62e-4f77-9869-799fb0ffff28",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #Sucollab
\ud83d\udc64 @Hi_im_tori",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:1000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#9e9bdb6c-2f0b-49fa-bdef-22d5db4dc6fa",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f #SUcollab
\ud83d\udc64 @AlexDoesStuff",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:2000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#f557ca44-f3ce-4642-b759-c8287c36054b",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy birthday su!
\ud83d\udc64 @Gooberman",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:3000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#f82ba59a-28b4-4c5f-be0e-52b693c0368b",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f COLLAB!
\ud83d\udc64 @Wolf_pro",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:4000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#0303e1c3-ad83-4e14-ba5a-a1f440ad8843",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f happy late anniversary, Sketch!
\ud83d\udc64 @aqelle",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:5000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#1cb61e73-fdc9-4235-a24c-7037a32fb8d6",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy late birthday SU!\ud83c\udf1f
\ud83d\udc64 @ChaiTea",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:6000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#af2dfd36-9691-4746-a3d1-97b7a3f2cb7f",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f SU COLLAB
\ud83d\udc64 @Royalapplecat",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:7000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#8bc2328a-a768-4519-9f9c-67adb4eb68e3",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f Happy birthday SU!!
\ud83d\udc64 @lily_star_KnyFan",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:8000,8000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#3bca695e-8722-4ae5-b54b-740f3a8028e8",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f HAPPY 4TH SU ANNIVERSARY!!
\ud83d\udc64 @_tsuki_yomi_2003",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:0,9000,1000,1000"
+ }
+ }
+ },
+ {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": "#3bf114b4-7ebe-40bc-923d-00088bb6ad05",
+ "type": "Annotation",
+ "body": [
+ {
+ "type": "TextualBody",
+ "value": "\ud83d\uddbc\ufe0f My submission for the SU collab
\ud83d\udc64 @Oliverhetheringt",
+ "format": "text/html",
+ "language": "en"
+ }
+ ],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": "xywh=pixel:1000,9000,1000,1000"
+ }
}
}
-},
- {
- "@context": "http://www.w3.org/ns/anno.jsonld",
- "id": "#a88b22d0-6106-4872-9435-c78b5e890001",
- "type": "Annotation",
- "body": [{
- "type": "TextualBody",
- "value": "screwdriver by @username",
- "format" : "text/html",
- "language" : "en"
- }],
- "target": {
- "selector": {
- "type": "FragmentSelector",
- "conformsTo": "http://www.w3.org/TR/media-frags/",
- "value": "xywh=pixel:0,1000,1000,1000"
- }
- }
- },
- {
- "@context": "http://www.w3.org/ns/anno.jsonld",
- "id": "#a88b22d0-6106-4872-9435-c78b5e890002",
- "type": "Annotation",
- "body": [{
- "type": "TextualBody",
- "value": "hammer by @username",
- "format" : "text/html",
- "language" : "en"
- }],
- "target": {
- "selector": {
- "type": "FragmentSelector",
- "conformsTo": "http://www.w3.org/TR/media-frags/",
- "value": "xywh=pixel:1000,0,1000,1000"
- }
- }
- },
- {
- "@context": "http://www.w3.org/ns/anno.jsonld",
- "id": "#a88b22d0-6106-4872-9435-c78b5e890003",
- "type": "Annotation",
- "body": [{
- "type": "TextualBody",
- "value": "drill by @username",
- "format" : "text/html",
- "language" : "en"
- }],
- "target": {
- "selector": {
- "type": "FragmentSelector",
- "conformsTo": "http://www.w3.org/TR/media-frags/",
- "value": "xywh=pixel:1000,1000,1000,1000"
- }
- }
- }]
+]
\ No newline at end of file
diff --git a/annotations/initial.w3c.json b/annotations/initial.w3c.json
deleted file mode 100644
index 30343c5..0000000
--- a/annotations/initial.w3c.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[{
- "@context": "http://www.w3.org/ns/anno.jsonld",
- "id": "#a88b22d0-6106-4872-9435-c78b5e890000",
- "type": "Annotation",
- "body": [{
- "type": "TextualBody",
- "value": "Nothing here yet!",
- "format" : "text/html",
- "language" : "en"
- }],
- "target": {
- "selector": {
- "type": "FragmentSelector",
- "conformsTo": "http://www.w3.org/TR/media-frags/",
- "value": "xywh=pixel:0,0,1000,1000"
- }
- }
-}]
diff --git a/image/run_gen.sh b/image/run_gen.sh
new file mode 100644
index 0000000..9ae4ddb
--- /dev/null
+++ b/image/run_gen.sh
@@ -0,0 +1,13 @@
+#!/bin/bash
+source script/bin/activate
+
+# Xvfb :99 -screen 0 1280x1024x24 &
+# export DISPLAY=:99
+
+python3 script/generate_dzi_files.py
+python3 script/generate_images_txt.py
+python3 script/generate_filtered_photos.py
+python3 script/generate_annotations.py
+
+sudo chmod -R 775 .
+sudo chown -R opc .
diff --git a/image/script/generate_annotations.py b/image/script/generate_annotations.py
new file mode 100644
index 0000000..5bc49a0
--- /dev/null
+++ b/image/script/generate_annotations.py
@@ -0,0 +1,53 @@
+import json
+import uuid
+import requests
+
+def get_post_data(folder_name):
+ url = f"https://sketchersunited.org/posts/{folder_name.split('by')[0]}"
+ headers = {"Accept": "text/json"}
+ response = requests.get(url, headers=headers)
+ if response.status_code == 200:
+ return response.json()
+ return None
+
+with open('image.txt', 'r') as file:
+ lines = file.readlines()
+
+annotations = []
+
+for line in lines:
+ folder_name, x, y, _, _, _ = line.strip().split()
+ annotation_id = str(uuid.uuid4())
+
+ post_data = get_post_data(folder_name)
+ if post_data:
+ annotation_text = f'đŧī¸ {post_data["post"]["title"]}
đ¤ @{post_data["post"]["profile"]["username"]}'
+ else:
+ annotation_text = "Data not available"
+
+ annotation = {
+ "@context": "http://www.w3.org/ns/anno.jsonld",
+ "id": f"#{annotation_id}",
+ "type": "Annotation",
+ "body": [{
+ "type": "TextualBody",
+ "value": annotation_text,
+ "format": "text/html",
+ "language": "en"
+ }],
+ "target": {
+ "selector": {
+ "type": "FragmentSelector",
+ "conformsTo": "http://www.w3.org/TR/media-frags/",
+ "value": f"xywh=pixel:{int(x)*1000},{int(y)*1000},1000,1000"
+ }
+ }
+ }
+
+ annotations.append(annotation)
+ print(f"Appended annotation for {folder_name}")
+
+with open('../annotations/annotations.w3c.json', 'w') as output_file:
+ json.dump(annotations, output_file, indent=2)
+
+print("Annotations JSON file created.")
diff --git a/image/run_batch.py b/image/script/generate_dzi_files.py
similarity index 56%
rename from image/run_batch.py
rename to image/script/generate_dzi_files.py
index 38e4235..4f75ceb 100644
--- a/image/run_batch.py
+++ b/image/script/generate_dzi_files.py
@@ -12,7 +12,6 @@ def convert_to_jpg(input_file, output_dir):
convert_command = ["convert", input_file, "-quality", "100", output_file]
subprocess.run(convert_command)
- print(f"Converted {input_file} to JPG")
process_image(output_file, output_dir)
except Exception as e:
@@ -23,35 +22,27 @@ def process_image(input_file, output_dir):
file_name_without_extension = os.path.splitext(os.path.basename(input_file))[0]
output_file = os.path.join(output_dir, file_name_without_extension, f"{file_name_without_extension}")
- command = ["./magick-slicer.sh", input_file, output_file]
-
- print(command)
- print(output_file)
- print(os.getcwd())
+ command = ["./script/magick-slicer.sh", input_file, output_file]
subprocess.run(command)
print(f"Processed {input_file}")
except Exception as e:
print(f"Error processing {input_file}: {e}")
-def main():
+input_dir = "original"
+output_dir = "dzi"
- input_dir = "original"
- output_dir = "dzi"
+os.makedirs(output_dir, exist_ok=True)
+os.makedirs(os.path.join(input_dir, "jpg"), exist_ok=True)
- os.makedirs(output_dir, exist_ok=True)
- os.makedirs(os.path.join(input_dir, "jpg"), exist_ok=True)
+image_files = []
+for root, _, files in os.walk(input_dir):
+ for filename in files:
+ if filename.lower().endswith((".jpg", ".jpeg", ".png", ".gif")):
+ image_files.append(os.path.join(root, filename))
- image_files = []
- for root, _, files in os.walk(input_dir):
- for filename in files:
- if filename.lower().endswith((".jpg", ".jpeg", ".png", ".gif")):
- image_files.append(os.path.join(root, filename))
+for input_file in image_files:
+ convert_to_jpg(input_file, output_dir)
- for input_file in image_files:
- convert_to_jpg(input_file, output_dir)
-
- shutil.rmtree(os.path.join(input_dir, "jpg"))
-
-if __name__ == "__main__":
- main()
+shutil.rmtree(os.path.join(input_dir, "jpg"))
+print("Sliced all photos.")
diff --git a/image/script/generate_filtered_photos.py b/image/script/generate_filtered_photos.py
new file mode 100644
index 0000000..1721215
--- /dev/null
+++ b/image/script/generate_filtered_photos.py
@@ -0,0 +1,36 @@
+from PIL import Image, ImageOps, ImageEnhance
+import os
+import shutil
+
+with open('image.txt', 'r') as file:
+ lines = file.readlines()
+
+for line, folder_name in zip(lines, os.listdir('dzi')):
+ folder_name, x, y, red, green, blue = line.strip().split()
+
+ original_folder_path = os.path.join('dzi', folder_name, folder_name + '_files')
+
+ edited_folder_path = os.path.join('dzi_edited', folder_name, folder_name + '_files')
+ os.makedirs(edited_folder_path, exist_ok=True)
+
+ original_dzi_file_path = os.path.join('dzi', folder_name, f'{folder_name}.dzi')
+ edited_dzi_file_path = os.path.join('dzi_edited', folder_name, f'{folder_name}.dzi')
+ shutil.copy(original_dzi_file_path, edited_dzi_file_path)
+
+ for folder in os.listdir(original_folder_path):
+ for filename in os.listdir(os.path.join(original_folder_path, folder)):
+ original_image_path = os.path.join(original_folder_path, folder, filename)
+ grayscale_image = ImageOps.grayscale(Image.open(original_image_path))
+
+ colormap = ImageOps.colorize(grayscale_image, black=(0, 0, 0), white=(int(red), int(green), int(blue)))
+
+ enhancer = ImageEnhance.Brightness(colormap)
+ bright_colormap = enhancer.enhance(1.5)
+
+ edited_image_path = os.path.join(edited_folder_path, folder, filename)
+
+ os.makedirs(os.path.join(edited_folder_path, folder), exist_ok=True)
+ bright_colormap.save(edited_image_path, quality=100)
+ print("Processing " + folder_name)
+
+print("Image processing completed.")
diff --git a/image/script/generate_images_txt.py b/image/script/generate_images_txt.py
new file mode 100644
index 0000000..04405eb
--- /dev/null
+++ b/image/script/generate_images_txt.py
@@ -0,0 +1,23 @@
+from PIL import Image
+import os
+
+if os.path.exists("image.txt"):
+ os.remove("image.txt")
+
+su_image = Image.open("sureal25x25.png").convert("RGBA")
+su_pixels = su_image.load()
+
+subfolder_names = sorted(os.listdir("dzi"))
+
+with open("image.txt", "w") as output_file:
+ for y in range(su_image.height):
+ for x in range(su_image.width):
+ r, g, b, a = su_pixels[x, y]
+
+ if a == 255:
+ if subfolder_names:
+ folder_name = subfolder_names.pop(0)
+ output_file.write(f"{folder_name} {x} {y} {r} {g} {b}\n")
+ else:
+ print("Finished generating images txt")
+ exit()
diff --git a/image/magick-slicer.sh b/image/script/magick-slicer.sh
similarity index 100%
rename from image/magick-slicer.sh
rename to image/script/magick-slicer.sh
diff --git a/image/script/requirements.txt b/image/script/requirements.txt
new file mode 100644
index 0000000..0fce876
--- /dev/null
+++ b/image/script/requirements.txt
@@ -0,0 +1,2 @@
+pillow
+requests
diff --git a/image/sureal.png b/image/sureal.png
new file mode 100644
index 0000000..8f79f27
Binary files /dev/null and b/image/sureal.png differ
diff --git a/image/sureal25x25.png b/image/sureal25x25.png
new file mode 100644
index 0000000..bcf4759
Binary files /dev/null and b/image/sureal25x25.png differ
diff --git a/image/sureal40x40.png b/image/sureal40x40.png
new file mode 100644
index 0000000..31bb331
Binary files /dev/null and b/image/sureal40x40.png differ
diff --git a/index.html b/index.html
index ff13a8a..0d175e9 100644
--- a/index.html
+++ b/index.html
@@ -60,7 +60,7 @@
Use either the mouse wheel or your fingers to zoom in and out of the view.
-
You can tap on the image to see who drew it and get a link to the post.
+
(Not yet implemented) You can tap on the image to see who drew it and get a link to the post.
âšī¸ The view may get somewhat laggy on a mobile device. For the best experience use a desktop computer.
This is unavoidable due to the number of images downloaded and shown.
diff --git a/script/annotations.js b/script/annotations.js
index d74f51e..cbadca0 100644
--- a/script/annotations.js
+++ b/script/annotations.js
@@ -1,6 +1,7 @@
const anno = OpenSeadragon.Annotorious(viewer);
-anno.readOnly = true
-anno.loadAnnotations('annotations/initial.w3c.json');
+anno.readOnly = true;
+anno.escape = false;
+anno.loadAnnotations('annotations/annotations.w3c.json');
let annotationText = ""
function renderHTML()
@@ -25,4 +26,5 @@ anno.on('clickAnnotation', function(annotation, element)
viewer.addHandler('update-viewport', function(event)
{
renderHTML()
-});
\ No newline at end of file
+});
+
diff --git a/script/image_load.js b/script/image_load.js
index 8825844..e6b9020 100644
--- a/script/image_load.js
+++ b/script/image_load.js
@@ -2,8 +2,6 @@ let dictionaries = []
const imagePromises = [];
let image_count = 0
-Caman.Store.put = function() {};
-
function load_image(image) {
return new Promise((resolve, reject) => {
viewer.addTiledImage({
@@ -31,17 +29,17 @@ fetch('image/image.txt')
.then(text => {
const lines = text.split('\n');
lines.forEach(line => {
- if (!line.startsWith('#')) {
+ if (!line.startsWith('#') && line.length > 0) {
const parts = line.split(' ');
const dictionary = {
imageCount: image_count,
- tileSource: 'image/dzi/' + parts[0] + '/' + parts[0] + '.dzi',
+ tileSource: 'image/dzi_edited/' + parts[0] + '/' + parts[0] + '.dzi',
x: parseInt(parts[1]),
y: parseInt(parts[2]),
red: parseInt(parts[3]),
- blue: parseInt(parts[4]),
- green: parseInt(parts[5]),
+ green: parseInt(parts[4]),
+ blue: parseInt(parts[5]),
};
const promise = load_image(dictionary);
@@ -62,14 +60,13 @@ fetch('image/image.txt')
processors: [
function (context, callback) {
Caman(context.canvas, function () {
- this.colorize(image.red, image.green, image.blue, 50);
+ this.colorize(image.red, image.green, image.blue, 80);
this.render(callback);
});
- }
- // },
+ },
// function (context, callback) {
// Caman(context.canvas, function () {
- // this.contrast(10);
+ // this.contrast(100);
// this.render(callback);
// });
// }
@@ -79,9 +76,9 @@ fetch('image/image.txt')
all_filters.push(filter)
});
- viewer.setFilterOptions({
- filters: all_filters
- });
+ // viewer.setFilterOptions({
+ // filters: all_filters
+ // });
})
diff --git a/script/live.js b/script/live.js
index 12d21af..24388e2 100644
--- a/script/live.js
+++ b/script/live.js
@@ -1,11 +1,14 @@
const clientCountElement = document.getElementById('clientCount');
-const socket = new WebSocket('ws://localhost:8080/funsocket');
+const socket = new WebSocket('wss://sketchersunitedcollab.com/funsocket');
socket.addEventListener('message', (event) => {
- const clientCount = parseInt(event.data);
- let append = " people"
- if (clientCount === 1) {
- append = " person"
+ if(event.data.toString().length < 5) {
+ const clientCount = parseInt(event.data);
+
+ let append = " people"
+ if (clientCount === 1) {
+ append = " person"
+ }
+ clientCountElement.textContent = clientCount.toString() + append;
}
- clientCountElement.textContent = clientCount.toString() + append;
});
diff --git a/script/viewer.js b/script/viewer.js
index 449d314..645d05c 100644
--- a/script/viewer.js
+++ b/script/viewer.js
@@ -1,3 +1,5 @@
+Caman.Store.put = function() {};
+
const viewer = OpenSeadragon({
id: "viewer",
showZoomControl: false,
@@ -12,9 +14,9 @@ viewer.smartScrollZoom({
zoomIncrement: 1000
});
-viewer.viewport.minZoomLevel = 0.0125;
-viewer.viewport.maxZoomLevel = 100;
-viewer.viewport.defaultZoomLevel = 0.0125;
+viewer.viewport.minZoomLevel = 0.001;
+viewer.viewport.maxZoomLevel = 2;
+viewer.viewport.defaultZoomLevel = 0.05;
viewer.viewport.scrollHandlerSpeed = 1000;
viewer.drawer.context.imageSmoothingEnabled = false;
viewer.gestureSettingsMouse.clickToZoom = false;
diff --git a/style.css b/style.css
index a9c7d05..26e7742 100644
--- a/style.css
+++ b/style.css
@@ -12,7 +12,7 @@ body {
background-color: #222;
background-image: url("image/su.png");
background-repeat: no-repeat;
- background-size: 1000px;
+ background-size: 400px;
background-position: center;
image-rendering: pixelated;
}
@@ -170,10 +170,10 @@ a {
cursor: pointer;
}
-@media screen and (max-width: 1081px) {
+@media screen and (max-width: 1081px) and (-webkit-min-device-pixel-ratio: 2) {
#viewer {
width: 100vw;
- height: 100vh;
+ height: 66vh;
}
#modal-content {
font-size: 20pt;
diff --git a/websocket/websocket.py b/websocket/websocket.py
index 49bd587..f6afe5b 100644
--- a/websocket/websocket.py
+++ b/websocket/websocket.py
@@ -15,7 +15,6 @@ class WebSocketHandler(tornado.websocket.WebSocketHandler):
self.send_client_count()
def check_origin(self, origin):
- # Allow all connections regardless of the origin
return True
def send_client_count(self):
@@ -27,35 +26,26 @@ class WebSocketHandler(tornado.websocket.WebSocketHandler):
print(f"Error sending message to client: {e}")
async def handle_message(self, message):
- if message.startswith("post"):
- # Extract post_id_var and author_id_var from the message
- try:
- _, post_id_var, _, author_id_var = message.split("{")
- post_id = int(post_id_var.split("}")[0])
- author_id = int(author_id_var.split("}")[0])
+ try:
+ post, user = message.split('by')
+ post = int(post)
+ user = int(user)
- # Construct the URL
- post_url = f"https://post.com/{post_id}"
+ post_url = f"https://sketchersunited.org/posts/{post}"
+ headers = {
+ "Accept": "application/json",
+ }
- # Create HTTP request headers with Accept: application/json
- headers = {
- "Accept": "application/json",
- }
+ request = HTTPRequest(post_url, method="GET", headers=headers)
- # Create an HTTP request
- request = HTTPRequest(post_url, method="GET", headers=headers)
+ http_client = AsyncHTTPClient()
+ response = await http_client.fetch(request)
+ self.write_message(response.body)
- # Fetch the URL asynchronously
- http_client = AsyncHTTPClient()
- response = await http_client.fetch(request)
-
- # Send the JSON response back to the WebSocket client
- self.write_message(response.body)
- except Exception as e:
- print(f"Error handling message: {e}")
+ except Exception as e:
+ print(f"Error handling message: {e}")
def on_message(self, message):
- # Handle incoming messages
tornado.ioloop.IOLoop.current().add_callback(self.handle_message, message)
app = tornado.web.Application([