# Contentstack Assets Foundations

### About this export

| Field | Value |
| --- | --- |
| **content_type** | course |
| **platform** | contentstack-academy |
| **source_url** | https://www.contentstack.com/academy/courses/contentstack-assets-foundations |
| **language** | en |
| **product_area** | Contentstack Academy |
| **learning_path** | standalone |
| **course_id** | contentstack-assets-foundations |
| **slug** | contentstack-assets-foundations |
| **version** | 2026-05-11 |
| **last_updated** | 2026-05-28 |
| **status** | published |
| **keywords** | ["Contentstack Academy"] |
| **summary_one_line** | Move beyond basic file storage and learn how to manage digital assets at enterprise scale. In this course, you’ll explore Space-level governance, seamless CMS branching, and optional AI-powered asset intelligence feature… |
| **total_duration_minutes** | 40 |
| **lessons_count** | 10 |
| **video_lessons_count** | 10 |
| **text_lessons_count** | 0 |
| **linked_learning_path** | standalone |
| **linked_assessment_ref** | LMS_UNCONFIGURED_COURSE_ASSESSMENT |
| **markdown_file_url** | /academy/md/courses/contentstack-assets-foundations.md |
| **generated_at** | 2026-05-28T12:30:00.520Z |
| **intended_audience** | [] |
| **prerequisites** | [] |
| **related_courses** | [] |

> **Academy MD v3** — companion `.md` for Ask AI. Quizzes and graded assessments are **LMS-only**; this file never contains answer keys.

## Course Overview

| Metadata | Value |
| --- | --- |
| Catalog duration | 39m 32s |
| Released (if known) | 2026-05-11 |
| Product area | Contentstack Academy |

### Description

Move beyond basic file storage and learn how to manage digital assets at enterprise scale. In this course, you’ll explore Space-level governance, seamless CMS branching, and optional AI-powered asset intelligence features that help teams organize content more effectively, collaborate with confidence, and streamline complex content operations.

### Learning objectives

1. Follow each lesson in order.
2. Practice in a training stack using placeholders **YOUR_STACK_API_KEY** and **YOUR_DELIVERY_TOKEN** in local `.env` files only.
3. Validate API responses against the official documentation.

### Topics covered

Contentstack Academy

## Course structure

```text
contentstack-assets-foundations/
├── 01-spaces-and-workspaces · video · 285s
├── 02-asset-modeling · video · 308s
├── 03-uploading-and-managing-assets · video · 314s
├── 04-organizing-with-folder · video · 149s
├── 05-asset-versioning · video · 220s
├── 06-asset-localization · video · 304s
├── 07-search-filters · video · 165s
├── 08-ai-capabilities-the-asset-picker · video · 174s
├── 09-visual-markup · video · 273s
├── 10-asset-hub · video · 180s
```

## Lessons

### Lesson 01 — Spaces and Workspaces

<!-- ai_metadata: {"lesson_id":"01","type":"video","duration_seconds":285,"video_url":"https://cdn.jwplayer.com/previews/1Zxnp8xG","thumbnail_url":"https://cdn.jwplayer.com/v2/media/1Zxnp8xG/poster.jpg?width=720","topics":["Spaces","and","Workspaces"]} -->

#### Video details

#### At a glance

