Photo by Denise Chan on Unsplash

Mastering Adobe Color File Formats

Marc Auberer
Jan 1 · 6 min read

The Adobe Software Suite has several software representatives, which make use of color swatch palettes. Those palettes can be customized and amongst other things also can be imported and exported. For this purpose, Adobe offers three different file formats to store color swatch palettes: ACO (Adobe Color), ASE (Adobe Swatch Exchange) and ACT (Adobe Color Table). This article will have focus on ACO and ASE, which are the most commonly used formats.

I recently built an Android library for importing / exporting ACO / ASE files for Android applications (more about this later on). This required a bit of research work and I decided to share the gained knowledge, bundled in this article to save you the effort and time of research.

The ACO color format

ACO is a binary file format, that originally was designed to export custom color swatch palettes from Adobe Photoshop due to backup reasons or to cross-use them with other Photoshop versions. The original implementation of protocol version 1 (V1) only provides support for storing the raw color values without names. It works with 16-Bit words and consists of a 2-word header and several 5-word color blocks.

Later on, Adobe introduced protocol version 2 (V2), which allows to store color values in combination with associated designations. To ensure backward compatibility, files with protocol version 2 start with the V1 header and V1 color blocks. Older versions of Adobe Photoshop will stop reading at this point while Photoshop versions, supporting V2 will continue to read the V2 header and V2 color blocks. This color blocks also include the associated color names. According to this change, V2 color blocks have a dynamic length, due to containing the color name with its variable length.

The image below shows the structure of an ACO color file with following example data:

  • Name: ad0d34, color value: #AD0D34 (RGB: 173, 13, 52)
  • Name: c77a31, color value: #C77A31 (RGB: 199, 122, 49)
  • Name: f10f6b, color value: #F10F6B (RGB: 241, 15, 107)

The ACO binary outcome looks like this (Hex for better readability):

[ 0x00 0x01 0x00 0x03 0x00 0x00 0xAD 0xAD 0x0D 0x0D 0x34 0x34 0x00 0x00 0x00 0x00 0xC7 0xC7 0x7A 0x7A 0x31 0x31 0x00 0x00 0x00 0x00 0xF1 0xF1 0x0F 0x0F 0x6B 0x6B 0x00 0x00 0x00 0x02 0x00 0x03 0x00 0x00 0xAD 0xAD 0x0D 0x0D 0x34 0x34 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x61 0x00 0x64 0x00 0x30 0x00 0x64 0x00 0x33 0x00 0x34 0x00 0x00 0x00 0x00 0xC7 0xC7 0x7A 0x7A 0x31 0x31 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x63 0x00 0x37 0x00 0x37 0x00 0x61 0x00 0x33 0x00 0x31 0x00 0x00 0x00 0x00 0xF1 0xF1 0x0F 0x0F 0x6B 0x6B 0x00 0x00 0x00 0x00 0x00 0x07 0x00 0x66 0x00 0x31 0x00 0x30 0x00 0x66 0x00 0x36 0x00 0x62 0x00 0x00 ]

Let’s further analyze the file to see what conclusions we can draw from this:

The ASE color format

ASE stands for Adobe Swatch Exchange and like the name implies, is primarily used to exchange swatch palettes between different Adobe products like Adobe Photoshop and Adobe Illustrator. Like the ACO format, ASE comes as binary, but instead of using fixed sized 16-Bit words, it has a dynamic word length. The ASE format contains a 3-word file header, followed by several data blocks. Note that there are three types of data blocks: Group start, Group end and Color entry. Those block types differ by their number of fields and their respective length. Group start blocks consist of the type identifier, the block length, the name length and the name itself. Group end bocks contain only the type identifier and the block length, which always is 0 per definition. Lastly, the Color entry blocks also has the type identifier, the block length, the name length and the name, but also holds the additional fields of color space (CMYK, RGB, Lab, Gray), the color value fields and the color mode. The number of color value fields is dependent on the color space and how many variables the chosen color space needs.

