You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hello everyone! I’m **Antonio Giordano**, and I’m excited to share the results of my**Google Summer of Code 2025**work on Mixxx. We’ve introduced**true multi-genre support**with smart autocompletion, a cleaner editing experience, and tools to migrate your existing library—without breaking your flow.
8
+
Hello everyone! I'm **Antonio Giordano**, and I'm excited to share the results of my**Google Summer of Code 2025**work on Mixxx. We've introduced**true multi-genre support**with smart autocompletion, a cleaner editing experience, and tools to migrate your existing librarywithout breaking your flow.
9
9
10
10
### Project Vision & Evolution
11
11
12
-
Our goal was to give DJs flexible, reliable control over genres—beyond a single free-text field. In earlier versions, you could type multiple genres (e.g.,`Dance/Electronic/House`), but Mixxx treated that as**plain text**. It couldn’t understand or manage individual tags.
12
+
Our goal was to give DJs flexible, reliable control over genresbeyond a single free-text field. In earlier versions, you could type multiple genres (e.g.,`Dance/Electronic/House`), but Mixxx treated that as**plain text**. It couldn't understand or manage individual tags.
13
13
14
-
To get this right, we started with a**solid multi-genre foundation**that’s fast, consistent, and future-friendly. This foundation paves the way for richer features like hierarchical genres.
14
+
To get this right, we started with a**solid multi-genre foundation**that's fast, consistent, and future-friendly. This foundation paves the way for richer features like hierarchical genres.
**Note:**If you type a genre that doesn’t exist yet, Mixxx keeps it as a literal. You can map it later using theOrphan Genrestool (see below).
27
+
**Note:**If you type a genre that doesn't exist yet, Mixxx keeps it as a literal. You can map it later using theOrphan Genrestool (see below).
28
28
29
-
**2 Multi-Track Editing (Experimental)**
29
+
####Multi-Track Editing (Experimental)
30
30
31
31
You can now edit genres across multiple tracks in one go (experimental):
32
32
33
-
-**Common view:**shows the**intersection**of genres shared by all selected tracks.
34
-
-**Batch operations:**add or remove genres for the whole selection.
35
-
-**Safe by design:**unique per-track genres are preserved.
33
+
-**Common view:**shows the**intersection**of genres shared by all selected tracks.
34
+
-**Batch operations:**add or remove genres for the whole selection.
35
+
-**Safe by design:**unique per-track genres are preserved.
36
36
37
-
**3 A Smarter Library: Tree, Counts, and Drag & Drop**
37
+
####A Smarter Library: Tree, Counts, and Drag & Drop
38
38
39
-
Genres now live in a**tree**. Each node shows**track count**and**total duration**. When you select a track, the genres it belongs to become**bold**in the tree—crate-like ergonomics for quick navigation.
39
+
Genres now live in a**tree**. Each node shows**track count**and**total duration**. When you select a track, the genres it belongs to become**bold**in the treecrate-like ergonomics for quick navigation.
40
40
41
-
-**Drag & drop:**drag tracks from the Tracklist onto a genre to assign it.
42
-
-**Quick menu:**right-click a track then**Genres**to (de)select on the fly.
43
-
-**Rename safely:**renaming a genre changes the**name**, not the ID, so tracks keep their associations.
41
+
-**Drag & drop:**drag tracks from the Tracklist onto a genre to assign it.
42
+
-**Quick menu:**right-click a track then**Genres**to (de)select on the fly.
43
+
-**Rename safely:**renaming a genre changes the**name**, not the ID, so tracks keep their associations.
44
44
45
-
**4 Clean Migration: “Orphan Genres”**
45
+
####Clean Migration: "Orphan Genres"
46
46
47
-
If your library contains free-text genres, Mixxx detects**orphans**and helps you clean them up:
47
+
If your library contains free-text genres, Mixxx detects**orphans**and helps you clean them up:
48
48
49
-
- Right-click the**root**of the genre tree then**Edit Orphan Genres**.
50
-
-**Add**a new genre or**Link**a string to an existing one.
51
-
- Multi-word strings appear as both a full string*and*individual tokens; add the full string first if you want to keep it as a single genre.
49
+
- Right-click the**root**of the genre tree then**Edit Orphan Genres**.
50
+
-**Add**a new genre or**Link**a string to an existing one.
51
+
- Multi-word strings appear as both a full string*and*individual tokens; add the full string first if you want to keep it as a single genre.
52
52
53
53
54
54
### Why This Matters for DJs
@@ -58,66 +58,65 @@ If your library contains free-text genres, Mixxx detects **orphans** and helps
58
58
- One free-text field. No understanding of individual genres.
59
59
- No autocomplete.
60
60
- Editing meant retyping a whole string.
61
-
- Inconsistent naming (“Electronic” vs “electronic”).
61
+
- Inconsistent naming ("Electronic" vs "electronic").
62
62
- No real bulk editing.
63
63
64
64
**Now:**
65
65
66
-
-**True multi-genre:**each tag is a first-class citizen.
67
-
-**Autocomplete:**fast, consistent tagging.
68
-
-**Visual editing:**add/remove with chips.
69
-
-**Bulk-friendly:**multi-track editor (experimental) for common operations.
70
-
-**Library-aware:**a genre tree with counts, duration, and drag & drop.
71
-
-**Backwards-compatible:**your library keeps working; migrate at your pace.
66
+
-**True multi-genre:**each tag is a first-class citizen.
67
+
-**Autocomplete:**fast, consistent tagging.
68
+
-**Visual editing:**add/remove with chips.
69
+
-**Bulk-friendly:**multi-track editor (experimental) for common operations.
70
+
-**Library-aware:**a genre tree with counts, duration, and drag & drop.
71
+
-**Backwards-compatible:**your library keeps working; migrate at your pace.
72
72
73
73
### How to Use It
74
74
75
-
**Single Track**
75
+
#### Single Track
76
76
77
-
1. Right-click a track,**Properties**.
78
-
2. In**Genre**, start typing and pick from autocomplete.
79
-
3. Click the**×**to remove a tag.
80
-
4.**OK** or **Apply**to save.
77
+
1. Right-click a track,**Properties**.
78
+
2. In**Genre**, start typing and pick from autocomplete.
79
+
3. Click the**x**to remove a tag.
80
+
4.**OK** or **Apply**to save.
81
81
82
-
**Multi Track (Experimental)**
82
+
#### Multi Track (Experimental)
83
83
84
-
1. Select multiple tracks then right-click then**Properties**.
85
-
2. See the**common**genres across the selection.
84
+
1. Select multiple tracks then right-click then**Properties**.
85
+
2. See the**common**genres across the selection.
86
86
3. Add or remove tags in bulk.
87
87
4. Save: Mixxx preserves track-specific genres.
88
88
89
-
**Clean Up Old Text Tags**
89
+
#### Clean Up Old Text Tags
90
90
91
-
1. In the genre tree, right-click the**root**then**Edit Orphan Genres**.
92
-
2.**Add**new genres or**Link**strings to existing ones.
91
+
1. In the genre tree, right-click the**root**then**Edit Orphan Genres**.
92
+
2.**Add**new genres or**Link**strings to existing ones.
93
93
3. Repeat as needed, your sets keep running.
94
94
95
-
**Under the Hood (Brief)**
95
+
#### Under the Hood (Brief)
96
96
97
-
-**Stable IDs**for genres and a fast**join table**(`genre_tracks`) so filtering and counts are snappy.
98
-
- A central**Genre DAO**(data access layer) that maps between IDs and names and normalizes raw data.
99
-
- The UI always shows**human-friendly names**; the storage format stays robust behind the scenes.
97
+
-**Stable IDs**for genres and a fast**join table**(`genre_tracks`) so filtering and counts are snappy.
98
+
- A central**Genre DAO**(data access layer) that maps between IDs and names and normalizes raw data.
99
+
- The UI always shows**human-friendly names**; the storage format stays robust behind the scenes.
*This short video bundles all demos: single-track tag chips, multi-track bulk edit, the Genre Tree with drag-and-drop and **F2** rename, and the **Edit Orphan Genres** flow*
105
105
106
+
### What's Next
106
107
107
-
### What’s Next
108
+
This foundation unlocks a lot of potential. Based on community input, we're exploring:
108
109
109
-
This foundation unlocks a lot of potential. Based on community input, we’re exploring:
110
-
111
-
- A **full hierarchical** genre tree with multi-level editing.
112
-
-**Fuzzy autocomplete** to handle typos gracefully.
113
-
-**Search** that also matches genre names.
114
-
- Smarter **import/export** of genre structures (share your taxonomy).
115
-
- Better **metadata export** across formats for multi-genre fields.
116
-
- Optional **auto-conversion** of known strings to stable IDs on import.
110
+
- A **full hierarchical** genre tree with multi-level editing.
111
+
-**Fuzzy autocomplete** to handle typos gracefully.
112
+
-**Search** that also matches genre names.
113
+
- Smarter **import/export** of genre structures (share your taxonomy).
114
+
- Better **metadata export** across formats for multi-genre fields.
115
+
- Optional **auto-conversion** of known strings to stable IDs on import.
117
116
118
117
### Thank You
119
118
120
-
Huge thanks to the Mixxx mentors and community for guidance, reviews, and real-world feedback. This is a big step forward, and we’ll keep refining it together.
119
+
Huge thanks to the Mixxx mentors and community for guidance, reviews, and real-world feedback. This is a big step forward, and we'll keep refining it together.
0 commit comments