- **Title:** Spaces & Workspaces
- **Duration:** 4m 45s
- **Media link:** https://cdn.jwplayer.com/previews/1Zxnp8xG
- **Publish date (unix):** 1778505389

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113689 kbps
- video/mp4 · 180p · 180p · 163413 kbps
- video/mp4 · 270p · 270p · 199282 kbps
- video/mp4 · 360p · 360p · 220575 kbps
- video/mp4 · 406p · 406p · 241229 kbps
- video/mp4 · 540p · 540p · 306136 kbps
- video/mp4 · 720p · 720p · 416184 kbps
- video/mp4 · 1080p · 1080p · 782292 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/1Zxnp8xG-120.vtt`

#### Video transcript

The new Contentstack Assets isn't just a facelift. It's a complete reimagining of how digital media lives inside your stack. We've moved beyond static folders and the one-size-fits-all metadata approach and built a system that treats your assets like data – intelligent, versioned, and governed. It bridges the gap between your creative library and your production code, so the right asset reaches the right audience without manual rework. Every asset needs a home, but in a growing organization, home can get crowded fast. Imagine you work for a company with multiple brands. You probably don't want the assets for brand A mixed in with brand B. There's different teams, different guidelines, different permissions. That's exactly why we use spaces and workspaces. A space is your highest-level container. Think of it like a dedicated building for a brand. Inside that building live the people, the permissions, the settings, and the assets for that brand – completely separate from everything else. So, if your organization has multiple brands, each one gets its own space. Clean boundaries, clear governance, no accidental overlap. Here's how you create one. First, go over to the App Switcher and choose Assets. Then, click the New button and choose Space. Give it a clear name, something like Brand Marketing. Add a short description and click Create. And that's it. Your space is live. It's a fresh environment with its own rules and its own users. And importantly, spaces aren't rigid boxes. They're flexible containers. You can link a space to any stack in your CMS, depending upon how your organization is structured. Inside every space is something called a workspace. Every space starts with one by default called Main. That's your production-ready source of truth. But let's say your marketing team is launching a seasonal campaign. They need to update metadata for hundreds of assets just for that campaign. You don't want all of those changes affecting your main library permanently. That's where workspaces come in. A workspace is basically a parallel environment, a fork of your main library. It lets you experiment safely without touching production assets. They're also great for development workflows. If your developers are working in a development branch in your CMS, you can create a matching workspace for assets. That way, content and assets stay perfectly aligned while teams test changes. When the campaign ends or development wraps, you can simply remove the workspace. No mess left behind. Let's spin up a new workspace. So inside the space, go to Space Settings and choose Workspaces. Then you can click New Workspace. Give it a unique ID and name. For example, I'll call this Spring Launch 2026. Choose your source workspace, which is usually going to be Main, and click Create. To switch environments, just use the Workspace drop-down on the Assets listing page. Now you're working in isolation. Anything you change here stays here. Workspaces are meant to be flexible and disposable. Inside Space Settings, you can rename a workspace, fork them again for regional teams, and configure which languages are enabled for each workspace. And when a workspace is no longer needed, go to Space Settings, Workspace, and click the three dots and choose Delete. A quick warning, deletion is permanent. It removes the assets in history for that workspace. Same rule applies for spaces themselves. When you delete a space, you delete the entire library. Don't worry, we will ask you to type DELETE in all caps just to confirm you really mean it.

#### Key takeaways

- Connect **Spaces and Workspaces** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 02 — Asset Modeling

<!-- ai_metadata: {"lesson_id":"02","type":"video","duration_seconds":308,"video_url":"https://cdn.jwplayer.com/previews/ughDfew4","thumbnail_url":"https://cdn.jwplayer.com/v2/media/ughDfew4/poster.jpg?width=720","topics":["Asset","Modeling"]} -->

#### Video details

#### At a glance

- **Title:** Asset Modeling
- **Duration:** 5m 8s
- **Media link:** https://cdn.jwplayer.com/previews/ughDfew4
- **Publish date (unix):** 1778505368

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113764 kbps
- video/mp4 · 180p · 180p · 167403 kbps
- video/mp4 · 270p · 270p · 205440 kbps
- video/mp4 · 360p · 360p · 233340 kbps
- video/mp4 · 406p · 406p · 257681 kbps
- video/mp4 · 540p · 540p · 329321 kbps
- video/mp4 · 720p · 720p · 448850 kbps
- video/mp4 · 1080p · 1080p · 838663 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/ughDfew4-120.vtt`

#### Video transcript

Managing a digital library isn't about storing files, it's about understanding them. Because a file without context, that's just noise. 10,000 images with no ownership info, no usage rights, no product associations, that's not a library, that's a junk drawer. Asset modeling is how you turn those files into structured, searchable, governed data. There are two building blocks behind asset modeling, fields and asset types. Fields are the attributes you want to track, things like license expiration, resolution, language or SKU. Out of the box content stack knows basic file information, but your business logic, that's yours to define. You create fields once, choose the type, text, number, date, group, and then reuse them anywhere. Define it once, use it everywhere. Asset types connect a file format to the right set of fields, because not every asset needs the same metadata. A high-res image might need DPI and color profile information. A legal PDF needs a version number and a language. Showing both sets to every uploader would be chaos. Asset types fix that. They ensure each file only sees the metadata that actually applies to it. It's a clean UI, giving you cleaner data. So let's take a look at how we can go about creating a new field. Up here towards the top, we're still inside of assets, by the way, we can click fields. Now if we look at this list, you can see I already have all sorts of configured fields already available. However, we want to create a new field to track whether or not an image has an alpha channel or transparency associated with it. To do that, I can come over to the right and click new field. Then we can give it a name. I'm going to call this alpha channel. And then you can also provide a description if you think it's necessary. I think alpha channel is somewhat self-explanatory, so I'm not going to add a description, but I am going to choose the field type. I could open this up and type in a field type, or if there's one that I see that I want to use, which I do in this case, which is number, I can select it. Then on the right-hand side, we could enter a placeholder value, some instructional text. In this case, I'll type in zero means no transparency and one means transparency. We can add a default value. I'll add zero. If you wanted any help text, you could also add that. But once you're done, you can come over and click save field. And when you do, you'll be returned back to the fields screen, and sure enough, the new field you created is available. So now what we want to do is create a new asset type. And when we create the new asset type, we want to associate this field with it. Now, we could associate any of these fields, but importantly, we want to associate the one that we just created. And so if we come over to the asset types section, you can see that there's all sorts of asset types already configured, things like JPEGs, PDFs, Illustrator files. But what we don't have is a asset type for an SVG, a scalable vector graphic. So let's create that asset type by coming over and clicking the new asset type button. If you have an icon, you can certainly add that. You can name it, SVG makes sense in this case. The UID, if you want to change this, you can. I'll leave it set to the default. Again, if you want to provide a description, you can do that as well. The category in this case is going to be image. I'll just scroll down and choose that. The MIME type will be image slash SVG plus XML. And then the file extension will be SVG. Now what we want to do is configure the fields we want to associate with this asset type. So down here towards the bottom, I'll click the plus sign, then I'll click the existing fields button. And in this case, I can come over and choose any one of these fields. But in this case, I want to choose the one that we just set up, which is the alpha channel field. Then you can come down and click add selected field. And sure enough, there it appears. Now what you can do is come over and click save asset type. When you do, you'll see the SVG asset type here in the asset types list. If you click on it, you'll see the asset type. And if you scroll down, sure enough, that alpha channel field is present.

#### Key takeaways

- Connect **Asset Modeling** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 03 — Uploading and Managing Assets

