{"id":977,"date":"2017-06-25T07:00:53","date_gmt":"2017-06-25T06:00:53","guid":{"rendered":"http:\/\/exponentialdecay.co.uk\/blog\/?p=977"},"modified":"2025-11-30T17:24:06","modified_gmt":"2025-11-30T17:24:06","slug":"the-painter-goblin-part-4-putting-it-all-together","status":"publish","type":"post","link":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/","title":{"rendered":"The Painter Goblin: Part 4, Putting it all together\u2026"},"content":{"rendered":"<p>Following the <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/tag\/the-painter-goblin\/\" target=\"_blank\" rel=\"noopener noreferrer\">previous posts<\/a>, bringing this all together meant <a href=\"https:\/\/github.com\/ross-spencer\/painter-goblin\" target=\"_blank\" rel=\"noopener noreferrer\">three different applications<\/a>.<\/p>\n<ul>\n<li><code>paintergoblin.py<\/code> &#8211; creates the images, can be run standalone<\/li>\n<li><code>wikigoblin.py<\/code> &#8211; retrieves data to tweet from the Wikidata SPARQL services<\/li>\n<li><code>twittergoblin.py<\/code> &#8211; tweets for us! Either a random Wikidata image or from am existing Wikidata link<\/li>\n<\/ul>\n<p>We create Tweetable information using the <code>wikigoblin<\/code>. We perform the Tweet using <code>twittergoblin<\/code>. In between the <code>paintergoblin<\/code>\u00a0has to create his art!<\/p>\n<p>We\u2019ve seen examples of the images from the original zine.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/dali\/\" rel=\"attachment wp-att-978\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-978\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/dali.png\" alt=\"Persistence of Memory\" width=\"500\" height=\"358\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/dali.png 500w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/dali-300x215.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>How do we turn this concept into something real, and automated?<\/p>\n<p><!--more--><\/p>\n<h2>Pillow on Python<\/h2>\n<p>I had a few different attempts trying to recreate these effects automatically using Python\u2019s image library: <a href=\"https:\/\/python-pillow.org\/\" target=\"_blank\" rel=\"noopener\">pillow<\/a>.<\/p>\n<p>I knew this would give me much of the processing capability that was needed, I just didn\u2019t know how close I could get to the effect which had originally been created manually.<\/p>\n<p>The experimentation was fun. I couldn&#8217;t get as close as the zine, but in the end it helped me select the following algorithm for creating images:<\/p>\n<ul>\n<li>Enhance <strong>brightness<\/strong> and <strong>contrast<\/strong> (Some old images are faded and so this helps to pull detail out of them)<\/li>\n<li>Enhance <strong>saturation<\/strong> (This makes the colors more vibrant)<\/li>\n<li>Convert to an <strong>indexed image<\/strong> of five colors (This then restricts the number of colors to the most common found in the image)<\/li>\n<li>Swap in a new, <strong>randomized<\/strong>, palette from a list of palettes<\/li>\n<\/ul>\n<p>Et voila! The piece is done!<\/p>\n<h2>Palettes<\/h2>\n<p>Good spot. I haven\u2019t really spoken about these. Palettes have been of interest to me for a few years, see: <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/colour-theory-whats-the-deal-with-the-palettes-im-using\/\" target=\"_blank\" rel=\"noopener\">Color Theory: What\u2019s the deal with the palettes I\u2019m using?\u00a0<\/a><\/p>\n<p>The effect on even a small image given the right palette is, well, I can\u2019t qualify it. It\u2019s just nice.<\/p>\n<p>And so I wanted to try and achieve the same with Painter Goblin.<\/p>\n<p>So far I have created a number of palettes. Some have been inspired from previous ones, others from computer games, or <a href=\"https:\/\/twitter.com\/horsenburger?lang=en\" target=\"_blank\" rel=\"noopener\">teletext<\/a>, or just how I feel. The <a href=\"https:\/\/twitter.com\/paintergoblin\/status\/869845808136339456\" target=\"_blank\" rel=\"noopener\">French flag palette<\/a> turned out well. As the code lives longer and folk become engaged with it, myself included, I\u2019ll add more palettes to see how they work. Not all will last, and some will be modified over time \u2013 I\u2019ve already darkened some of the reds in <a href=\"https:\/\/twitter.com\/paintergoblin\/status\/869151812959387648\" target=\"_blank\" rel=\"noopener\">the more extreme red palettes<\/a>. It\u2019s just about finding a balance.<\/p>\n<p>I like how mood and atmosphere changes given certain palettes. I like how meaning seems to change. And I like how patterns appear.<\/p>\n<h2>Some work the Goblin has already output&#8230;<\/h2>\n<figure id=\"attachment_980\" aria-describedby=\"caption-attachment-980\" style=\"width: 1706px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/chat-noir\/\" rel=\"attachment wp-att-980\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-980 size-full\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/chat-noir.jpg\" alt=\"Le Chat Noir\" width=\"1706\" height=\"1200\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/chat-noir.jpg 1706w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/chat-noir-300x211.jpg 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/chat-noir-768x540.jpg 768w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/chat-noir-1024x720.jpg 1024w\" sizes=\"auto, (max-width: 1706px) 100vw, 1706px\" \/><\/a><figcaption id=\"caption-attachment-980\" class=\"wp-caption-text\">Wikidata:\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Q3535485\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/wiki\/Q3535485<\/a><\/figcaption><\/figure>\n<figure id=\"attachment_981\" aria-describedby=\"caption-attachment-981\" style=\"width: 1200px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/dblpzxsxsaa5o8n\/\" rel=\"attachment wp-att-981\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-981 size-full\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBLpZxsXsAA5o8n.jpg\" alt=\"Bubbles\" width=\"1200\" height=\"847\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBLpZxsXsAA5o8n.jpg 1200w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBLpZxsXsAA5o8n-300x212.jpg 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBLpZxsXsAA5o8n-768x542.jpg 768w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBLpZxsXsAA5o8n-1024x723.jpg 1024w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><figcaption id=\"caption-attachment-981\" class=\"wp-caption-text\">Wikidata:\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Q29626086\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/wiki\/Q29626086<\/a><\/figcaption><\/figure>\n<figure id=\"attachment_982\" aria-describedby=\"caption-attachment-982\" style=\"width: 857px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/dbjjtpaxsaedxw6\/\" rel=\"attachment wp-att-982\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-982 size-full\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBJjTpaXsAEdXW6.jpg\" alt=\"Two Girls Blowing Bubbles\" width=\"857\" height=\"1200\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBJjTpaXsAEdXW6.jpg 857w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBJjTpaXsAEdXW6-214x300.jpg 214w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBJjTpaXsAEdXW6-768x1075.jpg 768w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DBJjTpaXsAEdXW6-731x1024.jpg 731w\" sizes=\"auto, (max-width: 857px) 100vw, 857px\" \/><\/a><figcaption id=\"caption-attachment-982\" class=\"wp-caption-text\">Wikidata:\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Q17334682\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/wiki\/Q17334682<\/a><\/figcaption><\/figure>\n<p>Though the effect is not exactly the same, when we look at the original zine. It is still something I think remains true to the spirit. I do think an algorithm is possible where false color is used effectively on regions of an image with just the brightest or most prominent color, but then I became charmed by how brash some of these palettes made existing paintings and other mediums. Through experimentation and play, these images became the Painter Goblin\u2019s.<\/p>\n<h2>The Goblin and Me<\/h2>\n<p>One thing we will always have Is art. Of course, the Painter Goblin\u2019s is not his own \u2013 it\u2019s borrowed \u2013 years old \u2013 public domain material. This work has helped me engage with that and learn more about artists, and their work \u2013 I\u2019ll learn more as I engage more. I\u2019ve already added different styles to the algorithm as well, differentiating between watercolors, prints, posters. Some styles haven\u2019t worked, like <a href=\"https:\/\/twitter.com\/paintergoblin\" target=\"_blank\" rel=\"noopener\">drawing<\/a> where almost too much detail exists. I enjoy working with the palettes. I love the surprise of a new image in the morning should the Goblin Tweet automatically overnight.<\/p>\n<p>Some nights, I can just sit, looking for other pieces of art on Wikidata and see where the algorithm takes it \u2013 trialing different palettes, and just choosing where and when to Tweet outside of the Goblin\u2019s scheduled times.<\/p>\n<p>I like how the work reveals new detail about images and artificially highlights parts of an image that may not have been prominent before. Because we treat all images as &#8216;indexed&#8217;, we can even swap out grey-scale palettes for color ones making grey-scale images all of a sudden color. I like that idea,<\/p>\n<figure id=\"attachment_983\" aria-describedby=\"caption-attachment-983\" style=\"width: 1280px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/da617hivyaafixd-jpg-large\/\" rel=\"attachment wp-att-983\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-983 size-full\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg\" alt=\"Starry Night\" width=\"1280\" height=\"1014\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg 1280w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large-300x238.jpg 300w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large-768x608.jpg 768w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large-1024x811.jpg 1024w\" sizes=\"auto, (max-width: 1280px) 100vw, 1280px\" \/><\/a><figcaption id=\"caption-attachment-983\" class=\"wp-caption-text\">Wikidata:\u00a0<a href=\"https:\/\/www.wikidata.org\/wiki\/Q45585\" target=\"_blank\" rel=\"noopener\">https:\/\/www.wikidata.org\/wiki\/Q45585<\/a><\/figcaption><\/figure>\n<p>It\u2019s like we\u2019re both creating art, and right now, it\u2019s nice to have the Goblin around. I hope you get something out of it too.<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_977\" class=\"pvc_stats total_only  \" data-element-id=\"977\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Following the <a href=\"https:\/\/exponentialdecay.co.uk\/blog\/tag\/the-painter-goblin\/\" target=\"_blank\" rel=\"noopener noreferrer\">previous posts<\/a>, bringing this all together meant <a href=\"https:\/\/github.com\/ross-spencer\/painter-goblin\" target=\"_blank\" rel=\"noopener noreferrer\">three different applications<\/a>.<\/p>\n<ul>\n<li><code>paintergoblin.py<\/code> &#8211; creates the images, can be run standalone<\/li>\n<li><code>wikigoblin.py<\/code> &#8211; retrieves data to tweet from the Wikidata SPARQL services<\/li>\n<li><code>twittergoblin.py<\/code> &#8211; tweets for us! Either a random Wikidata image or from am existing Wikidata link<\/li>\n<\/ul>\n<p>We create Tweetable information using the <code>wikigoblin<\/code>. We perform the Tweet using <code>twittergoblin<\/code>. In between the <code>paintergoblin<\/code>\u00a0has to create his art!<\/p>\n<p>We\u2019ve seen examples of the images from the original zine.<\/p>\n<p><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/dali\/\" rel=\"attachment wp-att-978\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-978\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/dali.png\" alt=\"Persistence of Memory\" width=\"500\" height=\"358\" srcset=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/dali.png 500w, https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/06\/dali-300x215.png 300w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>How do we turn this concept into something real, and automated?<\/p>\n<div class=\"link-more\"><a href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &ldquo;The Painter Goblin: Part 4, Putting it all together\u2026&rdquo;<\/span>&hellip;<\/a><\/div>\n<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_977\" class=\"pvc_stats total_only  \" data-element-id=\"977\" style=\"\"><i class=\"pvc-stats-icon small\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":983,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"activitypub_content_warning":"","activitypub_content_visibility":"quiet_public","activitypub_max_image_attachments":5,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"federated","footnotes":""},"categories":[49,114,20,135,19],"tags":[24,61,96,179,124,21,73,115,68,121,132,131,64,122,119],"class_list":["post-977","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-digital-humanities","category-digital-literacy","category-just-code","category-painter-goblin","category-python","tag-art","tag-code","tag-coding","tag-coding-lessons","tag-creative-commons","tag-data","tag-digital-humanities","tag-digital-literacy","tag-generative-art","tag-open-data","tag-painter-goblin","tag-paintergoblin","tag-twitter","tag-twitter-bot","tag-wikidata","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Painter Goblin: Part 4, Putting it all together\u2026<\/title>\n<meta name=\"description\" content=\"Putting the final pieces together to turn the Painter Goblin Zine into a working automated bot and concluding thoughts about the project.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Painter Goblin: Part 4, Putting it all together\u2026\" \/>\n<meta property=\"og:description\" content=\"Putting the final pieces together to turn the Painter Goblin Zine into a working automated bot and concluding thoughts about the project.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/\" \/>\n<meta property=\"og:site_name\" content=\"ross spencer :: exponentialdecay.digipres :: blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-25T06:00:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-30T17:24:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"1014\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ross Spencer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:site\" content=\"@beet_keeper\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ross Spencer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/\"},\"author\":{\"name\":\"Ross Spencer\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"headline\":\"The Painter Goblin: Part 4, Putting it all together\u2026\",\"datePublished\":\"2017-06-25T06:00:53+00:00\",\"dateModified\":\"2025-11-30T17:24:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/\"},\"wordCount\":793,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/07\\\/DA617HIVYAAFiXD.jpg-large.jpg\",\"keywords\":[\"Art\",\"Code\",\"Coding\",\"Coding Lessons\",\"Creative Commons\",\"Data\",\"Digital Humanities\",\"digital literacy\",\"Generative Art\",\"Open Data\",\"painter goblin\",\"paintergoblin\",\"Twitter\",\"Twitter Bot\",\"wikidata\"],\"articleSection\":[\"Digital Humanities\",\"Digital Literacy\",\"Just Code\",\"Painter Goblin\",\"Python\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/\",\"name\":\"The Painter Goblin: Part 4, Putting it all together\u2026\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/07\\\/DA617HIVYAAFiXD.jpg-large.jpg\",\"datePublished\":\"2017-06-25T06:00:53+00:00\",\"dateModified\":\"2025-11-30T17:24:06+00:00\",\"description\":\"Putting the final pieces together to turn the Painter Goblin Zine into a working automated bot and concluding thoughts about the project.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#primaryimage\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/07\\\/DA617HIVYAAFiXD.jpg-large.jpg\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/07\\\/DA617HIVYAAFiXD.jpg-large.jpg\",\"width\":1280,\"height\":1014,\"caption\":\"Starry Night\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/the-painter-goblin-part-4-putting-it-all-together\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Painter Goblin: Part 4, Putting it all together\u2026\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/\",\"name\":\"ross spencer :: exponentialdecay.digipres :: blog\",\"description\":\"Digital preservation analyst, researcher, and software developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/#\\\/schema\\\/person\\\/4cae0a954400f42b9c1b70c699837716\",\"name\":\"Ross Spencer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"contentUrl\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\",\"width\":2560,\"height\":2560,\"caption\":\"Ross Spencer\"},\"logo\":{\"@id\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/avatar-scaled.png\"},\"description\":\"Digital preservation domain expert and full-stack software developer.\",\"sameAs\":[\"http:\\\/\\\/www.exponentialdecay.co.uk\\\/blog\",\"https:\\\/\\\/www.instagram.com\\\/b33tk33p3r\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/ross-spencer-b6b9b758\\\/\",\"https:\\\/\\\/x.com\\\/beet_keeper\"],\"url\":\"https:\\\/\\\/exponentialdecay.co.uk\\\/blog\\\/author\\\/exponentialdecay\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Painter Goblin: Part 4, Putting it all together\u2026","description":"Putting the final pieces together to turn the Painter Goblin Zine into a working automated bot and concluding thoughts about the project.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/","og_locale":"en_US","og_type":"article","og_title":"The Painter Goblin: Part 4, Putting it all together\u2026","og_description":"Putting the final pieces together to turn the Painter Goblin Zine into a working automated bot and concluding thoughts about the project.","og_url":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/","og_site_name":"ross spencer :: exponentialdecay.digipres :: blog","article_published_time":"2017-06-25T06:00:53+00:00","article_modified_time":"2025-11-30T17:24:06+00:00","og_image":[{"width":1280,"height":1014,"url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg","type":"image\/jpeg"}],"author":"Ross Spencer","twitter_card":"summary_large_image","twitter_creator":"@beet_keeper","twitter_site":"@beet_keeper","twitter_misc":{"Written by":"Ross Spencer","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#article","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/"},"author":{"name":"Ross Spencer","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"headline":"The Painter Goblin: Part 4, Putting it all together\u2026","datePublished":"2017-06-25T06:00:53+00:00","dateModified":"2025-11-30T17:24:06+00:00","mainEntityOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/"},"wordCount":793,"commentCount":1,"publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg","keywords":["Art","Code","Coding","Coding Lessons","Creative Commons","Data","Digital Humanities","digital literacy","Generative Art","Open Data","painter goblin","paintergoblin","Twitter","Twitter Bot","wikidata"],"articleSection":["Digital Humanities","Digital Literacy","Just Code","Painter Goblin","Python"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/","url":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/","name":"The Painter Goblin: Part 4, Putting it all together\u2026","isPartOf":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#primaryimage"},"image":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#primaryimage"},"thumbnailUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg","datePublished":"2017-06-25T06:00:53+00:00","dateModified":"2025-11-30T17:24:06+00:00","description":"Putting the final pieces together to turn the Painter Goblin Zine into a working automated bot and concluding thoughts about the project.","breadcrumb":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#primaryimage","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2017\/07\/DA617HIVYAAFiXD.jpg-large.jpg","width":1280,"height":1014,"caption":"Starry Night"},{"@type":"BreadcrumbList","@id":"https:\/\/exponentialdecay.co.uk\/blog\/the-painter-goblin-part-4-putting-it-all-together\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/exponentialdecay.co.uk\/blog\/"},{"@type":"ListItem","position":2,"name":"The Painter Goblin: Part 4, Putting it all together\u2026"}]},{"@type":"WebSite","@id":"https:\/\/exponentialdecay.co.uk\/blog\/#website","url":"https:\/\/exponentialdecay.co.uk\/blog\/","name":"ross spencer :: exponentialdecay.digipres :: blog","description":"Digital preservation analyst, researcher, and software developer","publisher":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/exponentialdecay.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/exponentialdecay.co.uk\/blog\/#\/schema\/person\/4cae0a954400f42b9c1b70c699837716","name":"Ross Spencer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","url":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","contentUrl":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png","width":2560,"height":2560,"caption":"Ross Spencer"},"logo":{"@id":"https:\/\/exponentialdecay.co.uk\/blog\/wp-content\/uploads\/2025\/06\/avatar-scaled.png"},"description":"Digital preservation domain expert and full-stack software developer.","sameAs":["http:\/\/www.exponentialdecay.co.uk\/blog","https:\/\/www.instagram.com\/b33tk33p3r\/","https:\/\/www.linkedin.com\/in\/ross-spencer-b6b9b758\/","https:\/\/x.com\/beet_keeper"],"url":"https:\/\/exponentialdecay.co.uk\/blog\/author\/exponentialdecay\/"}]}},"views":3278,"_links":{"self":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/977","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=977"}],"version-history":[{"count":10,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/977\/revisions"}],"predecessor-version":[{"id":2817,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/posts\/977\/revisions\/2817"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media\/983"}],"wp:attachment":[{"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=977"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=977"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/exponentialdecay.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}