1<!DOCTYPE html> 2<html lang="en-US"> 3<head> 4<meta charset="UTF-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1"> 6 7 8 9<title>Playing with image generative AI â Raw material</title> 10<meta name="robots" content="max-image-preview:large"> 11 <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> 12 <link rel="dns-prefetch" href="//fonts.googleapis.com"> 13 14 15 16<link rel="stylesheet" id="bootstrap-css" href="https://www.msec.it/blog/wp-content/themes/astrid/css/bootstrap/bootstrap.min.css" type="text/css" media="all"> 17<link rel="stylesheet" id="wp-block-library-css" href="https://www.msec.it/blog/wp-includes/css/dist/block-library/style.min.css" type="text/css" media="all"> 18<style id="classic-theme-styles-inline-css" type="text/css"> 19/*! This file is auto-generated */ 20.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} 21</style> 22<style id="global-styles-inline-css" type="text/css"> 23:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);
23--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
23.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} 24:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} 25:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} 26:root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} 27</style> 28<link rel="stylesheet" id="astrid-style-css" href="https://www.msec.it/blog/wp-content/themes/astrid/style.css" type="text/css" media="all"> 29<style id="astrid-style-inline-css" type="text/css"> 30.site-header {position: fixed;} 31.woocommerce .woocommerce-message:before,.woocommerce #payment #place_order,.woocommerce-page #payment #place_order,.woocommerce .cart .button, .woocommerce .cart input.button,.woocommerce-cart .wc-proceed-to-checkout a.checkout-button,.woocommerce #review_form #respond .form-submit input,.woocommerce a.button,.woocommerce div.product form.cart .button,.woocommerce .star-rating,.page-header .page-title .fa,.site-footer a:hover,.footer-info a:hover,.footer-widgets a:hover,.testimonial-title a:hover,.employee-title a:hover,.fact .fa,.service-title a:hover,.widget-area .widget a:hover,.entry-meta a:hover,.entry-footer a:hover,.entry-title a:hover,.comment-navigation a:hover,.posts-navigation a:hover,.post-navigation a:hover,.main-navigation a:hover,.main-navigation li.focus > a,a,a:hover,button,.button,input[type="button"],input[type="reset"],input[type="submit"] { color:#9b8400} 32.social-menu-widget a,.woocommerce span.onsale,.woocommerce #payment #place_order:hover, .woocommerce-page #payment #place_order:hover,.woocommerce .cart .button:hover, .woocommerce .cart input.button:hover,.woocommerce-cart .wc-proceed-to-checkout a.checkout-button:hover,.woocommerce #review_form #respond .form-submit input
32:hover,.woocommerce div.product form.cart .button:hover,.woocommerce a.button:hover,.preloader-inner ul li,.progress-animate,button:hover,.button:hover,input[type="button"]:hover,input[type="reset"]:hover,input[type="submit"]:hover { background-color:#9b8400} 33.woocommerce .woocommerce-message,.woocommerce #payment #place_order,.woocommerce-page #payment #place_order,.woocommerce .cart .button, .woocommerce .cart input.button,.woocommerce-cart .wc-proceed-to-checkout a.checkout-button,.woocommerce #review_form #respond .form-submit input,.woocommerce a.button,.woocommerce div.product form.cart .button,.main-navigation li a::after,.main-navigation li a::before,button,.button,input[type="button"],input[type="reset"],input[type="submit"] { border-color:#9b8400} 34.site-title a,.site-title a:hover { color:#ffffff} 35.site-description { color:#BDBDBD} 36.site-header,.site-header.header-scrolled { background-color:rgba(32,37,41,0.9)} 37@media only screen and (max-width: 1024px) { .site-header.has-header,.site-header.has-video,.site-header.has-single,.site-header.has-shortcode { background-color:rgba(32,37,41,0.9)} } 38body, .widget-area .widget, .widget-area .widget a { color:#656D6D} 39.footer-widgets, .site-footer, .footer-info { background-color:#202529} 40body {font-family: 'Open Sans', sans-serif;}
41h1, h2, h3, h4, h5, h6, .fact .fact-number, .fact .fact-name, .site-title {font-family: 'Josefin Sans', sans-serif;} 42.site-title { font-size:36px; } 43.site-description { font-size:14px; } 44h1 { font-size:36px; } 45h2 { font-size:30px; } 46h3 { font-size:24px; } 47h4 { font-size:16px; } 48h5 { font-size:14px; } 49h6 { font-size:12px; } 50body { font-size:14px; } 51 52</style> 53<link rel="stylesheet" id="astrid-body-fonts-css" href="//fonts.googleapis.com/css?family=Open+Sans%3A300%2C300italic%2C600%2C600italic&ver=6.8.1" type="text/css" media="all"> 54<link rel="stylesheet" id="astrid-headings-fonts-css" href="//fonts.googleapis.com/css?family=Josefin+Sans%3A300italic%2C300&ver=6.8.1" type="text/css" media="all"> 55<link rel="stylesheet" id="font-awesome-css" href="https://www.msec.it/blog/wp-content/themes/astrid/fonts/font-awesome.min.css" type="text/css" media="all"> 56<link rel="stylesheet" id="enlighterjs-css" href="https://www.msec.it/blog/wp-content/plugins/enlighter/cache/enlighterjs.min.css" type="text/css" media="all">
57<script type="text/javascript" src="https://www.msec.it/blog/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
vendor: 1 bytes, line 57
57
58<script type="text/javascript" src="https://www.msec.it/blog/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
58 59 60 61 62 63 64 65<style type="text/css" id="custom-background-css"> 66body.custom-background { background-color: #ffffff; } 67</style> 68 <style type="text/css" id="wp-custom-css"> 69 /* .site-info.container { 70 display: none; 71} */ 72 73.wp-custom-header-video-button { 74 display: none; 75} 76 77@media only screen and (min-width: 1024px) { 78 div#wp-custom-header:before { 79 content: 'A master in the art of living \a draws no sharp distinction \a between his work and his play, \a his labour and his leisure, \a his mind and his body, \a his education and his recreation. \a He hardly knows which is which. \a He simply pursues his vision of excellence \a through whatever he is doing \a and leaves others to determine \a whether he is working or playing. \a To himself he always seems to be doing both. \a Enough for him that he does it well. \a \a Lawrence Pearsall Jacks, 1932'; 80 position: absolute; 81 top: 50%; 82 left: 50%; 83 font-size: 1vw; 84 color: lightgray; 85 transform: translate(-50%, -50%); 86 margin-top: 1vw; 87 margin-left: 20vw; 88 white-space: pre; 89 background-color: rgba(0,0,0,0.7); 90 padding: 2vw; 91 font-style: italic; 92 text-align: right; 93} 94} 95 96.hentry { 97 border: none; 98} 99 100.widget-area .widget { 101 border: none; 102} 103 104.site-content > .container { 105 border: none; 106} 107 108.comment-respond { 109 border: none; 110} </style> 111 </head> 112 113<body class="wp-singular post-template-default single single-post postid-1134 single-format-standard custom-background wp-theme-astrid"> 114 115<div class="preloader"> 116<div class="preloader-inner"> 117 <ul><li><li><li><li><li><li></ul> 118</div> 119</div> 120 121<div id="page" class="site"> 122 <a class="skip-link screen-reader-text" href="#content">Skip to content</a> 123 124 <header id="masthead" class="site-header " role="banner"> 125 <div class="container"> 126 <div class="site-branding col-md-4 col-sm-6 col-xs-12"> 127 <p class="site-title"><a href="https://www.msec.it/blog/" rel="home">Raw material</a></p><p class="site-description">Software development ideas, not refined.</p> </div> 128 <div class="btn-menu col-md-8 col-sm-6 col-xs-12"><i class="fa fa-navicon"></i></div> 129 <nav id="mainnav" class="main-navigation col-md-8 col-sm-6 col-xs-12" role="navigation"> 130 <div class="menu-other-pages-container"><ul id="primary-menu" class="menu"><li id="menu-item-954" class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-954"><a href="https://www.msec.it/blog/posts/">Blog posts</a></li> 131<li id="menu-item-1122" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1122"><a href="https://www.msec.it/blog/duel-times/">Duel Times</a></li> 132</ul></div> </nav> 133 </div> 134 </header> 135 136 <div class="header-clone"></div> 137 138 139 140 141 <div id="content" class="site-content"> 142 <div class="container"> 143 <div id="primary" class="content-area"> 144 <main id="main" class="site-main" role="main"> 145 146 147<article id="post-1134" class="post-1134 post type-post status-publish format-standard hentry category-projects category-dev clearfix"> 148 149 150 <header class="entry-header"> 151 <h1 class="entry-title">Playing with image generative AI</h1> <div class="entry-meta"> 152 <span class="posted-on"><i class="fa fa-calendar"></i><a href="https://www.msec.it/blog/playing-with-image-generative-ai/" rel="bookmark"><time class="entry-date published" datetime="2025-05-04T21:09:56+02:00">May 4, 2025</time><time class="updated" datetime="2025-05-04T21:59:53+02:00">May 4, 2025</time></a></span><span class="byline"> <i class="fa fa-user"></i><span class="author vcard"><a class="url fn n" href="https://www.msec.it/blog/author/admin/">Emanuele</a></span></span><span class="cat-links"><i class="fa fa-folder-o"></i><a href="https://www.msec.it/blog/category/projects/" rel="category tag">Projects</a>, <a href="https://www.msec.it/blog/category/dev/" rel="category tag">Software development</a></span> </div> 153 </header> 154 155 156 <div class="entry-content"> 157 158<p>I wanted to try out gpt-image-1, OpenAIâs new model for image generation. Itâs rare that I need to generate images for a project (sometimes for fun with my kids), and while the free ChatGPT plan feels too limited for occasional image work, I donât need a full monthly subscription either.<br>I also looked online for simple tools that directly use the gpt-image-1 API and support all its features, but I couldnât find anything that fit my needs.</p> 159 160 161 162<p>When you have to produce multiple images with consistent characters and style, a chat-based UI can feel a bit restrictive. So I decided to build a small tool that talks directly to the OpenAI image-generation API. The interface is a very simple node-based editor that lets you link images togetherâso you can reliably reuse characters or environments across multiple prompts. Iâve also added inpainting support, even though gpt-image-1 doesnât always honor an inpainting mask perfectly.</p> 163 164 165 166<figure class="wp-block-image size-full is-style-default"><a href="https://www.msec.it/blog/wp-content/uploads/2025/05/example-light.jpeg"><img fetchpriority="high" decoding="async" width="1740" height="1265" src="https://www.msec.it/blog/wp-content/uploads/2025/05/example-light.jpeg" alt="" class="wp-image-1138" title="Example screenshot" srcset="https://www.msec.it/blog/wp-content/uploads/2025/05/example-light.jpeg 1740w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-300x218.jpeg 300w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-1024x744.jpeg 1024
166w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-768x558.jpeg 768w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-1536x1117.jpeg 1536w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-700x509.jpeg 700w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-520x378.jpeg 520w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-360x262.jpeg 360w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-250x182.jpeg 250w,https://www.msec.it/blog/wp-content/uploads/2025/05/example-light-100x73.jpeg 100w" sizes="(max-width: 1740px) 100vw, 1740px"></a></figure> 167 168 169 170<p>If youâre curious, the source code on the <a href="https://github.com/colomboe/image-workbench" data-type="link" data-id="https://github.com/colomboe/image-workbench">github repo</a>, and you can try it out here: <a href="https://msec.it/image-workbench">https://msec.it/image-workbench</a></p> 171 172 173 174<p>A few things youâll need to know before getting started:</p> 175 176 177 178<ul class="wp-block-list"> 179<li>The tool is still pretty rough around the edgesâthere are a lot of UI/UX improvements Iâd like to add.</li> 180 181 182 183<li>You should provide your own OpenAI API key enabled for the gpt-image-1 model (<em>click the key icon in the tool to set it, it will be stored locally in your browserâs local storage</em>).</li> 184 185 186 187<li>Because the tool runs entirely in your browser (itâs serverless), you have to click âNew projectâ first and choose an empty local folder where it will save your files and images.</li> 188</ul> 189 190 191 192<p>Fell free to test and use it if you think it can be useful for you. And let me know if you have any feedback. Anyway, consider that this is just a little side-project done in my very very limited free time, so Iâm not able to promise you any kind of support of future development.</p> 193 194 195 196<p>If you want to reach me out, you can find me on <a href="https://x.com/colomboe" data-type="link" data-id="https://x.com/colomboe">X</a>.</p> 197 198 199 200<p></p> 201 </div> 202 203 204 <footer class="entry-footer"> 205 </footer> 206 </article> 207 208 <nav class="navigation post-navigation" aria-label="Posts"> 209 <h2 class="screen-reader-text">Post navigation</h2> 210 <div class="nav-links"><div class="nav-previous"><a href="https://www.msec.it/blog/duel-times-finally-published/" rel="prev">Duel Times is finally published</a></div></div> 211 </nav> 212 </main> 213 </div> 214 215 216<aside id="secondary" class="widget-area" role="complementary"> 217 218 <aside id="recent-posts-6" class="widget widget_recent_entries"> 219 <h4 class="widget-title">Recently</h4> 220 <ul> 221 <li> 222 <a href="https://www.msec.it/blog/playing-with-image-generative-ai/" aria-current="page">Playing with image generative AI</a> 223 </li> 224 <li> 225 <a href="https://www.msec.it/blog/duel-times-finally-published/">Duel Times is finally published</a> 226 </li> 227 <li> 228 <a href="https://www.msec.it/blog/comprehension-like-syntax-in-kotlin/">Comprehension-like syntax in Kotlin</a> 229 </li> 230 <li> 231 <a href="https://www.msec.it/blog/introducing-kio/">Introducing KIO</a> 232 </li> 233 <li> 234 <a href="https://www.msec.it/blog/effect-polymorphism-with-arrow-fx/">Effect polymorphism with Arrow FX</a> 235 </li> 236 </ul> 237 238 </aside></aside> 239 240 </div> 241 </div> 242 243 <div class="footer-wrapper"> 244 245 246 <footer id="colophon" class="site-footer" role="contentinfo"> 247 <div class="site-info container"> 248 <nav id="footernav" class="footer-navigation" role="navigation"> 249 <div id="footer-menu" class="menu"><ul> 250<li class="page_item page-item-865 current_page_parent"><a href="https://www.msec.it/blog/posts/">Blog posts</a></li> 251<li class="page_item page-item-1114"><a href="https://www.msec.it/blog/duel-times/">Duel Times</a></li> 252<li class="page_item page-item-11 page_item_has_children"><a href="https://www.msec.it/blog/dukto/">Dukto R6</a></li> 253<li class="page_item page-item-831"><a href="https://www.msec.it/blog/">Welcome</a></li> 254</ul></div> 255 </nav> 256 <div class="site-copyright"> 257 Theme: <a href="http://athemes.com/theme/astrid" rel="nofollow">Astrid</a> by aThemes. </div> 258 </div> 259 </footer> 260 </div> 261 262
262<script async defer src="https://scripts.withcabin.com/hello.js"></script>
262 263 264</div> 265
266<script type="speculationrules"> 267{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"\/*"},{"not":{"href_matches":["\/wp-*.php","\/wp-admin\/*","\/wp-content\/uploads\/*","\/wp-content\/*","\/wp-content\/plugins\/*","\/wp-content\/themes\/astrid\/*","\/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]} 268</script>
vendor: 1 bytes, line 268
268
269<script type="text/javascript" src="https://www.msec.it/blog/wp-content/themes/astrid/js/main.js" id="astrid-main-js"></script>
vendor: 1 bytes, line 269
269
270<script type="text/javascript" src="https://www.msec.it/blog/wp-content/themes/astrid/js/scripts.min.js" id="astrid-scripts-js"></script>
270 271
272<script type="text/javascript" src="https://www.msec.it/blog/wp-content/plugins/enlighter/cache/enlighterjs.min.js" id="enlighterjs-js"></script>
vendor: 1 bytes, line 272
272
273<script type="text/javascript" id="enlighterjs-js-after"> 274/* <![CDATA[ */ 275!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":2,"ampersandCleanup":true,"linehover":true,"rawcodeDbclick":false,"textOverflow":"break","linenumbers":false,"theme":"enlighter","language":"kotlin","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console); 276/* ]]> */ 277</script>
277 278 279</body> 280</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.