<!-- ai_metadata: {"lesson_id":"03","type":"video","duration_seconds":314,"video_url":"https://cdn.jwplayer.com/previews/b3CkXqug","thumbnail_url":"https://cdn.jwplayer.com/v2/media/b3CkXqug/poster.jpg?width=720","topics":["Uploading","and","Managing","Assets"]} -->

#### Video details

#### At a glance

- **Title:** Uploading & Managing Assets
- **Duration:** 5m 14s
- **Media link:** https://cdn.jwplayer.com/previews/b3CkXqug
- **Publish date (unix):** 1778505414

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113670 kbps
- video/mp4 · 180p · 180p · 150438 kbps
- video/mp4 · 270p · 270p · 174479 kbps
- video/mp4 · 360p · 360p · 196227 kbps
- video/mp4 · 406p · 406p · 212295 kbps
- video/mp4 · 540p · 540p · 257890 kbps
- video/mp4 · 720p · 720p · 340836 kbps
- video/mp4 · 1080p · 1080p · 551535 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/b3CkXqug-120.vtt`

#### Video transcript

You have your space set up. You've modeled your asset types. Now it's time to actually get to work. In ContentStack, uploading an asset is just the beginning. It's about how that asset lives, evolves, and stays connected to your content without breaking your site. So now let's take the time to actually upload some content. So what we want to do is go into our space to see our assets listing, and we can come over and click this new button. Now from here we can choose either to create a new folder, which we'll touch on in a little bit, or we can upload a file. If you select upload a file, you can browse to any location on your machine and find a file or multiple files. In this case, I'll just select one and upload it. Once that file is uploaded, it will be visible in your assets list. Now another way to work here is to simply drag and drop. You'll notice I have an images folder here on my desktop. If I open it up and select multiple images, all I have to do is drag and drop them into the assets section, and you'll notice they automatically upload. Now what's important here is taking a look at the actual metadata associated with these images. Now if you remember from a previous video, we spent some time setting up fields and building our asset types. So let's take a look at one of these asset types. Right here we have Antarctica. If I click on these three dots, I can choose edit, which will bring me into that asset. And inside this asset is where I can find all the configurable metadata based upon the defaults as well as all the user-defined metadata. Now in order to understand this completely, what I want to do is return back to our asset type to make sure we understand that that asset types mapping is happening here because this is a JPEG. So again, let's come back to content stack assets, choose asset types, find JPEG. JPG was the extension. And if you're scrolling through and you can't find it, a quicker way is just type in this search field. And when you do that, you'll find the JPEG. And here if I open it, we can see all the metadata over here on the left-hand side. These are all the fields that we configured. And you can see it's fairly robust. We have a couple different groups here. We have a group and then we have a group nested inside of it. So we have asset rights and then photographer details, as well as alternate text, campaign name, product model ID, and product model year. Now all of these fields won't be relevant to that one particular image, but they're options that we could use to provide metadata for that image. So let's return back to our assets and find that JPEG. And again, revisit all the metadata that's available. So again, once it loads on the right-hand side, we can enter a title and a description. But you'll notice the user-defined fields that we were just looking at. Alternate text, asset rights, and then we have those groupings. Inside of asset rights, you can see we can expand that and we can fill out the fields associated with the asset rights. And then, of course, we also have the nested information there, which is the photographer details. So it's incredibly robust in terms of the amount of information you can provide for any given asset type based upon how it was configured. There's one additional powerful feature that I want to talk about when it comes to an asset. Now normally when you update an asset, the URL changes. However, that becomes a nightmare for SEO and a headache for developers who have to go back and update links if anything changes. So inside of Content Stack, you can generate a permanent URL. And you can do this under the System Metadata tab. In order to find it, it's over here on the right-hand side. It's non-editable metadata. If you click on it, over here in the middle section, you'll notice you can add a permanent URL. And what it will do is give you a slug or a prefix. And all you have to do is give it a simple human readable name. So in this case, it would be something like Antarctica. And so now, if you wanted to make a change to this image, what you would do is come down here towards the bottom and click this Replace button. And you could source a new image. And even though the file name changes, the permanent URL always stays the same. So to wrap up, uploading is easy. Managing the uploads after the fact is where the value is. You can use the configurable metadata to add context, permanent URLs to prevent broken links, and replace to keep your content fresh without manual rework.

#### Key takeaways

- Connect **Uploading and Managing Assets** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 04 — Organizing with Folders

<!-- ai_metadata: {"lesson_id":"04","type":"video","duration_seconds":149,"video_url":"https://cdn.jwplayer.com/previews/Eao73t3J","thumbnail_url":"https://cdn.jwplayer.com/v2/media/Eao73t3J/poster.jpg?width=720","topics":["Organizing","with","Folders"]} -->

#### Video details

#### At a glance

- **Title:** Organizing with Folders
- **Duration:** 2m 29s
- **Media link:** https://cdn.jwplayer.com/previews/Eao73t3J
- **Publish date (unix):** 1778505411

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113955 kbps
- video/mp4 · 180p · 180p · 144185 kbps
- video/mp4 · 270p · 270p · 161046 kbps
- video/mp4 · 360p · 360p · 175929 kbps
- video/mp4 · 406p · 406p · 186939 kbps
- video/mp4 · 540p · 540p · 217638 kbps
- video/mp4 · 720p · 720p · 270531 kbps
- video/mp4 · 1080p · 1080p · 393839 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/Eao73t3J-120.vtt`

