{"id":27739,"date":"2022-06-08T07:34:09","date_gmt":"2022-06-08T07:34:09","guid":{"rendered":"http:\/\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs"},"modified":"2022-06-08T07:34:09","modified_gmt":"2022-06-08T07:34:09","slug":"create-music-art-covers-with-neural-style-transfer-in-nuxtjs","status":"publish","type":"post","link":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/","title":{"rendered":"Create Music Art Covers Using AI in NuxtJS"},"content":{"rendered":"<div class=\"wp-block-cloudinary-markdown \"><blockquote>\n<p>Never judge a book by its cover, never judge music by its cover &#8211; but we still do!<\/p>\n<\/blockquote>\n<p>Music art covers are designs on music albums in the form of illustrations or generic images. Music covers are just as important as the music itself because a well-designed and attractive music cover can perform marketing functions for the music.<\/p>\n<p>In this article, we will be creating a music art cover in <a href=\"https:\/\/nuxtjs.org\/\">Nuxt.js<\/a> using <a href=\"https:\/\/cloudinary.com\/\">Cloudinary\u2019s<\/a> <a href=\"https:\/\/cloudinary.com\/documentation\/neural_artwork_style_transfer_addon\">Neural artwork style transfer<\/a> add-on. The <strong>Neural Style Transfer<\/strong> uses neural networks to transfer and blend the styles from one image (source image) into another image (target image) while maintaining the content of both images with an intricate network.<\/p>\n<p>Nuxt.js is a Vue.js based, open-source JavaScript library that improves building server-rendered Vue.js applications, leading to more performant web applications.<\/p>\n<p>Cloudinary is a cloud-based video and image management platform that offers services for managing and transforming uploaded assets for usage on the web.<\/p>\n<h2>Sandbox<\/h2>\n<p>We can find the completed project on <a href=\"https:\/\/codesandbox.io\/s\/music-art-cover-using-neural-art-transfer-0fprph\">CodeSandbox<\/a>. Fork it and run the code.<\/p>\n<\/div>\n  \n  <div class=\"wp-block-cloudinary-code-sandbox \">\n    <iframe\n      src=\"https:\/\/codesandbox.io\/embed\/music-art-cover-using-neural-art-transfer-0fprph?theme=dark&amp;codemirror=1&amp;highlights=&amp;editorsize=50&amp;fontsize=14&amp;expanddevtools=0&amp;hidedevtools=0&amp;eslint=0&amp;forcerefresh=0&amp;hidenavigation=0&amp;initialpath=%2F&amp;module=&amp;moduleview=0&amp;previewwindow=&amp;view=&amp;runonclick=1\"\n      height=\"500\"\n      style=\"width: 100%;\"\n      title=\"Createing music art covers using Neural style transfer in Nuxt.js\"\n      loading=\"lazy\"\n      allow=\"accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking\"\n      sandbox=\"allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts\"\n    ><\/iframe>\n  <\/div>\n\n  <div class=\"wp-block-cloudinary-markdown \"><h2>Github<\/h2>\n<p>Check out the complete source code <a href=\"https:\/\/github.com\/MoeRayo\/ai-music-art-cover-using-neural-style-transfer\">here<\/a><\/p>\n<h2>Prerequisites<\/h2>\n<p>Understanding this article requires the following:<\/p>\n<ul>\n<li>Installation of Node.js<\/li>\n<li>Basic knowledge of JavaScript<\/li>\n<li>Familiarity with Nuxt.js<\/li>\n<li>A Cloudinary account. (sign up for a free account <a href=\"https:\/\/cloudinary.com\/signup\">here<\/a>).<\/li>\n<\/ul>\n<h2>Creating a Nuxt.js Project<\/h2>\n<p>Use <code>npx create-nuxt-app &lt;project-name&gt;<\/code> to create a new Nuxt.js project.\nThe process of scaffolding the project would provide a list of options, which should look like this:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654510508\/e-622f762c6cb5ad0068bc82c6\/ctr3l3ejrjaevcrfjte1.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"970\" height=\"272\"\/><\/p>\n<p>After successful project creation, we\u2019ll navigate into our directory and start our application by running the following command:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\">cd <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span> <span class=\"hljs-attr\">name<\/span>&gt;<\/span>\nnpm run dev\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Nuxt.js will, in turn, start a hot-reloading development environment that is accessible by default at <a href=\"http:\/\/localhost:3000\">http:\/\/localhost:3000<\/a>.<\/p>\n<h2>Registering Cloudinary\u2019s Neural Style Transfer Add-on<\/h2>\n<p>Our project requires the <a href=\"https:\/\/cloudinary.com\/documentation\/neural_artwork_style_transfer_addon\">Neural<\/a> <a href=\"https:\/\/cloudinary.com\/documentation\/neural_artwork_style_transfer_addon\">style transfer<\/a> add-on from Cloudinary. To use the add-on in code, we will need to register for it via the Cloudinary dashboard. We will log into our Cloudinary dashboard to sign up for the add-on. Choose the <strong>Add-ons<\/strong> tabs from the available options on the navigation bar.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654511147\/e-622f762c6cb5ad0068bc82c6\/axpdnejbbhge9mpjlnzy.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"824\" height=\"65\"\/><\/p>\n<p>Clicking on the tab above shows all the available add-ons on Cloudinary, from which we can choose the desired add-on, which in this case is the Neural Artwork Style Transfer add-on:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654511217\/e-622f762c6cb5ad0068bc82c6\/fc1bva02dzzgczoq9rcl.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"714\" height=\"411\"\/><\/p>\n<p>Choosing the add-on prompts us to view a well-detailed tab about the add-on from where we pick the plan to opt on. We will pick the Free plan for this demo:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654511305\/e-622f762c6cb5ad0068bc82c6\/oghqhgg98zdpcy23j6jg.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1005\" height=\"547\"\/><\/p>\n<h2>Allow Unsigned Add-on Transformations on Cloudinary<\/h2>\n<p>To allow people to transform images on the fly without verification using Cloudinary\u2019s authenticated API, we will navigate to the <strong>Settings<\/strong> and click on the <em>settings<\/em> option. This will show a bunch of options for us to activate or deactivate. In our case, we will look out for the <strong>Unsigned add-on transformations allowed<\/strong> options and check them like so:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654511387\/e-622f762c6cb5ad0068bc82c6\/ldrbdz81jg6vqnp19zsl.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"931\" height=\"121\"\/><\/p>\n<p>We will save the option, and now we can use the add-on in our Nuxt.js application.<\/p>\n<h2>Configuring Cloudinary<\/h2>\n<p>To use Cloudinary in our Nuxt.js application,  we will need to install the <a href=\"https:\/\/cloudinary.nuxtjs.org\/\">Cloudinary Nuxt SDK<\/a> in our project, like so:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"><span class=\"hljs-selector-tag\">npm<\/span> <span class=\"hljs-selector-tag\">install<\/span> <span class=\"hljs-keyword\">@nuxtjs<\/span>\/cloudinary\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h3>Configuring <code>nuxt.config<\/code> for Cloudinary<\/h3>\n<p>We need to configure our Nuxt.js application in the <code>nuxt.config<\/code> file before we can use Cloudinary.<\/p>\n<p>To do this, we will need to perform the following steps:<\/p>\n<ol>\n<li>\n<p>Create a <code>.env<\/code> file in the root of our Nuxt.js project and add our Cloudinary <strong>Cloud name<\/strong>. We can find it by navigating to the <a href=\"https:\/\/cloudinary.com\/console\/\">Cloudinary dashboard<\/a>.<\/p>\n<\/li>\n<li>\n<p>Register the property in our <code>.env<\/code> file like so:<\/p>\n<\/li>\n<\/ol>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript shcb-wrap-lines\">cloudName=<span class=\"hljs-string\">'***'<\/span> \n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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<ol start=\"3\">\n<li>Register the Cloudinary component for global use in the <code>nuxt.config.js<\/code> file by adding <code>'@nuxtjs\/cloudinary'<\/code> in the <code>modules<\/code> section:<\/li>\n<\/ol>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"><span class=\"hljs-selector-tag\">modules<\/span>: <span class=\"hljs-selector-attr\">&#91; <span class=\"hljs-string\">'@nuxtjs\/cloudinary'<\/span> ]<\/span>,\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<ol start=\"4\">\n<li>Add a <code>cloudinary<\/code> section in the <code>nuxt.config.js<\/code> like so:<\/li>\n<\/ol>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css shcb-wrap-lines\"><span class=\"hljs-selector-tag\">cloudinary<\/span>: {\n  <span class=\"hljs-attribute\">cloudName<\/span>: process.env.cloudName,\n  useComponent: true,\n},\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>The <code>useComponent<\/code> attribute is needed to make Cloudinary components like the <code>cldimage<\/code> and <code>cldtransformation<\/code> available for usage in Nuxt.js.<\/p>\n<p><strong>NB<\/strong>: <em>Endeavor to replace all occurrences of \u201c<\/em>**\u201c with the correct values.<\/p>\n<h2>Uploading Images to Cloudinary<\/h2>\n<p>We\u2019ll upload images from <a href=\"https:\/\/unsplash.com\/\">Unsplash<\/a> to Cloudinary. Cloudinary allows us to upload images via the dashboard by clicking the <strong>Media Library<\/strong> tab.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654511744\/e-622f762c6cb5ad0068bc82c6\/xtifq28ztx4nukzei3rj.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"889\" height=\"46\"\/><\/p>\n<p>After uploading the images, we will need to copy the <code>public Id<\/code> to pick each uploaded image from Cloudinary.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654511779\/e-622f762c6cb5ad0068bc82c6\/h0n9djhxfde7za8omfl9.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1082\" height=\"270\"\/><\/p>\n<h2>Setting up the Image Store<\/h2>\n<p>The project we are building requires two different kinds of images &#8211; the first set is for the image cover, to which we will apply Cloudinary transformation, and the second set will be album covers for famous songs.\nThus, we will create a first file named <code>utils\/image-covers.json<\/code> and another named <code>utils\/album-covers.json<\/code>. A sample snippet of any of these files should look like this:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json shcb-wrap-lines\">&#91;\n  {\n    <span class=\"hljs-attr\">\"id\"<\/span>: <span class=\"hljs-number\">1<\/span>,\n    <span class=\"hljs-attr\">\"publicId\"<\/span>: <span class=\"hljs-string\">\"oscar-keys\"<\/span>\n  }\n]\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<h2>Building out the Project<\/h2>\n<p>In building out the project, we will need to display the images from Cloudinary out in the browser. We will do this by setting up the markup, including Cloudinary\u2019s <code>cld-image<\/code> and <code>cld-transformation<\/code> component, which can be likened to using the native <code>&lt;img&gt;<\/code> tag in an HTML document.<\/p>\n<p>To achieve this, we will navigate to the <code>pages\/index.vue<\/code> file and replace the content with the code below:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/MoeRayo\/abc7055812a1939a7ad4df6e4cff5782\">https:\/\/gist.github.com\/MoeRayo\/abc7055812a1939a7ad4df6e4cff5782<\/a><\/p>\n<p>We achieved the following in the code snippet above:<\/p>\n<ul>\n<li>Imported the JSON images from the <code>utils<\/code> folder and declared them in the data properties before using Cloudinary images components \u2014 <code>&lt;cld-image \/&gt;<\/code> and <code>&lt;cld-transformation \/&gt;<\/code> to render the images in the application<\/li>\n<li>Added a <code>click<\/code> function to the images rendered to show the active image<\/li>\n<li>Created a functional input element to handle user input for the title<\/li>\n<li>Added an error message to prompt users to select an image and fill the input fields before submission<\/li>\n<li>Added a <code>data<\/code> property to manage the form data, error message, and other vital properties<\/li>\n<\/ul>\n<p>After this stage, our page should look like the image below:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654512026\/e-622f762c6cb5ad0068bc82c6\/vzygdcultdteuidojusa.png\" alt=\"image\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1118\" height=\"496\"\/><\/p>\n<h2>Generating the Image<\/h2>\n<p>To generate an album cover, we\u2019ll create a component that renders the generated album cover when the <code>upload<\/code> function linked to the \u201cGenerate Image\u201d button is clicked.<\/p>\n<p>We will create a file named <code>GeneratedImageCover.vue<\/code> in the <code>components<\/code> folder and add the code below to the file:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n  \n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">ref<\/span>=<span class=\"hljs-string\">\"ref\"<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"cat.png\"<\/span> <span class=\"hljs-attr\">:public-id<\/span>=<span class=\"hljs-string\">\"publicId\"<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">effect<\/span>=<span class=\"hljs-string\">\"blur:150\"<\/span>\/&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">effect<\/span>=<span class=\"hljs-string\">\"brightness_hsb:-20\"<\/span>\/&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">:overlay<\/span>=<span class=\"hljs-string\">\"{fontFamily: 'Metamorphous', fontSize: 80, fontWeight: 'bold', text: text, testAlign: 'center'}\"<\/span> <span class=\"hljs-attr\">color<\/span>=<span class=\"hljs-string\">\"#fff\"<\/span> <span class=\"hljs-attr\">opacity<\/span>=<span class=\"hljs-string\">\"80\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"fit\"<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"550\"<\/span> <span class=\"hljs-attr\">effect<\/span>=<span class=\"hljs-string\">\"shadow\"<\/span>\/&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">flags<\/span>=<span class=\"hljs-string\">\"layer_apply\"<\/span>\/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cld-image<\/span>&gt;<\/span>\n    \n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n  <span class=\"hljs-attr\">props<\/span>: {\n    <span class=\"hljs-attr\">text<\/span>: { \n      <span class=\"hljs-attr\">type<\/span>: <span class=\"hljs-built_in\">String<\/span>, \n      <span class=\"hljs-attr\">required<\/span>: <span class=\"hljs-literal\">true<\/span> \n    },\n    <span class=\"hljs-attr\">publicId<\/span>: { \n      <span class=\"hljs-attr\">type<\/span>: <span class=\"hljs-built_in\">String<\/span>, \n      <span class=\"hljs-attr\">required<\/span>: <span class=\"hljs-literal\">true<\/span>\n    },\n  },\n}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>We achieved the following using the snippet above:<\/p>\n<ul>\n<li>Rendered the generated image using Cloudinary\u2019s <code>&lt;cld-image \/&gt;<\/code> and <code>&lt;cld-transformation \/&gt;<\/code>\n<\/li>\n<li>Configured the Cloudinary components to accept the <code>text<\/code>  and <code>publicId<\/code> as props<\/li>\n<li>Cloudinary components support asset transformations, which we leveraged by blurring, changing the width, and cropping images, added text transformations like the font family and colors to achieve the desired album image<\/li>\n<\/ul>\n<p>To render the <code>GeneratedImageCover.vue<\/code> component, in our view, we will need to import it into the <code>index.vue<\/code> file where it is conditionally rendered. We will add the code below:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/MoeRayo\/1d3f6ea4292305198bc9fe3cee06a15b\">https:\/\/gist.github.com\/MoeRayo\/1d3f6ea4292305198bc9fe3cee06a15b<\/a><\/p>\n<p>We achieved the following from the code snippet above:<\/p>\n<ul>\n<li>Added a method called <code>upload<\/code> to the form, executed when the <strong>generate image<\/strong> button is triggered<\/li>\n<li>Checked whether an image is selected and if the title was added<\/li>\n<li>The upload function ran the <code>prepareFormData<\/code> function that contains the form data<\/li>\n<li>Added a data property to manage the error, the <code>cloudname<\/code>, <code>preset<\/code>, <code>formdata<\/code>, and <code>tags<\/code> for better organizing of our assets, e.t.c.<\/li>\n<li>Used <a href=\"https:\/\/www.npmjs.com\/package\/axios\">Axios<\/a> to post data to the Cloudinary endpoint using the request object options of the <code>url<\/code>, POST <code>method<\/code>, and the <code>formData<\/code>\n<\/li>\n<li>Included functionality to capture if the upload was successful or not, after a successful upload, we got access to some returned data like the <code>secured_url<\/code> used to render the uploaded image back in the browser<\/li>\n<\/ul>\n<p>At this point, we should have a result that looks like this:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654512324\/e-622f762c6cb5ad0068bc82c6\/mdqibggrqjuyv3xezv5h.png\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"1568\" height=\"984\"\/><\/p>\n<h2>Applying Neural Style Transfer<\/h2>\n<p>At this stage, the next thing we need to do is apply neural style transfer using the images in the album with the recently generated image from the step above. To do this, we will create a new file named <code>GeneratedAlbum.vue<\/code> in the <code>components<\/code> folder and add the code below to the file:<\/p>\n<pre class=\"js-syntax-highlighted\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml shcb-wrap-lines\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-image<\/span> <span class=\"hljs-attr\">:public-id<\/span>=<span class=\"hljs-string\">\"albumId\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"grow\"<\/span> <span class=\"hljs-attr\">sign-url<\/span>=<span class=\"hljs-string\">\"true\"<\/span>&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">width<\/span>=<span class=\"hljs-string\">\"550\"<\/span> <span class=\"hljs-attr\">crop<\/span>=<span class=\"hljs-string\">\"fit\"<\/span> \/&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">:overlay<\/span>=<span class=\"hljs-string\">\"publicid\"<\/span> <span class=\"hljs-attr\">font-size<\/span>=<span class=\"hljs-string\">\"80\"<\/span> <span class=\"hljs-attr\">font-weight<\/span>=<span class=\"hljs-string\">\"bold\"<\/span> \/&gt;<\/span>\n      <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">cld-transformation<\/span> <span class=\"hljs-attr\">effect<\/span>=<span class=\"hljs-string\">\"style_transfer\"<\/span> <span class=\"hljs-attr\">flags<\/span>=<span class=\"hljs-string\">\"layer_apply\"<\/span> \/&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">cld-image<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">template<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span>&gt;<\/span><span class=\"javascript\">\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> {\n  <span class=\"hljs-attr\">props<\/span>: {\n    <span class=\"hljs-attr\">albumId<\/span>: { \n      <span class=\"hljs-attr\">type<\/span>: <span class=\"hljs-built_in\">String<\/span>, \n      <span class=\"hljs-attr\">required<\/span>: <span class=\"hljs-literal\">true<\/span> \n    },\n    <span class=\"hljs-attr\">publicid<\/span>: { \n      <span class=\"hljs-attr\">type<\/span>: <span class=\"hljs-built_in\">String<\/span>, \n      <span class=\"hljs-attr\">required<\/span>: <span class=\"hljs-literal\">true<\/span>\n    },\n  },\n}\n<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n<p>Cloudinary provides for style transfer using different transformation properties attached to the component.\nThe required setup for neural style transfer in Cloudinary is:<\/p>\n<ul>\n<li>\n<strong>The target image:<\/strong> image we would use as the base for the styles to get transferred to<\/li>\n<li>\n<strong>The source image:<\/strong> image we intend to transfer its style to the target image<\/li>\n<li>\n<strong>The input image:<\/strong> repainted generated image which is a blend of both the target and the source image<\/li>\n<\/ul>\n<p>The <code>public-id<\/code> will represent the <strong>target<\/strong> image, while the <code>overlay<\/code> will be the <strong>source<\/strong> image. We will also need to specify the overlay effect which is denoted as <code>style_transfer<\/code>.<\/p>\n<p>To render the <code>GeneratedAlbum.vue<\/code> component, in our view, we will need to import it into the <code>index.vue<\/code> file and also apply the Cloudinary transformation.\nAt this stage, our final code in the <code>index.vue<\/code> should look like the below:<\/p>\n<p><a href=\"https:\/\/gist.github.com\/MoeRayo\/23331d1e6ba20a8548064ffcb4b6d6b7\">https:\/\/gist.github.com\/MoeRayo\/23331d1e6ba20a8548064ffcb4b6d6b7<\/a><\/p>\n<p>In turn, the application should look like this:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/res.cloudinary.com\/mediadevs\/image\/upload\/c_limit,w_2000\/f_auto\/q_auto\/v1654512517\/e-622f762c6cb5ad0068bc82c6\/vsrjqakyx34gavzmbbw1.gif\" alt=\"\" loading=\"lazy\" class=\"c-transformed-asset\"  width=\"560\" height=\"368\"\/><\/p>\n<h2>Conclusion<\/h2>\n<p>This article explains creating a music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.<\/p>\n<h2>References<\/h2>\n<ul>\n<li>\n<a href=\"https:\/\/en.wikipedia.org\/wiki\/Neural_style_transfer\">Wikipedia &#8211; Neural style transfer<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.nuxtjs.org\/\">Cloudinary-nuxt<\/a>\n<\/li>\n<li>\n<a href=\"https:\/\/cloudinary.com\/documentation\/neural_artwork_style_transfer_addon\">Neural art transfer add-on<\/a>\n<\/li>\n<\/ul>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":41,"featured_media":27740,"comment_status":"","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_cloudinary_featured_overwrite":false,"footnotes":""},"categories":[1],"tags":[134,370,372,371],"class_list":["post-27739","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized","tag-guest-post","tag-image","tag-nuxtjs","tag-under-review"],"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>Create Music Art Covers Using AI in NuxtJS<\/title>\n<meta name=\"description\" content=\"Learn how to create music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.\" \/>\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\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Create Music Art Covers Using AI in NuxtJS\" \/>\n<meta property=\"og:description\" content=\"Learn how to create music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\" \/>\n<meta property=\"og:site_name\" content=\"Cloudinary Blog\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-08T07:34:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA\" \/>\n\t<meta property=\"og:image:width\" content=\"886\" \/>\n\t<meta property=\"og:image:height\" content=\"550\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\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\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Create Music Art Covers Using AI in NuxtJS\",\"datePublished\":\"2022-06-08T07:34:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\"},\"wordCount\":8,\"publisher\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA\",\"keywords\":[\"Guest Post\",\"Image\",\"NuxtJS\",\"Under Review\"],\"inLanguage\":\"en-US\",\"copyrightYear\":\"2022\",\"copyrightHolder\":{\"@id\":\"https:\/\/cloudinary.com\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\",\"url\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\",\"name\":\"Create Music Art Covers Using AI in NuxtJS\",\"isPartOf\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA\",\"datePublished\":\"2022-06-08T07:34:09+00:00\",\"description\":\"Learn how to create music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.\",\"breadcrumb\":{\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage\",\"url\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA\",\"contentUrl\":\"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA\",\"width\":886,\"height\":550},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cloudinary.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Music Art Covers Using AI in NuxtJS\"}]},{\"@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\":\"\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Create Music Art Covers Using AI in NuxtJS","description":"Learn how to create music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.","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\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/","og_locale":"en_US","og_type":"article","og_title":"Create Music Art Covers Using AI in NuxtJS","og_description":"Learn how to create music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.","og_url":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/","og_site_name":"Cloudinary Blog","article_published_time":"2022-06-08T07:34:09+00:00","og_image":[{"width":886,"height":550,"url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA","type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#article","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/"},"author":{"name":"","@id":""},"headline":"Create Music Art Covers Using AI in NuxtJS","datePublished":"2022-06-08T07:34:09+00:00","mainEntityOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/"},"wordCount":8,"publisher":{"@id":"https:\/\/cloudinary.com\/blog\/#organization"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA","keywords":["Guest Post","Image","NuxtJS","Under Review"],"inLanguage":"en-US","copyrightYear":"2022","copyrightHolder":{"@id":"https:\/\/cloudinary.com\/#organization"}},{"@type":"WebPage","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/","url":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/","name":"Create Music Art Covers Using AI in NuxtJS","isPartOf":{"@id":"https:\/\/cloudinary.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage"},"image":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage"},"thumbnailUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA","datePublished":"2022-06-08T07:34:09+00:00","description":"Learn how to create music art cover in Nuxt.js using Cloudinary\u2019s neural style transfer add-on.","breadcrumb":{"@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#primaryimage","url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA","contentUrl":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA","width":886,"height":550},{"@type":"BreadcrumbList","@id":"https:\/\/cloudinary.com\/blog\/guest_post\/create-music-art-covers-with-neural-style-transfer-in-nuxtjs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cloudinary.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Create Music Art Covers Using AI in NuxtJS"}]},{"@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":""}]}},"jetpack_featured_media_url":"https:\/\/res.cloudinary.com\/cloudinary-marketing\/images\/f_auto,q_auto\/v1681926400\/Web_Assets\/blog\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f\/5ef8cb9cb74765fc94fb738754875f106d265f04-886x550-1_27740b7b1f.png?_i=AA","_links":{"self":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27739","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\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/comments?post=27739"}],"version-history":[{"count":0,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/posts\/27739\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media\/27740"}],"wp:attachment":[{"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/media?parent=27739"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/categories?post=27739"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cloudinary.com\/blog\/wp-json\/wp\/v2\/tags?post=27739"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}