{"id":2978212,"date":"2026-07-28T09:00:20","date_gmt":"2026-07-28T16:00:20","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2978212"},"modified":"2026-07-27T12:05:55","modified_gmt":"2026-07-27T19:05:55","slug":"custom-python-raster-functions-arcgis-enterprise-kubernetes","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes","title":{"rendered":"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes"},"author":108651,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[738191,22931,22771],"tags":[42301,759712,24341,537362],"industry":[],"product":[36571,36951],"class_list":["post-2978212","blog","type-blog","status-publish","format-standard","hentry","category-developers","category-imagery","category-natural-resources","tag-arcgis-enterprise","tag-arcgis-enterprise-on-kubernetes","tag-python","tag-raster-function","product-arcgis-enterprise","product-image-server"],"acf":{"short_description":"Extending raster analysis with custom python raster functions in ArcGIS Enterprise on Kubernetes. ","flexible_content":[{"acf_fc_layout":"content","content":"<p>With <a href=\"https:\/\/doc.esri.com\/en\/arcgis-enterprise-k8s\/latest\/analyze\/custom-python-raster-function.html\" target=\"_blank\" rel=\"noopener\"><strong>Custom Python Raster Functions<\/strong> in <strong>ArcGIS Enterprise on Kubernetes<\/strong><\/a>, organizations can integrate their own Python-based raster processing directly into ArcGIS raster analytics workflows. Rather than moving data outside the platform or maintaining separate processing pipelines, developers can package custom raster functions and use them alongside Esri-provided <a href=\"https:\/\/doc.esri.com\/en\/arcgis-enterprise-k8s\/latest\/analyze\/raster-function-editor-for-map-viewer.html\" target=\"_blank\" rel=\"noopener\">raster functions<\/a>.<\/p>\n<p>Organizations working with imagery and raster analytics often encounter specialized processing requirements that go beyond the capabilities of standard raster functions. Whether you&#8217;re implementing a proprietary scientific algorithm, an industry-specific workflow, or a custom machine learning model, flexibility is essential.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Why use Custom Python Raster Functions?<\/strong><\/p>\n<p>ArcGIS provides more than 150 built-in raster functions covering image enhancement, spectral analysis, terrain analysis, multidimensional processing, change detection, and much more. While these functions address many common workflows, every organization has unique analytical needs.<\/p>\n<p>Custom Python Raster Functions allow you to:<\/p>\n<ul>\n<li>Implement proprietary or domain-specific algorithms.<\/li>\n<li>Reuse existing Python raster processing code.<\/li>\n<li>Standardize custom analysis across your organization.<\/li>\n<li>Integrate custom processing into raster function chains and Raster Function Templates.<\/li>\n<li>Scale processing using Raster Analytics in ArcGIS Enterprise on Kubernetes.<\/li>\n<\/ul>\n<p>Rather than treating custom code as a separate processing step, your algorithms become first-class citizens within the ArcGIS imagery workflow.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>What Makes This Feature Exciting?<\/strong><\/p>\n<p>One of the biggest advantages is that users no longer need to execute standalone Python scripts outside of ArcGIS. Once registered, a custom raster function behaves similarly to built-in raster functions and can be incorporated into existing imagery workflows.<\/p>\n<p>This means your organization can:<\/p>\n<ul>\n<li>Build once and reuse across projects and teams.<\/li>\n<li>Share analytical workflows across teams.<\/li>\n<li>Execute custom processing using the distributed Raster Analytics infrastructure.<\/li>\n<li>Maintain consistent processing across projects.<\/li>\n<\/ul>\n<p>For organizations already leveraging ArcGIS Enterprise on Kubernetes, this provides a straightforward way to extend the platform without modifying core system components.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Packaging Your Custom Function<\/strong><\/p>\n<p>A custom raster function package is intentionally simple.<\/p>\n<p>Each deployment package contains:<\/p>\n<ul>\n<li>A Python script (.py) containing your raster processing logic.<\/li>\n<li>A Raster Function Template (.rft.xml) describing how ArcGIS should invoke the function.<\/li>\n<li>A ZIP package containing the required directory structure.<\/li>\n<\/ul>\n<p>ArcGIS defines required naming conventions and directory requirements to ensure the platform can correctly locate and execute your custom function after deployment.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Register Once, Use Everywhere<\/strong><\/p>\n<p>Beginning with ArcGIS Enterprise 11.5, administrators can register custom Python raster functions through the Administrator API.<\/p>\n<p>After registration:<\/p>\n<ul>\n<li>The function becomes available as a Portal item.<\/li>\n<li>It can be discovered by users.<\/li>\n<li>It can be incorporated into Raster Function Templates.<\/li>\n<li>It can be used in raster analysis workflows just like built-in raster functions.<\/li>\n<\/ul>\n<p>This centralized deployment model makes it much easier to distribute custom analytical capabilities across an enterprise environment.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Example: Tree Crown Health<\/strong><\/p>\n<p>To demonstrate the workflow, let&#8217;s look at an example from the <strong>U.S. Forest Service (USFS)<\/strong>. In this example, a custom Python raster function is used to generate <strong>tree crown health maps<\/strong> from aerial imagery.<\/p>\n<p>This workflow illustrates how organizations can package their own image analysis algorithms and execute them at scale using ArcGIS Enterprise on Kubernetes.<\/p>\n<p>The following example demonstrates how a custom Python raster function can be deployed and executed using Raster Analytics.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2978216,"id":2978216,"title":"k8s_graphic","filename":"k8s_graphic.png","filesize":432717,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\/k8s_graphic","alt":"Tree crown growth US Forest Service","author":"108651","description":"","caption":"Credit for graphic:\nMonahan WB, Arnspiger CE, Bhatt P, An Z, Krist FJ, Liu T, et al. (2022) A spectral three-dimensional color space model of tree crown health. PLoS ONE 17(10): e0272360. https:\/\/doi.org\/10.1371\/journal.pone.0272360","name":"k8s_graphic","status":"inherit","uploaded_to":2978212,"date":"2026-07-24 19:50:23","modified":"2026-07-24 21:47:59","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":508,"height":514,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","medium-width":258,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","medium_large-width":508,"medium_large-height":514,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","large-width":508,"large-height":514,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","1536x1536-width":508,"1536x1536-height":514,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","2048x2048-width":508,"2048x2048-height":514,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic-460x465.png","card_image-width":460,"card_image-height":465,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2026\/07\/k8s_graphic.png","wide_image-width":508,"wide_image-height":514}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>The Challenge<\/strong><\/p>\n<p>Tree health assessment often relies on specialized algorithms developed by organizations or research groups. While these algorithms can be implemented as Python raster functions, deploying and managing them across an enterprise environment\u2014particularly on Kubernetes\u2014has traditionally required significant manual effort.<\/p>\n<p>With the new <strong>Custom Python Raster Function<\/strong> capability, administrators can register these algorithms once and make them available throughout the organization.<\/p>\n<p><strong>Preparing the Custom Raster Function<\/strong><\/p>\n<p>A custom Python raster function consists of two primary components:<\/p>\n<ul>\n<li><strong>Raster Function Template (.rft.xml)<\/strong> that defines the raster function and its parameters.<\/li>\n<li><strong>Python script (.py)<\/strong> that implements the image processing algorithm.<\/li>\n<\/ul>\n<p>For the USFS example, these files are packaged together into a single ZIP archive that will be uploaded during registration.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2978269,"id":2978269,"title":"image (20)","filename":"image-20.png","filesize":10128,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\/image-20-3","alt":"Contents of the Tree_crown_health.zip","author":"108651","description":"","caption":"","name":"image-20-3","status":"inherit","uploaded_to":2978212,"date":"2026-07-24 21:45:08","modified":"2026-07-24 21:45:33","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":469,"height":289,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","medium-width":424,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","medium_large-width":469,"medium_large-height":289,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","large-width":469,"large-height":289,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","1536x1536-width":469,"1536x1536-height":289,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","2048x2048-width":469,"2048x2048-height":289,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","card_image-width":469,"card_image-height":289,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/image-20.png","wide_image-width":469,"wide_image-height":289}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>Registering the Function<\/strong><\/p>\n<p>Because custom code will be executed within the Raster Analytics environment, <strong>administrator privileges<\/strong> are required to register a custom Python raster function.<\/p>\n<p>Using the new <strong>Custom Python Raster Function<\/strong> administrative API, an administrator simply uploads the ZIP package containing the raster function template and Python script.<\/p>\n<p>During registration, ArcGIS Enterprise validates the package structure and metadata before creating the associated Portal item.<\/p>\n<p>Once registration is complete:<\/p>\n<ul>\n<li>The custom raster function becomes a Portal item.<\/li>\n<li>It is available throughout the organization.<\/li>\n<li>It can be discovered and reused like any built-in raster function.<\/li>\n<\/ul>\n<p><strong>Using the Registered Function<\/strong><\/p>\n<p>After registration, the custom raster function is available as an item in the portal and can be accessed from Raster Function Templates within Map Viewer.<\/p>\n<p>From the user&#8217;s perspective, a registered custom Python raster function can be used in workflows alongside ArcGIS-provided raster functions. The function can be:<\/p>\n<ul>\n<li>Opened and edited<\/li>\n<li>Combined with built-in raster functions<\/li>\n<li>Included in Raster Function Templates<\/li>\n<li>Shared across projects<\/li>\n<\/ul>\n<p>In this example, the <strong>Tree Crown Health<\/strong> raster function is chained together with the <strong>Attribute Table<\/strong> raster function to produce an improved visualization with a customized color scheme.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":2978268,"id":2978268,"title":"rf","filename":"rf-scaled.png","filesize":203122,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-scaled.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\/rf","alt":"Tree crown raster function template","author":"108651","description":"","caption":"Tree crown health raster function template.","name":"rf","status":"inherit","uploaded_to":2978212,"date":"2026-07-24 21:43:02","modified":"2026-07-24 21:43:47","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":2560,"height":1080,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-scaled.png","medium-width":464,"medium-height":196,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-scaled.png","medium_large-width":768,"medium_large-height":324,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-scaled.png","large-width":1920,"large-height":810,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-1536x648.png","1536x1536-width":1536,"1536x1536-height":648,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-2048x864.png","2048x2048-width":2048,"2048x2048-height":864,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-826x348.png","card_image-width":826,"card_image-height":348,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/rf-1920x810.png","wide_image-width":1920,"wide_image-height":810}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p><strong>Running the Analysis<\/strong><\/p>\n<p>The Tree Crown Health function accepts:<\/p>\n<ul>\n<li>A three-band <strong>NAIP<\/strong> image<\/li>\n<li>A tree mask identifying vegetation areas<\/li>\n<\/ul>\n<p>When the analysis is submitted, ArcGIS Enterprise\u00a0distributes the custom raster function package to the Raster Analytics worker nodes running in Kubernetes, where the Python code is executed as part of the analysis workflow.<\/p>\n<p>Each worker executes the Python code as part of the <strong>Generate Raster<\/strong> operation, allowing the processing to scale across the Kubernetes cluster for large imagery datasets.<\/p>\n<p>The resulting output is a tree crown health map that visually identifies tree condition across the input imagery.<\/p>\n"},{"acf_fc_layout":"content","content":"<p><strong>Best Practices<\/strong><\/p>\n<p>When creating custom raster functions, consider the following recommendations:<\/p>\n<ul>\n<li>Design functions to be modular and reusable.<\/li>\n<li>Keep dependencies minimal whenever possible.<\/li>\n<li>Validate input parameters before processing.<\/li>\n<li>Follow the required file naming and directory conventions.<\/li>\n<li>Test locally before deploying to your enterprise environment.<\/li>\n<li>Package related functionality into reusable Raster Function Templates.<\/li>\n<li>Document parameter requirements and expected inputs to simplify adoption by other users.<\/li>\n<\/ul>\n<p>These practices help simplify deployment and improve maintainability across environments.<\/p>\n<p><strong>Security considerations<\/strong><\/p>\n<p>Because custom raster functions execute user-provided Python code, only trusted administrators should be allowed to register packages. Organizations should follow internal code review and governance processes before deploying custom functions into production environments.<\/p>\n<p><strong>Unlock New Analytical Possibilities<\/strong><\/p>\n<p>Custom Python Raster Functions bridge the gap between out-of-the-box raster processing and organization-specific innovation.<\/p>\n<p>Instead of adapting your workflows to fit existing tools, you can now bring your own algorithms directly into ArcGIS Enterprise on Kubernetes. Once deployed, they become reusable building blocks that integrate naturally with existing raster functions, enabling scalable, repeatable, and enterprise-ready imagery analysis.<\/p>\n<p>Whether you&#8217;re implementing advanced scientific models, proprietary business logic, or cutting-edge image analysis techniques, Custom Python Raster Functions provide a powerful extension point for the ArcGIS raster analytics platform.<\/p>\n<p>The result is a more flexible, extensible, and scalable imagery analysis environment\u2014one that empowers organizations to transform their own expertise into reusable enterprise capabilities.<\/p>\n"}],"related_articles":[{"ID":2968336,"post_author":"370372","post_date":"2026-06-25 08:47:47","post_date_gmt":"2026-06-25 15:47:47","post_content":"","post_title":"What's New in ArcGIS Enterprise 12.1 on Kubernetes","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"whats-new-in-arcgis-enterprise-12-1-on-kubernetes","to_ping":"","pinged":"","post_modified":"2026-06-26 11:15:37","post_modified_gmt":"2026-06-26 18:15:37","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=2968336","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1192872,"post_author":"216642","post_date":"2025-06-30 06:00:25","post_date_gmt":"2025-06-30 13:00:25","post_content":"","post_title":"ArcGIS Enterprise on Kubernetes: Is it for me?","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"determine-whether-arcgis-enterprise-on-kubernetes-is-right-for-you","to_ping":"","pinged":"","post_modified":"2026-01-07 13:01:06","post_modified_gmt":"2026-01-07 21:01:06","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1192872","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1192962,"post_author":"216642","post_date":"2021-05-05 08:00:50","post_date_gmt":"2021-05-05 15:00:50","post_content":"","post_title":"Frequently asked questions about Kubernetes","post_excerpt":"","post_status":"publish","comment_status":"closed","ping_status":"closed","post_password":"","post_name":"frequently-asked-questions-arcgis-enterprise-on-kubernetes","to_ping":"","pinged":"","post_modified":"2025-09-29 07:45:12","post_modified_gmt":"2025-09-29 14:45:12","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1192962","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"},{"ID":1735862,"post_author":"9782","post_date":"2022-11-02 17:21:54","post_date_gmt":"2022-11-03 00:21:54","post_content":"","post_title":"3 Things You Need to Know About ArcGIS Enterprise on Kubernetes","post_excerpt":"","post_status":"publish","comment_status":"open","ping_status":"closed","post_password":"","post_name":"why-arcgis-enterprise-on-kubernetes-is-transformational","to_ping":"","pinged":"","post_modified":"2025-06-30 16:26:56","post_modified_gmt":"2025-06-30 23:26:56","post_content_filtered":"","post_parent":0,"guid":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1735862","menu_order":0,"post_type":"blog","post_mime_type":"","comment_count":"0","filter":"raw"}],"show_article_image":true,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/card_826_465.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/wide_1920_1080.png","authors":[{"ID":8232,"user_firstname":"Yu","user_lastname":"Wang","nickname":"y.wang","user_nicename":"y-wang","display_name":"Yu Wang","user_email":"y.wang@esri.com","user_url":"","user_registered":"2018-08-03 23:07:49","user_description":"Yu Wang is a Product Engineer in the Spatial Analyst team focused on multidimensional scientific data management and analysis. Yu's education background includes Ph.D. degree in Geography, with a concentration on applied meteorology and MS degree in Computer Science at the University of Florida. Her research interest includes using Geospatial Metrics to better understand landfalling Tropical Cyclone rainfall patterns.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/08\/head.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"},{"ID":108651,"user_firstname":"Jeffrey","user_lastname":"Swain","nickname":"Jeff Swain","user_nicename":"jswain","display_name":"Jeff Swain","user_email":"JSwain@esri.com","user_url":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&amp;author=jswain","user_registered":"2020-10-05 20:10:08","user_description":"A Product Engineer on the Raster Team, who has been with Esri in various capacities since 2009, including as an Esri Support Analyst, and an Author for Esri Training Services. \r\n\r\nI find joy in solving problems through imagery and shared understanding, always driven by a passion to make things work better. I'm grateful for the creative minds I've met along the way\u2014collaboration has shown me that the best solutions are often born from many voices working together.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/09\/headshot-213x200.jpg' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}]},"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>Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes<\/title>\n<meta name=\"description\" content=\"Learn how to deploy and scale Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes, enabling custom raster analytics, image processing, and reusable workflows.\" \/>\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\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes\" \/>\n<meta property=\"og:description\" content=\"Learn how to deploy and scale Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes, enabling custom raster analytics, image processing, and reusable workflows.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\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\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\"},\"author\":{\"name\":\"Jeff Swain\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/ae52444cb4cce77784180d100f6ba1cf\"},\"headline\":\"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes\",\"datePublished\":\"2026-07-28T16:00:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\"},\"wordCount\":9,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"ArcGIS Enterprise\",\"ArcGIS Enterprise on Kubernetes\",\"python\",\"raster function\"],\"articleSection\":[\"Developers\",\"Imagery &amp; Remote Sensing\",\"Natural Resources\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\",\"name\":\"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2026-07-28T16:00:20+00:00\",\"description\":\"Learn how to deploy and scale Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes, enabling custom raster analytics, image processing, and reusable workflows.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes\"}]},{\"@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\/ae52444cb4cce77784180d100f6ba1cf\",\"name\":\"Jeff Swain\",\"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\/2022\/09\/headshot-213x200.jpg\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/09\/headshot-213x200.jpg\",\"caption\":\"Jeff Swain\"},\"description\":\"A Product Engineer on the Raster Team, who has been with Esri in various capacities since 2009, including as an Esri Support Analyst, and an Author for Esri Training Services. I find joy in solving problems through imagery and shared understanding, always driven by a passion to make things work better. I'm grateful for the creative minds I've met along the way\u2014collaboration has shown me that the best solutions are often born from many voices working together.\",\"sameAs\":[\"https:\/\/www.esri.com\/arcgis-blog\/?s=#&amp;author=jswain\",\"https:\/\/www.linkedin.com\/in\/jeff-swain-0926363\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/jswain\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes","description":"Learn how to deploy and scale Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes, enabling custom raster analytics, image processing, and reusable workflows.","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\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes","og_locale":"en_US","og_type":"article","og_title":"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes","og_description":"Learn how to deploy and scale Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes, enabling custom raster analytics, image processing, and reusable workflows.","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","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\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes"},"author":{"name":"Jeff Swain","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/ae52444cb4cce77784180d100f6ba1cf"},"headline":"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes","datePublished":"2026-07-28T16:00:20+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes"},"wordCount":9,"commentCount":0,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["ArcGIS Enterprise","ArcGIS Enterprise on Kubernetes","python","raster function"],"articleSection":["Developers","Imagery &amp; Remote Sensing","Natural Resources"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes","name":"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2026-07-28T16:00:20+00:00","description":"Learn how to deploy and scale Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes, enabling custom raster analytics, image processing, and reusable workflows.","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"Custom Python Raster Functions in ArcGIS Enterprise on Kubernetes"}]},{"@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\/ae52444cb4cce77784180d100f6ba1cf","name":"Jeff Swain","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\/2022\/09\/headshot-213x200.jpg","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/09\/headshot-213x200.jpg","caption":"Jeff Swain"},"description":"A Product Engineer on the Raster Team, who has been with Esri in various capacities since 2009, including as an Esri Support Analyst, and an Author for Esri Training Services. I find joy in solving problems through imagery and shared understanding, always driven by a passion to make things work better. I'm grateful for the creative minds I've met along the way\u2014collaboration has shown me that the best solutions are often born from many voices working together.","sameAs":["https:\/\/www.esri.com\/arcgis-blog\/?s=#&amp;author=jswain","https:\/\/www.linkedin.com\/in\/jeff-swain-0926363"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/jswain"}]}},"text_date":"July 28, 2026","author_name":"Multiple Authors","author_page":"https:\/\/www.esri.com\/arcgis-blog\/products\/arcgis-enterprise\/imagery\/custom-python-raster-functions-arcgis-enterprise-kubernetes","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/07\/wide_1920_1080.png","primary_product":"ArcGIS Enterprise","tag_data":[{"term_id":42301,"name":"ArcGIS Enterprise","slug":"arcgis-enterprise","term_group":0,"term_taxonomy_id":42301,"taxonomy":"post_tag","description":"","parent":0,"count":222,"filter":"raw"},{"term_id":759712,"name":"ArcGIS Enterprise on Kubernetes","slug":"arcgis-enterprise-on-kubernetes","term_group":0,"term_taxonomy_id":759712,"taxonomy":"post_tag","description":"","parent":0,"count":14,"filter":"raw"},{"term_id":24341,"name":"python","slug":"python","term_group":0,"term_taxonomy_id":24341,"taxonomy":"post_tag","description":"","parent":0,"count":173,"filter":"raw"},{"term_id":537362,"name":"raster function","slug":"raster-function","term_group":0,"term_taxonomy_id":537362,"taxonomy":"post_tag","description":"","parent":0,"count":11,"filter":"raw"}],"category_data":[{"term_id":738191,"name":"Developers","slug":"developers","term_group":0,"term_taxonomy_id":738191,"taxonomy":"category","description":"","parent":0,"count":445,"filter":"raw"},{"term_id":22931,"name":"Imagery &amp; Remote Sensing","slug":"imagery","term_group":0,"term_taxonomy_id":22931,"taxonomy":"category","description":"","parent":0,"count":805,"filter":"raw"},{"term_id":22771,"name":"Natural Resources","slug":"natural-resources","term_group":0,"term_taxonomy_id":22771,"taxonomy":"category","description":"","parent":0,"count":267,"filter":"raw"}],"product_data":[{"term_id":36571,"name":"ArcGIS Enterprise","slug":"arcgis-enterprise","term_group":0,"term_taxonomy_id":36571,"taxonomy":"product","description":"","parent":0,"count":1010,"filter":"raw"},{"term_id":36951,"name":"ArcGIS Image Server","slug":"image-server","term_group":0,"term_taxonomy_id":36951,"taxonomy":"product","description":"","parent":36571,"count":71,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=arcgis-enterprise","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2978212","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\/108651"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=2978212"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/2978212\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=2978212"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=2978212"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=2978212"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=2978212"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=2978212"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}