#### Video transcript

As your library grows, Search is your best friend, but Folders are your foundation. Folders in Content Stack Assets aren't just for storage. They're for grouping related work, managing specific projects, and keeping your workspace from becoming a digital junk drawer. Creating folders to stay organized is easy. In this case, I have some assets specifically for a Contact Us page, and I'd like to separate that out from everything else by creating a new folder. So in the top right-hand corner, I can choose New, then I can select Folder, and I'll go ahead and call this Contact Us. And if I wanted to provide a description, I could do that, but in this case, I'll come over and click Create. Once we have the folder, I can upload assets directly to that folder. So I'll go ahead and open the folder by clicking on it, and once I click it, I'm going to click New to upload new files. So go ahead and choose Upload File, and I have an Images directory on my desktop, and in there is Contact Us. I'll select all of those assets, and I'll click Open. Once I click Open, all those assets will upload. One of the nice things about folders is not only does it keep your assets organized, but it can also act as a nice filter to show just images that reside within a particular folder. All you have to do is type in the name of the folder here. In this case, we only have one, so it's really easy. But if you then come over and select it, you're then drilled into that directory, hiding everything else so you can focus on just the content found within that folder. A quick way to navigate back is to simply X out of that filter. So folders are simple to make and a great way to stay organized. Of course, you always have the ability to delete the folder in choosing Delete. It's important to note, though, when you delete a folder, it's an all-or-nothing action. When it's deleted, you're permanently removing the folder and every asset inside of it. So make sure that's something that you want to do. So folders keep your space manageable. You use them to group campaigns, your brands, or projects. It helps build structure that makes sense for your workflow today so you're not digging for files tomorrow.

#### Key takeaways

- Connect **Organizing with Folders** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 05 — Asset Versioning

<!-- ai_metadata: {"lesson_id":"05","type":"video","duration_seconds":220,"video_url":"https://cdn.jwplayer.com/previews/1OG3niVD","thumbnail_url":"https://cdn.jwplayer.com/v2/media/1OG3niVD/poster.jpg?width=720","topics":["Asset","Versioning"]} -->

#### Video details

#### At a glance

- **Title:** Asset Versioning
- **Duration:** 3m 40s
- **Media link:** https://cdn.jwplayer.com/previews/1OG3niVD
- **Publish date (unix):** 1778505351

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113701 kbps
- video/mp4 · 180p · 180p · 148559 kbps
- video/mp4 · 270p · 270p · 170858 kbps
- video/mp4 · 360p · 360p · 192569 kbps
- video/mp4 · 406p · 406p · 206338 kbps
- video/mp4 · 540p · 540p · 250771 kbps
- video/mp4 · 720p · 720p · 322395 kbps
- video/mp4 · 1080p · 1080p · 529107 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/1OG3niVD-120.vtt`

#### Video transcript

In a fast-moving content team, mistakes happen. A designer uploads the wrong crop. A writer accidentally deletes a critical disclaimer from the metadata. In most systems, that's a crisis. In Assets, it's just a version. Asset versioning is your built-in safety net, providing a complete history of every change you made to your library. And the great thing is, you don't have to turn on Assets. It's always watching. Every time you update a file, you change a metadata field, or even just hit save, Content Stack automatically creates a new version. And it's not just for the image itself. It's for the entire asset record. If you change any type of meta information, that change is captured as a distinct moment in time. So to illustrate this, I'm going to open up this image here, which I have a bunch of different versions for. And this one's a little bit more visual in the sense that I made some visual updates to this image. So first and foremost, how do you see the versions? Well, there's two ways. Over here on the right-hand side, you can click Versions to expand this panel. This same icon is available up here towards the top. It acts as a toggle, so if you click it again, it will just collapse. But I do want to expand it. I know version 3 looks different, because right now this is a black and white version. So if I click version 3, it will load, and you can see it's not the black and white version. And you can navigate all the different versions the same way. Now, if I come in here and make another change, like I add a campaign name, I'll type in Summer 2026, if I save this asset, a new version will be created. It's now version 9. Now, one of the things that doesn't make a lot of sense are the version names sometimes, and you may want to update them. And you can do that by clicking this little icon here, and we can call this Metadata Change. Or we could be really specific and type in Campaign Name. And when you press Return or Enter, it's applied. I could come down here and change this to Color Image. So by doing this, you're giving each version state a unique name, making it a lot easier to identify what that version actually represents. And the great thing is, the most powerful feature here is the rollback recovery mechanism. Let's say I no longer wanted that metadata associated with it. I could come back here and click on version 8, and then I can click Save Asset, and you'll notice it'll be renamed a new version number, which in this case will be version 10. And if we look at the editable metadata, you can see it no longer has that campaign name. Safety also means control. While anyone with view access can see the version history, only users with edit permissions can rename or restore versions. So versioning turns your asset library into a time machine. It reduces risk, supports audit requirements, and gives your team the freedom to iterate faster because they know they can always go back.

#### Key takeaways

- Connect **Asset Versioning** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 06 — Asset Localization

<!-- ai_metadata: {"lesson_id":"06","type":"video","duration_seconds":304,"video_url":"https://cdn.jwplayer.com/previews/Kd6rBYJG","thumbnail_url":"https://cdn.jwplayer.com/v2/media/Kd6rBYJG/poster.jpg?width=720","topics":["Asset","Localization"]} -->

#### Video details

#### At a glance

- **Title:** Asset Localization
- **Duration:** 5m 4s
- **Media link:** https://cdn.jwplayer.com/previews/Kd6rBYJG
- **Publish date (unix):** 1778505343

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113737 kbps
- video/mp4 · 180p · 180p · 146750 kbps
- video/mp4 · 270p · 270p · 168898 kbps
- video/mp4 · 360p · 360p · 190694 kbps
- video/mp4 · 406p · 406p · 204454 kbps
- video/mp4 · 540p · 540p · 248980 kbps
- video/mp4 · 720p · 720p · 327047 kbps
- video/mp4 · 1080p · 1080p · 527042 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/Kd6rBYJG-120.vtt`