A file in ASE coding looks like this (Hex for better readability):

[ 0x41 0x53 0x45 0x46 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x05 0xC0 0x01 0x00 0x00 0x00 0x16 0x00 0x0A 0x00 0x49 0x00 0x6D 0x00 0x61 0x00 0x67 0x00 0x69 0x00 0x6E 0x00 0x61 0x00 0x72 0x00 0x79 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x22 0x00 0x07 0x00 0x61 0x00 0x64 0x00 0x30 0x00 0x64 0x00 0x33 0x00 0x34 0x00 0x00 0x52 0x47 0x42 0x20 0x3F 0x2D 0xAD 0xAE 0x3D 0x50 0xD0 0xD1 0x3E 0x50 0xD0 0xD1 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x22 0x00 0x07 0x00 0x63 0x00 0x37 0x00 0x37 0x00 0x61 0x00 0x33 0x00 0x31 0x00 0x00 0x52 0x47 0x42 0x20 0x3F 0x47 0xC7 0xC8 0x3E 0xF4 0xF4 0xF5 0x3E 0x44 0xC4 0xC5 0x00 0x02 0x00 0x01 0x00 0x00 0x00 0x22 0x00 0x07 0x00 0x66 0x00 0x31 0x00 0x30 0x00 0x66 0x00 0x36 0x00 0x62 0x00 0x00 0x52 0x47 0x42 0x20 0x3F 0x71 0xF1 0xF2 0x3D 0x70 0xF0 0xF1 0x3E 0xD6 0xD6 0xD7 0x00 0x02 0xC0 0x02 0x00 0x00 0x00 0x00 ]

Formatted, colored and labeled we can see how the gist looks like:

Adobe Color Tool: Export / import colors in Android

As mentioned above, I’ve implemented an Android library for importing and exporting color lists to ACO / ASE files. To use it in your project, you first have to add it to your dependency list in your build.gradle file at module level:

If you want to use the library for exporting colors, you also need to define a ContentProvider similar to this one in your Android Manifest:

Remember to replace com.chillibits.adobecolorsample with your package name.

Furthermore, please create the following file in your res/xml/file_paths.xml directory to specify the file path rules of the file provider:

Export colors

The colors have to be provided as variable of the type List<AdobeColor>.
This list of colors can then be exported in ACO format like this:

Note: Before you call the exportColorListAsACO function, you have to request the WRITE_EXTERNAL_STORAGE permission first. Otherwise, the app will crash with an error.

ASE can be exported with this method call:

Both methods can also be called with a second parameter of type String to define a name for your color palette. This name will be set as file name for the respective output file and will also be applied to act as the ASE group name.

Import colors

You can call the importColorList method to bring up a dialog for picking a single ACO or ASE file.

The selected file will automatically be analyzed, whether it is a ACO or ASE file and you get back a object of type Map<String, List<AdobeColor>> in the onComplete callback method. The map will contain key value pairs, which represents all imported color groups. The key is the group name and the value is a list of type AdobeColor with the actual color values. An import of the ACO format will result in a single color group with the name ACO Import, containing all color values.

Thanks for reading this article, I hope you’ve learned something from it.

To get more information about this topic, please visit the Adobe Color Tool project on GitHub. There can also be found links to further information sources. If you miss a feature in the library or you want to add the support for another framework, feel free to send me your contribution on GitHub.

The Startup

Get smarter at building your thing. Join The Startup’s +792K followers.

Sign up for Top 10 Stories

By The Startup

Get smarter at building your thing. Subscribe to receive The Startup's top 10 most read stories — delivered straight into your inbox, once a week. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

The Startup

Get smarter at building your thing. Follow to join The Startup’s +8 million monthly readers & +792K followers.

Marc Auberer

Written by

Student of Computer Science, working at SAP. Passionate software developer and OpenSource enthusiast.

The Startup

Get smarter at building your thing. Follow to join The Startup’s +8 million monthly readers & +792K followers.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store