{"id":34955,"date":"2024-08-02T07:00:00","date_gmt":"2024-08-02T14:00:00","guid":{"rendered":"https:\/\/cloudinary.com\/blog\/?p=34955"},"modified":"2024-08-02T21:28:26","modified_gmt":"2024-08-03T04:28:26","slug":"streamlit-components-for-cloudinary","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary","title":{"rendered":"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps"},"content":{"rendered":"\n<p>As a Python developer, I had a hard time building a streamlined UI that was ready to be used in demos or customer presentations. I found <a href=\"https:\/\/streamlit.io\/\">Streamlit<\/a> (now part of <a href=\"https:\/\/www.snowflake.com\/en\/\">Snowflake<\/a>) and was ecstatic with its pure Python approach and simple interface to build a complex UI.&nbsp;<\/p>\n\n\n\n<p>Streamlit is an open-source Python library that simplifies the creation and deployment of interactive data applications. It allows developers to build visually appealing web apps directly from Python scripts, combining data visualization, machine learning models, and interactive widgets. Streamlit&#8217;s react-based model ensures a smooth user experience by automatically updating the UI based on user interactions or data changes.<\/p>\n\n\n\n<p>In this blog post, we\u2019ll discuss how to build and launch components for the Cloudinary Upload widget, Media Library widget, Product Gallery widget, and Video Player.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Streamlit Components for Cloudinary<\/h2>\n\n\n\n<p><a href=\"https:\/\/streamlit.io\/components\">Streamlit components<\/a> allow you to extend a platform\u2019s functionality. However, there were no components for Cloudinary, so during Cloudinary\u2019s hackathon, I built the following Streamlit components:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Use Case<\/strong><\/td><td><strong>Component<\/strong><\/td><td><strong>GitHub Home<\/strong><\/td><td><strong>PyPi Link<\/strong><\/td><\/tr><tr><td>Uploading assets<\/td><td><br>streamlit_cld_upload_widget<\/td><td><a href=\"https:\/\/github.com\/akshayranganath\/streamlit_cld_upload_widget\">https:\/\/github.com\/akshayranganath\/streamlit_cld_upload_widget<\/a>&nbsp;<\/td><td><a href=\"https:\/\/pypi.org\/project\/streamlit-cld-upload-widget\/\">https:\/\/pypi.org\/project\/streamlit-cld-upload-widget\/<\/a>&nbsp;<\/td><\/tr><tr><td>Media Library integration<\/td><td>cld_media_library<\/td><td><a href=\"https:\/\/github.com\/akshayranganath\/cld_media_library\">https:\/\/github.com\/akshayranganath\/cld_media_library<\/a>&nbsp;<\/td><td><a href=\"https:\/\/pypi.org\/project\/cld-media-library\/\">https:\/\/pypi.org\/project\/cld-media-library\/<\/a>&nbsp;<\/td><\/tr><tr><td>Video Player<\/td><td><br>streamlit_cld_video_player<\/td><td><a href=\"https:\/\/github.com\/akshayranganath\/streamlit_cld_video_player\">https:\/\/github.com\/akshayranganath\/streamlit_cld_video_player<\/a>&nbsp;<\/td><td><a href=\"https:\/\/pypi.org\/project\/streamlit-cld-video-player\/\">https:\/\/pypi.org\/project\/streamlit-cld-video-player\/<\/a>&nbsp;<\/td><\/tr><tr><td>Product Gallery widget<\/td><td>streamlit_cld_product_gallery_widget<\/td><td><a href=\"https:\/\/github.com\/akshayranganath\/streamlit_cld_product_gallery_widget\">https:\/\/github.com\/akshayranganath\/streamlit_cld_product_gallery_widget<\/a><\/td><td><a href=\"https:\/\/pypi.org\/project\/streamlit-cld-product-gallery-widget\/\">https:\/\/pypi.org\/project\/streamlit-cld-product-gallery-widget\/<\/a>&nbsp;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>To use any of the components, follow these two steps:<br><br>Find the right PyPi name and install as:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs shcb-wrap-lines\">pip install component-name<\/code><\/span><\/pre>\n\n\n<p>To include and use within your code, please do the following:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\"><span class=\"hljs-keyword\">import<\/span> streamlit <span class=\"hljs-keyword\">as<\/span> st\n\n<span class=\"hljs-keyword\">from<\/span> &lt;&lt;library&gt;&gt; <span class=\"hljs-keyword\">import<\/span> &lt;&lt;cld-widget&gt;&gt;\n\nvalue = &lt;&lt;cld-widget&gt;&gt;(initialization params)\n\nst.write(value)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Read on for more information about the four components.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. Upload Assets<\/h3>\n\n\n\n<p>The <a href=\"https:\/\/github.com\/akshayranganath\/streamlit_cld_upload_widget\">Upload Widget component<\/a> for Streamlit implements the <a href=\"https:\/\/cloudinary.com\/documentation\/upload_widget\">Upload widget<\/a>. Using this widget, you should be able to set up uploading of resources from users to Cloudinary. The widget supports a lot of <a href=\"https:\/\/cloudinary.com\/documentation\/image_upload_api_reference\">customizations<\/a>, a few of which have been implemented in this first version and documented <a href=\"https:\/\/cloudinary.com\/documentation\/image_upload_api_reference\">here<\/a>.<\/p>\n\n\n\n<p>To set this up, you\u2019ll need to use your <strong>product environment<\/strong> name and an <a href=\"https:\/\/cloudinary.com\/documentation\/upload_images_in_flutter_tutorial#create_an_unsigned_preset\"><strong>unsigned upload preset<\/strong><\/a>.&nbsp;<\/p>\n\n\n\n<p>This widget is useful when you want your users to upload assets directly to Cloudinary. Additionally, you can enhance the <em>upload preset<\/em> to use our Add-ons for moderation purposes. This widget is useful for uploading user-generated content (UGC) or accepting content from vendors, partners or agencies.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Media Library<\/h3>\n\n\n\n<p>Cloudinary\u2019s DAM offers a view of all your media as an asset library. You can embed this same view within your Streamlit app using the media library component, which is based on the <a href=\"https:\/\/cloudinary.com\/documentation\/media_library_widget\">Media Library widget<\/a>.<\/p>\n\n\n\n<p>The integration allows your users to choose and insert an asset into your workflow. Users can also build transformations and insert this transformed asset.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Video Player<\/h3>\n\n\n\n<p>The Cloudinary\u2019s <a href=\"https:\/\/cloudinary.com\/documentation\/cloudinary_video_player\">Video Player<\/a> offers an easy way to embed videos in your web application. Additionally, the player includes complex controls, chapters, playlists, and more. The streamlit component exposes a subset of <a href=\"https:\/\/cloudinary.com\/documentation\/video_player_api_reference\">player customizations<\/a> so you can easily embed and play videos hosted on Cloudinary through a Streamlit app.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Product Gallery Widget<\/h3>\n\n\n\n<p>If you\u2019re showcasing or building an e-commerce application, use the <a href=\"https:\/\/cloudinary.com\/documentation\/product_gallery\">Product Gallery widget<\/a> to easily build this experience. The widget allows you to <a href=\"https:\/\/cloudinary.com\/documentation\/product_gallery_reference\">control<\/a> transformations and UI. The product gallery streamlit component implements this widget so you can create similar experiences within a Streamlit application.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>I hope that you\u2019ll love these integrations. If you run into any issues, please feel free to open an issue in Github and I\u2019d be happy to solve it.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As a Python developer, I had a hard time building a streamlined UI that was ready to be used in demos or customer presentations. I found Streamlit (now part of Snowflake) and was ecstatic with its pure Python approach and simple interface to build a complex UI.&nbsp; Streamlit is an open-source Python library that simplifies [&hellip;]<\/p>\n","protected":false},"author":87,"featured_media":35006,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[195,238,373,310],"class_list":["post-34955","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-media-library","tag-product-gallery","tag-upload","tag-video-player"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.6 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Simple Media Management With Streamlit Components for Cloudinary<\/title>\n<meta name=\"description\" content=\"Akshay Ranganath, Cloudinary\u2019s Principal Solutions Architect, shares his Streamlit components for Cloudinary to optimize your media management workflow.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps\" \/>\n<meta property=\"og:description\" content=\"Akshay Ranganath, Cloudinary\u2019s Principal Solutions Architect, shares his Streamlit components for Cloudinary to optimize your media management workflow.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-08-02T14:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-08-03T04:28:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1720043255\/streamlit_components-blog\/streamlit_components-blog-jpg?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1100\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"melindapham\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\"},\"author\":{\"name\":\"melindapham\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\"},\"headline\":\"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps\",\"datePublished\":\"2024-08-02T14:00:00+00:00\",\"dateModified\":\"2024-08-03T04:28:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\"},\"wordCount\":618,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA\",\"keywords\":[\"Media Library\",\"Product Gallery\",\"Upload\",\"Video Player\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2024\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\",\"url\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\",\"name\":\"Simple Media Management With Streamlit Components for Cloudinary\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA\",\"datePublished\":\"2024-08-02T14:00:00+00:00\",\"dateModified\":\"2024-08-03T04:28:26+00:00\",\"description\":\"Akshay Ranganath, Cloudinary\u2019s Principal Solutions Architect, shares his Streamlit components for Cloudinary to optimize your media management workflow.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA\",\"width\":2000,\"height\":1100},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"name\":\"Cloudinary Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cloudinary.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\",\"name\":\"Cloudinary Blog\",\"url\":\"https:\/\/cloudinary.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA\",\"width\":312,\"height\":60,\"caption\":\"Cloudinary Blog\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9\",\"name\":\"melindapham\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g\",\"caption\":\"melindapham\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Simple Media Management With Streamlit Components for Cloudinary","description":"Akshay Ranganath, Cloudinary\u2019s Principal Solutions Architect, shares his Streamlit components for Cloudinary to optimize your media management workflow.","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:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary","og_locale":"en_US","og_type":"article","og_title":"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps","og_description":"Akshay Ranganath, Cloudinary\u2019s Principal Solutions Architect, shares his Streamlit components for Cloudinary to optimize your media management workflow.","og_url":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary","og_site_name":"Cloudinary Blog","article_published_time":"2024-08-02T14:00:00+00:00","article_modified_time":"2024-08-03T04:28:26+00:00","og_image":[{"width":2000,"height":1100,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/v1720043255\/streamlit_components-blog\/streamlit_components-blog-jpg?_i=AA","type":"image\/jpeg"}],"author":"melindapham","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary"},"author":{"name":"melindapham","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9"},"headline":"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps","datePublished":"2024-08-02T14:00:00+00:00","dateModified":"2024-08-03T04:28:26+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary"},"wordCount":618,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA","keywords":["Media Library","Product Gallery","Upload","Video Player"],"inLanguage":"en-US","copyrightYear":"2024","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary","url":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary","name":"Simple Media Management With Streamlit Components for Cloudinary","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA","datePublished":"2024-08-02T14:00:00+00:00","dateModified":"2024-08-03T04:28:26+00:00","description":"Akshay Ranganath, Cloudinary\u2019s Principal Solutions Architect, shares his Streamlit components for Cloudinary to optimize your media management workflow.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA","width":2000,"height":1100},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/streamlit-components-for-cloudinary#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing Streamlit Components for Cloudinary: Simplifying Media Management in Your Apps"}]},{"@type":"WebSite","@id":"https:\/\/cloudinary.com\/blog\/#website","url":"https:\/\/cloudinary.com\/blog\/","name":"Cloudinary Blog","description":"","publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cloudinary.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/cloudinary.com\/blog\/#organization","name":"Cloudinary Blog","url":"https:\/\/cloudinary.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1649718331\/Web_Assets\/blog\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877\/cloudinary_logo_for_white_bg_1937437aa7_19374666c7_193742f877.png?_i=AA","width":312,"height":60,"caption":"Cloudinary Blog"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/0d5ad601e4c3b5be89245dfb14be42d9","name":"melindapham","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e6f989fa97fe94be61596259d8629c3df65aec4c7da5c0000f90d810f313d4f4?s=96&d=mm&r=g","caption":"melindapham"}}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1720043255\/streamlit_components-blog\/streamlit_components-blog.jpg?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/34955","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/users\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=34955"}],"version-history":[{"count":4,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/34955\/revisions"}],"predecessor-version":[{"id":35007,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/34955\/revisions\/35007"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/35006"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=34955"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=34955"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=34955"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}