#### Video transcript

In ContentStack, localization lives inside a single asset record. You can localize metadata like titles and tags or go deeper by replacing the file itself. Want a French sale banner for a French locale? Swap the image while keeping the same asset ID. To get started inside of assets what you want to do is come over and choose settings and this will bring you to the languages section. You'll notice already we have French set up. Now this is important. You'll notice that French has a fallback language of English. This fallback language is essentially your safety net. If you haven't translated an image or a description yet, the system knows exactly what version to show instead so the user never sees a blank space. So if you didn't have this added already and wanted to do this, you would come over and click new language and then you would select the language you want to use and then you would choose your fallback language. But that's already been set up and you'll notice that we're using a supported language but if you want to create a custom language that is available to you. Again I'm going to cancel out of this because we have it set up. Now just because the language exists already globally, it doesn't mean every workspace needs to see it. This is where we want to avoid clutter. So what we want to do is enable a specific language for our project. So if we come back to the content stack assets and open up our brand marketing space, from here we can choose space settings and notice on the left-hand side we have workspaces. What we want to do is come over and create a new workspace. In this workspace will be the area where we deal with our French campaign. So we're going to go ahead and call this French and then we can add a description if we want. We're going to fork the main workspace and then you can come over and click create workspace. Once you create that workspace we can manage the language settings for it. So I'm going to come over to the actions menu and here I can choose manage workspace languages. In this case we have English. There's no fallback but we want to add a language. So I'll click add language and in this case I'm going to choose French with our default fallback of English. With that selected I'll click apply and then I'll click save changes. I need to confirm this. I will and then we're all set. So let's go back to the assets. I'm going to come over to the assets menu here. You want to make sure that we're working inside the French workspace and now we want to take a look at how we can localize an asset. When you localize an asset you can not only translate text like the metadata around that image so you make the content relevant but you can also swap out the image to show a French version if there's text included in the image. So here I have an asset called summer sale. I'm going to go ahead and edit this. When I edit this you'll notice right now it's set to English. What I want to do in this drop-down menu I want to come over and choose French. Once I select French you'll notice the asset reloads. At this point we have the opportunity to make adjustments to this image. So the first thing that I want to do is replace this image that contains text that's in French instead of English. So down here towards the bottom I'll click the replace button. When you click the replace button you can source the image. I'll select the new image and open it and you'll notice it's updated. Additionally we can come in here and configure the metadata to also represent the language. So to demonstrate that I'll just go ahead and add a description that is in fact in French and when you come over to click Save Asset you'll notice that you get a dialog box asking you to localize the asset which we want to do. So I'll go ahead and click that and you'll notice that the update is complete. Now at this point all you have to do is come over and use this menu to toggle between the English version which will show you the image in English with English metadata. But you can always switch back to the French version by using this menu you'll see the French asset with the French description. Now because the asset ID stays the same across all versions your CMS entries automatically pull the correct localized file. When a creator selects an asset in a French entry, ContentStack intelligently serves the French version of that asset without any extra manual linking.

#### Key takeaways

- Connect **Asset Localization** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 07 — Search & Filters

<!-- ai_metadata: {"lesson_id":"07","type":"video","duration_seconds":165,"video_url":"https://cdn.jwplayer.com/previews/ErYW7DFN","thumbnail_url":"https://cdn.jwplayer.com/v2/media/ErYW7DFN/poster.jpg?width=720","topics":["Search","Filters"]} -->

#### Video details

#### At a glance

