Serato 4.0 now supports song ratings!

In Serato, you can right-click on a track and "Select Rating Emoji" to choose the Emoji displayed individually for each music track. It looks like this:


The value in POPULARIMETER remains the same.

But the chosen Emoji will be written into the tracks metadata too. Example for MP3:
2025.12.12 - SERATO RATING EMOJI #2 2025.12.12 - 10-27-42 - SERATO RATING EMOJI #1
The field name used for MP3 is SERATO RATING EMOJI.

The funny thing: These Emojis are interchangeable too.
You can change your Emoji in Mp3tag and Serato will display it (after a "Re-Scan File Info").

In my own tests this only really works, if Serato has initially written the SERATO RATING EMOJI field. If you add it initally in Mp3tag, Serato does not read it and write it back duplicated.
image


Technical update 16:30 CET

I think, I have found the reasons for the incompatibilty between a SERATO RATING EMOJI field set by Mp3tag and one set by Serato DJ Pro v4:

  1. Serato writes the field name case-sensitive as Serato Rating Emoji.
  | - Tag 'TXXX_Serato Rating Emoji' (57 bytes):
  |     03cf: 01 ff fe 53 00 65 00 72 00 61 00 74 00 6f 00 20 [...S.e.r.a.t.o. ]
  |     03df: 00 52 00 61 00 74 00 69 00 6e 00 67 00 20 00 45 [.R.a.t.i.n.g. .E]
  |     03ef: 00 6d 00 6f 00 6a 00 69 00 00 00 ff fe 3d d8 36 [.m.o.j.i.....=.6]
  |     03ff: de 0d 20 3c d8 2b df 0f fe                      [.. <.+...]
  1. This could be adjusted by the usual Mp3tag ursfields.ini entry.
    Once manually changed, you could set a new Emoji initially in Mp3tag.
  1. The Emoji content will be read from Serato and displayed, BUT there is one big caveat:
    You cannot change this value to anything else in Serato. This applies to both the value (1 to 5) and the Emoji.
    Emoji in Serato
    I assume that Serato reads such values, but due to the missing information - see the next point - it does not allow you to change them.

  2. The reason for the incompatibilty is most likely that Serato not only stores the Emoji as a so-called Surrogate Pair, but also adds a Zero-Width Joiner (ZWJ) and Variation Selector (FE0F).
    -> AFAIK, this is currently not possible with Mp3tag.
    It seems to be possible - If an Emoji is chosen with all the necessary parts, like 👩🏼‍❤️‍👩🏿
    "Couple with Heart: Woman, Woman, Medium-Light Skin Tone, Dark Skin Tone Emoji"
    Unfortunately, the above point #3 remains valid. I need to look into it further...


Two examples for those interested:
a) Use of ZWJ: :woman: + ZWJ + :heart: + ZWJ + :woman: = :couple_with_heart_woman_woman: <- two female faces with one heart in 1 Emoji
b) Textsymbol U+2764 ( :black_heart: ) → black heart as textsymbol:
If a Variation Selector is added as in U+2764 U+FE0F = red heart as :heart: Emoji


Explanation for the above hex data:

ff fe 3d d8 36 de 0d 20 3c d8 2b df 0f fe

This looks cryptic at first, but it’s simply the UTF‑16 encoding of a modern emoji sequence. Let’s break it down:

1. ff fe

  • UTF‑16 BOM (Byte Order Mark)
  • Indicates that the following values are stored in little endian order.

2. 3d d8 36 de

  • A UTF‑16 surrogate pair :
    • High surrogate: 0xD83D
    • Low surrogate: 0xDE36
  • Together they represent U+1F636:face_without_mouth: (Face Without Mouth).

3. 0d 20

  • This is U+200D , the Zero‑Width Joiner (ZWJ) .
  • It’s invisible, but it links two characters together so they display as a single combined emoji.

4. 3c d8 2b df

  • Another surrogate pair:
    • High surrogate: 0xD83C
    • Low surrogate: 0xDF2B
  • This corresponds to U+1F32B:fog: (Fog).

5. 0f fe

  • This is U+FE0F , the Variation Selector‑16 .
  • It forces the preceding character to render in emoji style rather than plain text.

Putting it all together

The sequence encodes:

  • BOM → UTF‑16 Little Endian
  • :face_without_mouth: (Face Without Mouth)
  • ZWJ (joiner)
  • :fog: (Fog)
  • FE0F (emoji presentation)

:right_arrow: Combined, this produces the emoji :face_in_clouds: (“Face in Clouds”).