{"id":2971526,"date":"2026-07-01T00:30:06","date_gmt":"2026-07-01T07:30:06","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2971526"},"modified":"2026-07-01T16:49:10","modified_gmt":"2026-07-01T23:49:10","slug":"ai-screenshot-stylizer-for-arcgis-cityengine-scenes","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes","title":{"rendered":"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI"},"author":360672,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23771,770712,615021],"tags":[25781,760632,42631,781169,756352],"industry":[],"product":[36781],"class_list":["post-2971526","blog","type-blog","status-publish","format-standard","hentry","category-3d-gis","category-geoai","category-aec","tag-3d","tag-arcgis-cityengine","tag-cityengine","tag-generative-ai","tag-urban-design","product-city-engine"],"acf":{"authors":[{"ID":340412,"user_firstname":"Matthias","user_lastname":"Matti","nickname":"Matthias Matti","user_nicename":"mmatti","display_name":"Matthias Matti","user_email":"mmatti@esri.com","user_url":"","user_registered":"2023-06-07 12:39:07","user_description":"Matthias Matti is a Software Engineer in the CityEngine team at the Esri R&amp;D Center in Zurich. He holds an MSc in Computer Science from ETH Zurich and combines his background in architecture with an interest in mathematics, geometry, and design.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/profile-1-465x465.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":360672,"user_firstname":"Jennifer","user_lastname":"Johnson","nickname":"Jen Johnson","user_nicename":"jenjohnson","display_name":"Jen Johnson","user_email":"jenjohnson@esri.com","user_url":"","user_registered":"2024-08-26 13:49:44","user_description":"Jen Johnson is a Product Engineer on the ArcGIS CityEngine team at the Esri R&amp;D Center in Zurich. Her background is in landscape architecture, urban planning, geodesign and sustainable design for passive development strategies. She has otherwise used her GIS knowledge to support humanitarian initiatives worldwide.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"short_description":"The Screenshot Stylizer uses Python together with generative AI to quickly explore visualization techniques of any CityEngine scene.","flexible_content":[{"acf_fc_layout":"content","content":"<p>Artificial Intelligence (AI) is changing how urban designers visualize ideas. With the\u00a0<a class=\"external-link\" href=\"https:\/\/doc.arcgis.com\/en\/cityengine\/latest\/python\/ce.htm\" rel=\"nofollow\">CityEngine Python API<\/a>, it becomes possible to turn a CityEngine scene into stylized perspective that conveys materiality, atmosphere, and design intent much earlier in the process.<\/p>\n<p>Architectural visualization helps transform abstract urban massings into imagery that can be evaluated at a human scale. This is especially valuable early in the design process, when key planning and urban design decisions are often made before the architecture is fully defined.<\/p>\n<p>Established visualization workflows remain important, but they can also be time-intensive, making them harder to use in rapid day-to-day iteration.<\/p>\n<p>The Stylizer app is a practical example of how CityEngine Python scripts can evolve into small, purpose-built tools. It uses CityEngine and Python together with generative AI to quickly explore visual ideas and it shows how a focused UI and a few supporting libraries can turn automation into a reusable workflow tool.<\/p>\n<p>This post builds on the broader ideas discussed in\u00a0<a class=\"external-link\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/aec\/urban-design-visualization-with-cityengine-and-generative-ai\" rel=\"nofollow\">Urban Design Visualization with CityEngine and Generative AI<\/a>.<\/p>\n"},{"acf_fc_layout":"content","content":"<h1 id=\"BlogpostText-UsingtheStylizerApp\">Using the Stylizer App<\/h1>\n<h2 id=\"BlogpostText-Opentheappandgetready\">Open the app and get ready<\/h2>\n<p>Before starting the workflow, make sure CityEngine 2026.0 is open.<\/p>\n<p>To run the Stylizer app, first download the example project that contains the code through\u00a0<code>Help -&gt; Download Tutorials and Examples -&gt; Example_Python_02_Custom_UI<\/code>. Then open\u00a0<code>scripts\/main.py<\/code>\u00a0in CityEngine and run it with\u00a0<code>Python -&gt; Run script<\/code>\u00a0or\u00a0<code>F9<\/code>.<\/p>\n<p>The Stylizer app opens in its own window, separate from the main CityEngine view. To stylize CityEngine screenshots, set up a\u00a0<a class=\"external-link\" href=\"https:\/\/aistudio.google.com\/apikey\" rel=\"nofollow\">Gemini API key<\/a>\u00a0with billing enabled, then enter it in the Stylizer app. With that you are ready to get started with the fun part.<\/p>\n<p>&nbsp;<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973212,"id":2973212,"title":"api-key-dialog","filename":"api-key-dialog.png","filesize":33302,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/api-key-dialog","alt":"","author":"360672","description":"","caption":"","name":"api-key-dialog","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:06:40","modified":"2026-06-25 18:06:40","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":451,"height":395,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","medium-width":298,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","medium_large-width":451,"medium_large-height":395,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","large-width":451,"large-height":395,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","1536x1536-width":451,"1536x1536-height":395,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","2048x2048-width":451,"2048x2048-height":395,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","card_image-width":451,"card_image-height":395,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/api-key-dialog.png","wide_image-width":451,"wide_image-height":395}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"blockquote","content":"<p>Note: If you want to explore your options first, the Stylizer app also lets you browse the\u00a0Compare\u00a0and\u00a0History\u00a0views immediately, even before setting up an API key.<\/p>\n"},{"acf_fc_layout":"content","content":"<h2 id=\"BlogpostText-Stylizeascenescreenshot\">Stylize a scene screenshot<\/h2>\n<p>The stylization workflow starts in the <code>Capture<\/code> view. There, you can capture the current CityEngine viewport and turn it into a stylized image by describing the look you want in plain text.<\/p>\n<p>Preset style prompts are already set up for you. You can use them as-is or refine them further.<\/p>\n<p>For best results, ask the model to preserve the original camera position and aspect ratio so the composition stays as close to the original screenshot as possible.<\/p>\n<p>The model list shows the models currently available in the app through the Gemini API.<\/p>\n<ol>\n<li>Open a CityEngine scene and position the camera.<\/li>\n<li>Enter a title for the capture.<\/li>\n<li>Choose a preset style prompt, or write your own.<\/li>\n<li>Select one of the available models.<\/li>\n<li>Click\u00a0<code>Capture Screenshot &amp; Style<\/code>.<\/li>\n<\/ol>\n"},{"acf_fc_layout":"image","image":{"ID":2973213,"id":2973213,"title":"capture","filename":"capture.png","filesize":80177,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/capture-41","alt":"","author":"360672","description":"","caption":"","name":"capture-41","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:06:42","modified":"2026-06-25 18:06:42","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1426,"height":1073,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","medium-width":347,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","medium_large-width":768,"medium_large-height":578,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","large-width":1426,"large-height":1073,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","1536x1536-width":1426,"1536x1536-height":1073,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","2048x2048-width":1426,"2048x2048-height":1073,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture-618x465.png","card_image-width":618,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/capture.png","wide_image-width":1426,"wide_image-height":1073}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h2 id=\"BlogpostText-Inspecttheresult\">Inspect the result<\/h2>\n<p>When the stylized image is ready, it opens in the\u00a0<code>Compare<\/code>\u00a0view. The original screenshot and the generated image are shown side by side. Use the slider to compare them. To inspect the result more closely, click the\u00a0<code>Expand Viewer<\/code>\u00a0icon in the top right. The generated image will not always match the source perfectly. The result depends heavily on the prompt, so some experimentation is usually needed.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973205,"id":2973205,"title":"compare-overview","filename":"compare-overview.png","filesize":1973605,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/compare-overview","alt":"","author":"360672","description":"","caption":"","name":"compare-overview","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 17:59:27","modified":"2026-06-25 17:59:27","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1552,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview.png","medium-width":323,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview.png","medium_large-width":768,"medium_large-height":621,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview.png","large-width":1336,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview-1536x1242.png","1536x1536-width":1536,"1536x1536-height":1242,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview.png","2048x2048-width":1920,"2048x2048-height":1552,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview-575x465.png","card_image-width":575,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-overview-1336x1080.png","wide_image-width":1336,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"image","image":{"ID":2973210,"id":2973210,"title":"CompareFinal","filename":"CompareFinal.gif","filesize":12648000,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal.gif","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/comparefinal","alt":"","author":"360672","description":"","caption":"","name":"comparefinal","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:06:34","modified":"2026-06-25 18:06:34","menu_order":0,"mime_type":"image\/gif","type":"image","subtype":"gif","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal-213x200.gif","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal.gif","medium-width":464,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal.gif","medium_large-width":768,"medium_large-height":432,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal.gif","large-width":1920,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal-1536x864.gif","1536x1536-width":1536,"1536x1536-height":864,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal.gif","2048x2048-width":1920,"2048x2048-height":1080,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal-826x465.gif","card_image-width":826,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/CompareFinal.gif","wide_image-width":1920,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Below the comparison view, a details section shows the capture metadata. The title is visible at a glance. Open the panel next to it to see the model and prompt used for generation. The title can be edited later. You can also delete the capture or download the result.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973211,"id":2973211,"title":"compare-item-details","filename":"compare-item-details.png","filesize":21580,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/compare-item-details","alt":"","author":"360672","description":"","caption":"","name":"compare-item-details","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:06:38","modified":"2026-06-25 18:06:38","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":651,"height":234,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","medium-width":464,"medium-height":167,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","medium_large-width":651,"medium_large-height":234,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","large-width":651,"large-height":234,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","1536x1536-width":651,"1536x1536-height":234,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","2048x2048-width":651,"2048x2048-height":234,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","card_image-width":651,"card_image-height":234,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-item-details.png","wide_image-width":651,"wide_image-height":234}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Previous visualizations remain available in the filmstrip and in the\u00a0<code>History<\/code>\u00a0tab, so you can return to earlier results at any time.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973204,"id":2973204,"title":"history","filename":"history.png","filesize":2459453,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/history-2","alt":"","author":"360672","description":"","caption":"","name":"history-2","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 17:59:18","modified":"2026-06-25 17:59:18","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1552,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history.png","medium-width":323,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history.png","medium_large-width":768,"medium_large-height":621,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history.png","large-width":1336,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history-1536x1242.png","1536x1536-width":1536,"1536x1536-height":1242,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history.png","2048x2048-width":1920,"2048x2048-height":1552,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history-575x465.png","card_image-width":575,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/history-1336x1080.png","wide_image-width":1336,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h1 id=\"BlogpostText-Whathappensbehindthescenes\">What happens behind the scenes<\/h1>\n<p>Behind the scenes, Python starts a local\u00a0<a class=\"external-link\" href=\"https:\/\/fastapi.tiangolo.com\/\" rel=\"nofollow\">FastAPI<\/a>\u00a0server and opens the interface in its own\u00a0<a class=\"external-link\" href=\"https:\/\/pywebview.flowrl.com\/guide\/usage.html\" rel=\"nofollow\">pywebview<\/a>\u00a0window:<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"url = f\"http:\/\/{host}:{port}\/\"\r\nwebview.create_window(\r\n\ttitle=\"Screenshot Stylizer for CityEngine\",\r\n\turl=url,\r\n\twidth=1920,\r\n\theight=1440,\r\n\tresizable=True,\r\n)\r\nwebview.start()","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>The API key itself is not written into the project files. The app uses Python&#8217;s\u00a0<a class=\"external-link\" href=\"https:\/\/keyring.readthedocs.io\/en\/latest\/\" rel=\"nofollow\">keyring<\/a>\u00a0library, which stores the key in the operating system&#8217;s credential store.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"normalized_api_key = str(api_key).strip()\r\nservice_name = \"screenshotStylizerForCE\"\r\nusername = \"google_api_key\"\r\n\r\nkeyring.set_password(service_name, username, normalized_api_key)\r\n\r\nsaved_key = keyring.get_password(service_name, username)","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>When you click\u00a0<code>Capture Screenshot &amp; Style<\/code>, the app calls the CityEngine Python API directly. It waits until the UI is idle, reads the available 3D views with\u00a0<a class=\"external-link\" href=\"https:\/\/doc.arcgis.com\/en\/cityengine\/latest\/python\/ce.htm\" rel=\"nofollow\"><code>ce.get3DViews()<\/code><\/a>, and captures the active viewport as an image by using the\u00a0<a class=\"external-link\" href=\"https:\/\/doc.arcgis.com\/en\/cityengine\/latest\/python\/view-3d.htm#ESRI_SECTION1_7B9F16937C4C4A2096D080F1C0F8A3B3\" rel=\"nofollow\">View3D snapshot API<\/a>. That image becomes the reference for the stylization step.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"ce = cityengine.CE()\r\n\r\nce.waitForUIIdle()\r\nviews = ce.get3DViews()\r\nviewport = views[0]\r\n\r\nsnapshot_file = \"ce-screenshot.png\"\r\nviewport.snapshot(snapshot_file, 1920, 1280)","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<p>The stylization step uses the\u00a0<a class=\"external-link\" href=\"https:\/\/googleapis.github.io\/python-genai\/\" rel=\"nofollow\">Google Gen AI SDK for Python<\/a>. In the app, the client is created from the saved API key. If the request succeeds, the generated image is stored together with the original screenshot and the capture metadata.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"client = genai.Client(api_key=api_key)\r\nsnapshot_file = \"ce-screenshot.png\"\r\nwith Image.open(snapshot_file) as image:\r\n\tresponse = client.models.generate_content(\r\n\t\tmodel=model_name,\r\n\t\tcontents=[prompt_text, image],\r\n\t)","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false},{"acf_fc_layout":"content","content":"<h3>Federal City Example, Screenshot Stylizer Results<\/h3>\n<p><strong>Before:<\/strong><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973222,"id":2973222,"title":"Example_Federal_City Watercolor-cityengine","filename":"Example_Federal_City-Watercolor-cityengine.png","filesize":2417462,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/example_federal_city-watercolor-cityengine","alt":"","author":"360672","description":"","caption":"","name":"example_federal_city-watercolor-cityengine","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:20:54","modified":"2026-06-25 18:20:54","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1280,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine.png","medium-width":392,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine.png","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine.png","large-width":1620,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine-1536x1024.png","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine.png","2048x2048-width":1920,"2048x2048-height":1280,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine-698x465.png","card_image-width":698,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-cityengine-1620x1080.png","wide_image-width":1620,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>After:<\/strong><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973223,"id":2973223,"title":"Example_Federal_City Watercolor-stylized","filename":"Example_Federal_City-Watercolor-stylized.jpg","filesize":950234,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/example_federal_city-watercolor-stylized","alt":"","author":"360672","description":"","caption":"","name":"example_federal_city-watercolor-stylized","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:21:03","modified":"2026-06-25 18:21:03","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1264,"height":843,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized-213x200.jpg","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","medium-width":391,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","large-width":1264,"large-height":843,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","1536x1536-width":1264,"1536x1536-height":843,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","2048x2048-width":1264,"2048x2048-height":843,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized-697x465.jpg","card_image-width":697,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Federal_City-Watercolor-stylized.jpg","wide_image-width":1264,"wide_image-height":843}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<h3>Redlands Redevelopment Example, Screenshot Stylizer Results<\/h3>\n<p><strong>Before:<\/strong><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973224,"id":2973224,"title":"Example_Redlands_Redevelopment Neon Night-cityengine","filename":"Example_Redlands_Redevelopment-Neon-Night-cityengine.png","filesize":3612552,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/example_redlands_redevelopment-neon-night-cityengine","alt":"","author":"360672","description":"","caption":"","name":"example_redlands_redevelopment-neon-night-cityengine","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:21:11","modified":"2026-06-25 18:21:11","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1920,"height":1280,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine.png","medium-width":392,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine.png","medium_large-width":768,"medium_large-height":512,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine.png","large-width":1620,"large-height":1080,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine-1536x1024.png","1536x1536-width":1536,"1536x1536-height":1024,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine.png","2048x2048-width":1920,"2048x2048-height":1280,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine-698x465.png","card_image-width":698,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-cityengine-1620x1080.png","wide_image-width":1620,"wide_image-height":1080}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>After:<\/strong><\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2973226,"id":2973226,"title":"Example_Redlands_Redevelopment Neon Night-stylized","filename":"Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","filesize":879315,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\/example_redlands_redevelopment-neon-night-stylized","alt":"","author":"360672","description":"","caption":"","name":"example_redlands_redevelopment-neon-night-stylized","status":"inherit","uploaded_to":2971526,"date":"2026-06-25 18:21:20","modified":"2026-06-25 18:21:20","menu_order":0,"mime_type":"image\/jpeg","type":"image","subtype":"jpeg","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":1248,"height":848,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized-213x200.jpg","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","medium-width":384,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","medium_large-width":768,"medium_large-height":522,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","large-width":1248,"large-height":848,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","1536x1536-width":1248,"1536x1536-height":848,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","2048x2048-width":1248,"2048x2048-height":848,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized-684x465.jpg","card_image-width":684,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/Example_Redlands_Redevelopment-Neon-Night-stylized.jpg","wide_image-width":1248,"wide_image-height":848}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"blockquote","content":"<p>Note: If you wish to access the example projects, open ArcGIS CityEngine and click Help &gt; Download Tutorials and Examples in the main menu. After choosing an example, the project is automatically downloaded and added to your CityEngine workspace. The corresponding scenes are inside the scenes folder within the downloaded example project. However, you can use the Screenshot Stylizer with any developed scene you create! <\/p>\n"}],"related_articles":"","show_article_image":true,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/compare-expanded.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/ManyCompare-3.gif"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A New Python AI Stylizer for CityEngine Scene Screenshots<\/title>\n<meta name=\"description\" content=\"The Screenshot Stylizer uses Python and generative AI to quickly explore different visualization techniques for any CityEngine scene.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI\" \/>\n<meta property=\"og:description\" content=\"The Screenshot Stylizer uses Python and generative AI to quickly explore different visualization techniques for any CityEngine scene.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-01T23:49:10+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\"},\"author\":{\"name\":\"Jen Johnson\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e\"},\"headline\":\"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI\",\"datePublished\":\"2026-07-01T07:30:06+00:00\",\"dateModified\":\"2026-07-01T23:49:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\"},\"wordCount\":12,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"3D\",\"arcgis cityengine\",\"CityEngine\",\"Generative AI\",\"Urban Design\"],\"articleSection\":[\"3D Visualization &amp; Analytics\",\"AI\",\"Architecture, Engineering, and Construction\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\",\"name\":\"A New Python AI Stylizer for CityEngine Scene Screenshots\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2026-07-01T07:30:06+00:00\",\"dateModified\":\"2026-07-01T23:49:10+00:00\",\"description\":\"The Screenshot Stylizer uses Python and generative AI to quickly explore different visualization techniques for any CityEngine scene.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e\",\"name\":\"Jen Johnson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg\",\"caption\":\"Jen Johnson\"},\"description\":\"Jen Johnson is a Product Engineer on the ArcGIS CityEngine team at the Esri R&amp;D Center in Zurich. Her background is in landscape architecture, urban planning, geodesign and sustainable design for passive development strategies. She has otherwise used her GIS knowledge to support humanitarian initiatives worldwide.\",\"knowsLanguage\":[\"English\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/jenjohnson\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A New Python AI Stylizer for CityEngine Scene Screenshots","description":"The Screenshot Stylizer uses Python and generative AI to quickly explore different visualization techniques for any CityEngine scene.","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:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes","og_locale":"en_US","og_type":"article","og_title":"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI","og_description":"The Screenshot Stylizer uses Python and generative AI to quickly explore different visualization techniques for any CityEngine scene.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2026-07-01T23:49:10+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes"},"author":{"name":"Jen Johnson","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e"},"headline":"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI","datePublished":"2026-07-01T07:30:06+00:00","dateModified":"2026-07-01T23:49:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes"},"wordCount":12,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["3D","arcgis cityengine","CityEngine","Generative AI","Urban Design"],"articleSection":["3D Visualization &amp; Analytics","AI","Architecture, Engineering, and Construction"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes","name":"A New Python AI Stylizer for CityEngine Scene Screenshots","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2026-07-01T07:30:06+00:00","dateModified":"2026-07-01T23:49:10+00:00","description":"The Screenshot Stylizer uses Python and generative AI to quickly explore different visualization techniques for any CityEngine scene.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Stylizing ArcGIS CityEngine Scenes with a custom Python application using Generative AI"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/f67d314a51e642c08cc0b93efa68d60e","name":"Jen Johnson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2025\/01\/IMG_6204-2-213x200.jpg","caption":"Jen Johnson"},"description":"Jen Johnson is a Product Engineer on the ArcGIS CityEngine team at the Esri R&amp;D Center in Zurich. Her background is in landscape architecture, urban planning, geodesign and sustainable design for passive development strategies. She has otherwise used her GIS knowledge to support humanitarian initiatives worldwide.","knowsLanguage":["English"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/jenjohnson"}]}},"text_date":"July 1, 2026","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/city-engine\/3d-gis\/ai-screenshot-stylizer-for-arcgis-cityengine-scenes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/06\/ManyCompare-3.gif","primary_product":"ArcGIS CityEngine","tag_data":[{"term_id":25781,"name":"3D","slug":"3d","term_group":0,"term_taxonomy_id":25781,"taxonomy":"post_tag","description":"","parent":0,"count":358,"filter":"raw"},{"term_id":760632,"name":"arcgis cityengine","slug":"arcgis-cityengine","term_group":0,"term_taxonomy_id":760632,"taxonomy":"post_tag","description":"","parent":0,"count":8,"filter":"raw"},{"term_id":42631,"name":"CityEngine","slug":"cityengine","term_group":0,"term_taxonomy_id":42631,"taxonomy":"post_tag","description":"","parent":0,"count":27,"filter":"raw"},{"term_id":781169,"name":"Generative AI","slug":"generative-ai","term_group":0,"term_taxonomy_id":781169,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":756352,"name":"Urban Design","slug":"urban-design","term_group":0,"term_taxonomy_id":756352,"taxonomy":"post_tag","description":"","parent":0,"count":21,"filter":"raw"}],"category_data":[{"term_id":23771,"name":"3D Visualization &amp; Analytics","slug":"3d-gis","term_group":0,"term_taxonomy_id":23771,"taxonomy":"category","description":"","parent":0,"count":721,"filter":"raw"},{"term_id":770712,"name":"AI","slug":"geoai","term_group":0,"term_taxonomy_id":770712,"taxonomy":"category","description":"","parent":0,"count":76,"filter":"raw"},{"term_id":615021,"name":"Architecture, Engineering, and Construction","slug":"aec","term_group":0,"term_taxonomy_id":615021,"taxonomy":"category","description":"","parent":0,"count":146,"filter":"raw"}],"product_data":[{"term_id":36781,"name":"ArcGIS CityEngine","slug":"city-engine","term_group":0,"term_taxonomy_id":36781,"taxonomy":"product","description":"","parent":36591,"count":87,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=city-engine","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2971526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/360672"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2971526"}],"version-history":[{"count":14,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2971526\/revisions"}],"predecessor-version":[{"id":2974565,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2971526\/revisions\/2974565"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2971526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2971526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2971526"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2971526"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2971526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}