- **Title:** Search and Filters
- **Duration:** 2m 45s
- **Media link:** https://cdn.jwplayer.com/previews/ErYW7DFN
- **Publish date (unix):** 1778505406

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113835 kbps
- video/mp4 · 180p · 180p · 150516 kbps
- video/mp4 · 270p · 270p · 173410 kbps
- video/mp4 · 360p · 360p · 193214 kbps
- video/mp4 · 406p · 406p · 208243 kbps
- video/mp4 · 540p · 540p · 251196 kbps
- video/mp4 · 720p · 720p · 325255 kbps
- video/mp4 · 1080p · 1080p · 521477 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/ErYW7DFN-120.vtt`

#### Video transcript

As your library grows from hundreds of assets to hundreds of thousands, scrolling is no longer an option. You need to be able to find a needle in a haystack and you need to be able to do it fast. Assets gives you three levels of discoverability. Basic search, advanced filtering, and advanced search. So basic search works if you know exactly what you're looking for. Maybe you know the file name and all you have to do is come in here and type that in and when you perform the search it'll narrow down and display the appropriate result. I'll go ahead and X out of that to clear the filter. Now more importantly are the filters on the left-hand side. As we saw earlier you can filter based upon folder but also you can filter based upon the asset type that's been set up. If you scroll down you could also filter based upon size, color, who created it, when it was created, what locales are associated with the images, the dimensions, and tags. You'll notice there's a food tag here. If I select it the images are filtered to display just the assets that use that tag. Now the real power here is when we start using those user defined fields we looked at earlier. If I click manage filters you'll notice in this window I can choose user defined fields and then I can come in here and select any one of these fields I want to be able to filter by. So in this case let's just say I know I've run a campaign and the images associated with a variety of campaigns have been marked accordingly. So I'll go ahead and select that option and I'll apply it. Now down towards the bottom you'll notice I have a text field where I can enter in a name of a campaign. It just so happens I know there's one called summer 2026 and as I type it in sure enough the filter takes place and I see the assets that are associated with that campaign name. So that's a great way to filter. You can clear the filter by clicking the little X here up towards the top. Of course if you want to perform a multi-dimensional search you can come over and click advanced search. This looks much like the advanced search system inside of ContentStack and many applications. You can choose the field, the operator, the value, and then you can add conditions and sub conditions. So in ContentStack you don't just browse for assets, you can target them. You can use quick search for speed, filters for details, and advanced searches for your most complex queries.

#### Key takeaways

- Connect **Search & Filters** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 08 — AI Capabilities & The Asset Picker

<!-- ai_metadata: {"lesson_id":"08","type":"video","duration_seconds":174,"video_url":"https://cdn.jwplayer.com/previews/aHKVzcRZ","thumbnail_url":"https://cdn.jwplayer.com/v2/media/aHKVzcRZ/poster.jpg?width=720","topics":["Capabilities","The","Asset","Picker"]} -->

#### Video details

#### At a glance

- **Title:** AI Capabilities
- **Duration:** 2m 54s
- **Media link:** https://cdn.jwplayer.com/previews/aHKVzcRZ
- **Publish date (unix):** 1778505341

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113893 kbps
- video/mp4 · 180p · 180p · 152276 kbps
- video/mp4 · 270p · 270p · 177718 kbps
- video/mp4 · 360p · 360p · 199761 kbps
- video/mp4 · 406p · 406p · 217367 kbps
- video/mp4 · 540p · 540p · 268458 kbps
- video/mp4 · 720p · 720p · 350990 kbps
- video/mp4 · 1080p · 1080p · 574727 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/aHKVzcRZ-120.vtt`

#### Video transcript

You've built the structure, you've modeled the data, now it's time to let the platform do the heavy lifting. Content Stack Assets isn't just a storage locker, it's an intelligent engine. Between AI-powered automation and the new Asset Picker, we're removing the friction between finding an image and publishing a page. The work starts the second you upload a file, instead of having to manually enter tags or descriptions for every single asset, you can use automatic tag and description generation inside the asset. Let me show you what I mean. If I come over here and open this image, on the right-hand side where we can configure the metadata, you'll notice the description text field has a Suggest Description with AI option. If you click it, AI will automatically generate a description. If you're happy with it, you can click Insert, and it'll be inserted into that text field. Now the great thing is, this is a starting point, so if you need to modify or change this in any way, you certainly can do that. Likewise, you can do the same thing with tags. I can have AI recommend some tags, and then I can come in and select the tags that make the most sense for this particular asset. Once you're done, you can click Insert, and those tags will be placed into the Tags section. When you're done, you can come over and click Save Asset. Now the great thing is, with all this work we've done within assets, things like modeling, localization, and this tagging, it really comes to life once you're working inside the CMS. So I'm going to come over to the CMS, and once I'm inside the CMS, I'm going to enter my stack, and I'm going to choose Entries. At this point, I'm going to create a new entry based upon the image detail content type. I'll go ahead and click Proceed. Now what I can do here is type in the image name and a description. So for the image name, I'll type in Gondola on Canal During Sunset, and then I want to choose a file. This will open up the Asset Picker, and what I can do, and this is really helpful, especially if you have hundreds or thousands of assets here. In this menu, instead of choosing All, you can have AI make some recommendations. It's going to take a look at the image name, and then it will show you images that match that description. So in this case, I do want this asset here, and then I'll come down and click Use Selected Asset. And even better, this browser respects localization. If an editor is working on a French entry, the picker automatically services the French version of the asset or follows the fallback rules that we've already defined.

#### Key takeaways

- Connect **AI Capabilities & The Asset Picker** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 09 — Visual Markup

<!-- ai_metadata: {"lesson_id":"09","type":"video","duration_seconds":273,"video_url":"https://cdn.jwplayer.com/previews/3KVfWhBM","thumbnail_url":"https://cdn.jwplayer.com/v2/media/3KVfWhBM/poster.jpg?width=720","topics":["Visual","Markup"]} -->

#### Video details

#### At a glance

- **Title:** Visual Markups
- **Duration:** 4m 33s
- **Media link:** https://cdn.jwplayer.com/previews/3KVfWhBM
- **Publish date (unix):** 1778505358

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113566 kbps
- video/mp4 · 180p · 180p · 150362 kbps
- video/mp4 · 270p · 270p · 177200 kbps
- video/mp4 · 360p · 360p · 205930 kbps
- video/mp4 · 406p · 406p · 223479 kbps
- video/mp4 · 540p · 540p · 277888 kbps
- video/mp4 · 720p · 720p · 362318 kbps
- video/mp4 · 1080p · 1080p · 593734 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/3KVfWhBM-120.vtt`

#### Video transcript

A great image tells a story. But in a modern digital experience, sometimes you need an image to do more than just look good. It needs to be interactive. Whether you're tagging products in a lifestyle shot, annotating a complex technical diagram, or creating a shoppable gallery, visual markups transform static files into actionable data. So again, the visual markups are a way for you to create an overlay clickable area within an image. It's adding metadata detail to that graphic. And you can do that in a couple different ways. So let's first take a look at a very basic example. I'll come over here and open up this image. And when I do, I'll then come over and choose this button here on the far right, which is visual markup. Now there's a couple different options that are available to you. You can add the markup yourself, or if you have an image like this with a couple obvious features in it, in this case some boats, AI is going to do a great job of figuring out that this image has some boats. So if we choose suggest markup with AI, it does in fact find both of those boats. So I'll go ahead and select these. So now we've created this area around each of these boats. And we may want to add some additional metadata to them describing what these boats are. So in order for you to do that, you would come over and click on the pin, which will open up a small window. And here we could provide a description. And we could type in something fairly detailed here, like fishing boat. You could go ahead and type in what location in the world it's in currently, what type of fish it's used for, so on and so forth. To save some time, I'm just going to type in fishing boat. But then when I click save bounding box, that's now permanently part of this image. Now this becomes incredibly powerful when you use these assets in your entries, because the markup data is part of the asset record itself. All your developers have to do is pull that metadata to build an interactive front end experience. And so this is a nice way to add some contextual information around an image. I'll come over here and click save asset. One additional thing that I want to show you, because we worked with the bounding box, there is another option here. So I'm going to come back to the assets section and open up this image here. And let's just say, for example, this image was part of a blog of a lifestyle company that sells outdoor gear. Down here towards the bottom, we have some controls where we can zoom in and out of the image. I'll go ahead and zoom in. Let's say, for example, the company sold this backpack. Again, we can come over to the visual markup option. Instead of using markup with AI this time, let's just add it manually. And you'll notice you have two options. You have the bounding box, which is what we saw AI generate around the boats just a moment ago. But here I can select hotspot. And I can essentially drop a pin on this backpack. And here I could type in information around what this backpack is, why you would want it. But the real power comes from this URL where I could link it to an actual website that sold this product. So whatever the website is, you would just type that in, this URL, and it would create a link to this product page. So it can be really powerful when it comes to e-commerce of being able to highlight different parts of an image and then move the user to that location within their e-commerce site. So again, I'll come over here and click Save Asset. So to wrap up, I just want to point out that these visual markups really turn your images into a map of information. We can use AI suggestions to quickly add these hotspots or we can do it manually and we can add custom URLs so our library could potentially become a revenue generating tool by linking different elements within the image to different product pages within an e-commerce site.

#### Key takeaways

- Connect **Visual Markup** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

### Lesson 10 — Asset Hub

<!-- ai_metadata: {"lesson_id":"10","type":"video","duration_seconds":180,"video_url":"https://cdn.jwplayer.com/previews/UGBEMDzV","thumbnail_url":"https://cdn.jwplayer.com/v2/media/UGBEMDzV/poster.jpg?width=720","topics":["Asset","Hub"]} -->

#### Video details

#### At a glance

- **Title:** Asset Hub
- **Duration:** 3m
- **Media link:** https://cdn.jwplayer.com/previews/UGBEMDzV
- **Publish date (unix):** 1778505340

#### Streaming renditions

- application/vnd.apple.mpegurl
- audio/mp4 · AAC Audio · 113694 kbps
- video/mp4 · 180p · 180p · 142253 kbps
- video/mp4 · 270p · 270p · 159102 kbps
- video/mp4 · 360p · 360p · 173128 kbps
- video/mp4 · 406p · 406p · 182700 kbps
- video/mp4 · 540p · 540p · 215844 kbps
- video/mp4 · 720p · 720p · 267536 kbps
- video/mp4 · 1080p · 1080p · 407701 kbps

#### Timed text tracks (delivery)

- **thumbnails:** `https://cdn.jwplayer.com/strips/UGBEMDzV-120.vtt`

#### Video transcript

Content doesn't live in a vacuum. In Content Stack, your assets and your entries are part of the same story. To make that work at scale, you need a bridge between the assets space and your CMS stack. That bridge is Asset Hub. In order to make that work, you have to link an existing space to your stack. So in order to do that, I'm going to open this stack. And once I'm inside the stack, I'm going to click Settings. This will bring me to the stack settings, and you'll notice that there's an option called Assets Hub. When you do that, you'll notice that there's a default space, but what we want to do is link this space that we set up inside of Assets. So all you have to do is click Link Workspace, and then choose this space from the drop-down menu. Then you have to choose the workspace within that space. In this case, I'm going to choose Main, and then I'm going to link the workspace. Notice it appears here inside of Assets Hub. Now, a single stack can actually link up to 10 different spaces. But remember, there's also a parallel universe of branches. So let's go ahead and take a look at what happens when we create a branch. If I come over to the Branches section, here I'll create a new branch, and I'll just name this Staging. Then I have to select a source branch. I'll go ahead and choose Main as that source branch. And down towards the bottom, you'll notice that we have the same option to link different workspaces to the branch. So if I want to use the space in the assets that we set up, I can click Add Existing Workspace to this branch. And notice I can choose Main, which is the brand marketing space we set up. Now, here's what's incredible. By default, it will fork and link it. Notice the other option is to just link to the existing workspace. But by having it automatically fork it, we generate a staging workspace for the assets, leaving the production version completely untouched. So I'll go ahead and click Apply. Once I click Apply, you'll notice it's available. And then we can go ahead and click Save. Now, of course, you can always go back and unlink it. But what's important to remember that it is a significant move. If you have entries that are already pointing to assets in that old workspace, those references may break. So the Assets Hub ensures your infrastructure matches your workflow. By linking CMS branches to asset workspaces, you give your teams the freedom to develop, test, and launch new experiences without ever crossing the streams between in-progress and in-production.

#### Key takeaways

- Connect **Asset Hub** back to your stack configuration before moving to the next module.
- Capture one concrete artifact (screenshot, Postman call, or code snippet) that proves the step works in your environment.
- Re-read the delivery versus management boundary for anything you changed in the entry model.

## Resources & references

| Page | Companion Markdown |
| --- | --- |
| /courses/contentstack-assets-foundations/spaces-and-workspaces | /academy/md/courses/contentstack-assets-foundations/spaces-and-workspaces.md |
| /courses/contentstack-assets-foundations/asset-modeling | /academy/md/courses/contentstack-assets-foundations/asset-modeling.md |
| /courses/contentstack-assets-foundations/uploading-and-managing-assets | /academy/md/courses/contentstack-assets-foundations/uploading-and-managing-assets.md |
| /courses/contentstack-assets-foundations/organizing-with-folder | /academy/md/courses/contentstack-assets-foundations/organizing-with-folder.md |
| /courses/contentstack-assets-foundations/asset-versioning | /academy/md/courses/contentstack-assets-foundations/asset-versioning.md |
| /courses/contentstack-assets-foundations/asset-localization | /academy/md/courses/contentstack-assets-foundations/asset-localization.md |
| /courses/contentstack-assets-foundations/search-filters | /academy/md/courses/contentstack-assets-foundations/search-filters.md |
| /courses/contentstack-assets-foundations/ai-capabilities-the-asset-picker | /academy/md/courses/contentstack-assets-foundations/ai-capabilities-the-asset-picker.md |
| /courses/contentstack-assets-foundations/visual-markup | /academy/md/courses/contentstack-assets-foundations/visual-markup.md |
| /courses/contentstack-assets-foundations/asset-hub | /academy/md/courses/contentstack-assets-foundations/asset-hub.md |

## Supplement for indexing

### Content summary

Move beyond basic file storage and learn how to manage digital assets at enterprise scale. In this course, you’ll explore Space-level governance, seamless CMS branching, and optional AI-powered asset intelligence feature… Move beyond basic file storage and learn how to manage digital assets at enterprise scale. In this course, you’ll explore Space-level governance, seamless CMS branching, and optional AI-powered asset intelligence features that help teams organize content more effectively, collaborate with confidence, and streamline complex content operations.

### Retrieval tags

- Contentstack Academy
- contentstack-assets-foundations
- Spaces
- and
- Workspaces
- Asset
- Modeling
- Uploading
- Managing
- Assets
- Organizing
- with
- Folders
- Versioning

### Indexing notes

Chunk at each "### Lesson NN — Title" heading; copy lesson_id and topics from the preceding HTML comment into chunk metadata for RAG filters.
Course slug: contentstack-assets-foundations. Union of lesson topic tokens: Spaces, and, Workspaces, Asset, Modeling, Uploading, Managing, Assets, Organizing, with, Folders, Versioning, Localization, Search, Filters, Capabilities, The, Picker, Visual, Markup, Hub.
Do not embed or retrieve LMS-only quiz items or mastery exam answer keys from this export.

### Asset references

| Label | URL |
| --- | --- |
| Video thumbnail: Spaces and Workspaces | `https://cdn.jwplayer.com/v2/media/1Zxnp8xG/poster.jpg?width=720` |
| Video thumbnail: Asset Modeling | `https://cdn.jwplayer.com/v2/media/ughDfew4/poster.jpg?width=720` |
| Video thumbnail: Uploading and Managing Assets | `https://cdn.jwplayer.com/v2/media/b3CkXqug/poster.jpg?width=720` |
| Video thumbnail: Organizing with Folders | `https://cdn.jwplayer.com/v2/media/Eao73t3J/poster.jpg?width=720` |
| Video thumbnail: Asset Versioning | `https://cdn.jwplayer.com/v2/media/1OG3niVD/poster.jpg?width=720` |
| Video thumbnail: Asset Localization | `https://cdn.jwplayer.com/v2/media/Kd6rBYJG/poster.jpg?width=720` |
| Video thumbnail: Search & Filters | `https://cdn.jwplayer.com/v2/media/ErYW7DFN/poster.jpg?width=720` |
| Video thumbnail: AI Capabilities & The Asset Picker | `https://cdn.jwplayer.com/v2/media/aHKVzcRZ/poster.jpg?width=720` |
| Video thumbnail: Visual Markup | `https://cdn.jwplayer.com/v2/media/3KVfWhBM/poster.jpg?width=720` |
| Video thumbnail: Asset Hub | `https://cdn.jwplayer.com/v2/media/UGBEMDzV/poster.jpg?width=720` |

### External links

| Label | URL |
| --- | --- |
| Contentstack Academy home | `https://www.contentstack.com/academy/` |
| Training instance setup | `https://www.contentstack.com/academy/training-instance` |
| Academy playground (GitHub) | `https://github.com/contentstack/contentstack-academy-playground` |
| Contentstack documentation | `https://www.contentstack.com/docs/` |
