Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
d3833c6
Add YAML Dictionary Editor
Cadlaxa Apr 29, 2026
6370236
fix open yaml function for sub folders
Cadlaxa Apr 29, 2026
7d98495
Add Regex Find Replace and view entry index number
Cadlaxa Apr 30, 2026
a64cd2e
Revamp Find and Replace buttons
Cadlaxa May 1, 2026
ff91b83
Add context menu and UI tweaks + small fixes
Cadlaxa May 1, 2026
6677ac1
Edit presamp.ini files
Cadlaxa May 1, 2026
c571d36
minor presamp fix
Cadlaxa May 1, 2026
ee9725c
Merge branch 'master' of https://github.com/stakira/OpenUtau; branch …
Cadlaxa May 2, 2026
b465037
Merge branch 'master' of https://github.com/stakira/OpenUtau into dic…
Cadlaxa May 2, 2026
1d9fd43
Fix buttons
Cadlaxa May 2, 2026
b8b6c6d
same mechanics for mouse toggle
Cadlaxa May 2, 2026
8ad0330
Merge branch 'master' of https://github.com/stakira/OpenUtau into dic…
Cadlaxa May 29, 2026
dc11efb
Fix presamp parser
Cadlaxa May 30, 2026
4efbdf3
Code refactor (preserve quotes and comments and add comment entry)
Cadlaxa May 30, 2026
0ed90c6
Fix manage column to handle multiple objects
Cadlaxa May 30, 2026
baa7c54
Delimiter fix + comma cleaner for UI
Cadlaxa May 31, 2026
f8c81b2
Fixes a lot of things
Cadlaxa May 31, 2026
b00a9cd
Add phoneme list exceptions to Fallbacks and graphemes
Cadlaxa May 31, 2026
452d327
Merge branch 'master' of https://github.com/stakira/OpenUtau into dic…
Cadlaxa Jun 14, 2026
6832671
Merge branch 'master' of https://github.com/stakira/OpenUtau into dic…
Cadlaxa Jun 15, 2026
112082f
Add YAML/Presamp error checker
Cadlaxa Jun 16, 2026
466d949
Auto select yaml based on the track.phonemizer
Cadlaxa Jun 16, 2026
1e635f9
Added draggable cells to change their index
Cadlaxa Jun 21, 2026
f534f3b
Merge branch 'master' of https://github.com/stakira/OpenUtau into dic…
Cadlaxa Jun 21, 2026
dd2d356
Fix strings and text highlight
Cadlaxa Jun 21, 2026
66fa066
Merge branch 'master' of https://github.com/stakira/OpenUtau into dic…
Cadlaxa Jun 23, 2026
462fb4f
Entries multiple drag and drop, manage objects and UI improvements
Cadlaxa Jun 23, 2026
ed91ca2
Focus cell when adding an entry
Cadlaxa Jun 24, 2026
c53a366
Fix metadata creation
Cadlaxa Jun 24, 2026
f4e750f
Copy dictionary to vb folder function
Cadlaxa Jun 26, 2026
a3a849f
fix cut, copy, paste functions (data column blind)
Cadlaxa Jun 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions OpenUtau.Core/Util/Preferences.cs
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ public class SerializablePreferences {
public bool ShowExpressions = true;
public bool ShowPhonemizerTags = true;
public bool ShowNoteParams = true;
public bool ShowDictionaryEditor = false;
public Dictionary<string, string> DefaultResamplers = new Dictionary<string, string>();
public Dictionary<string, string> DefaultWavtools = new Dictionary<string, string>();
public string LyricHelper = string.Empty;
Expand Down
316 changes: 316 additions & 0 deletions OpenUtau/Controls/DictionaryEditorControl.axaml

Large diffs are not rendered by default.

767 changes: 767 additions & 0 deletions OpenUtau/Controls/DictionaryEditorControl.axaml.cs

Large diffs are not rendered by default.

25 changes: 25 additions & 0 deletions OpenUtau/Controls/PianoRoll.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -538,8 +538,25 @@
</Button>
</StackPanel>
</Border>

<Border Grid.Column="4">
<StackPanel Orientation="Horizontal">

<ToggleButton Classes="toolbar" Margin="0" Padding="1" Height="20" Width="20"
IsChecked="{Binding NotesViewModel.ShowDictionaryEditor}"
ToolTip.Tip="{DynamicResource pianoroll.toggle.dictionary}">
<Grid Width="18" Height="18">
<Path Classes="filled" Data="M3,3 H21 V21 H3 V3 Z M5,5 V19 H19 V5 H5 Z M7,7 H17 V9 H7 Z M7,11 H17 V13 H7 Z M7,15 H13 V17 H7 Z">
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX=".65" ScaleY=".65" />
<TranslateTransform X="-2" Y="-2"/>
</TransformGroup>
</Path.RenderTransform>
</Path>
</Grid>
</ToggleButton>

<ToggleButton Classes="toolbar" Margin="0" Padding="1" Height="20" Width="20" IsChecked="{Binding NotesViewModel.ShowNoteParams}"
ToolTip.Tip="{DynamicResource pianoroll.toggle.noteparams}">
<Grid Width="18" Height="18">
Expand Down Expand Up @@ -626,6 +643,14 @@
<c:NotePropertiesControl/>
</Border>

<Border Grid.Column="3" Grid.Row="0" Grid.RowSpan="6"
IsEnabled="{Binding NotesViewModel.ShowDictionaryEditor}"
IsVisible="{Binding NotesViewModel.ShowDictionaryEditor}"
Background="{DynamicResource SystemRegionBrush}" Padding="0"
BorderThickness="1,0,0,0" BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}">
<c:DictionaryEditorControl Part="{Binding NotesViewModel.Part}" />
</Border>

<Border Grid.Row="2" Grid.RowSpan="2" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
BoxShadow="inset 0 0 5 1 #3F000000" ClipToBounds="True" IsHitTestVisible="False">
<Grid>
Expand Down
14 changes: 14 additions & 0 deletions OpenUtau/Controls/PianoRoll.axaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1633,6 +1633,20 @@ bool OnKeyExtendedHandler(KeyEventArgs args) {
case Key.OemPipe:
if (isNone) {
notesVm.ShowNoteParams = !notesVm.ShowNoteParams;
if (notesVm.ShowNoteParams) {
notesVm.ShowDictionaryEditor = false;
}
return true;
}
break;
case Key.Oem2:
case Key.Divide:
if (isNone) {
notesVm.ShowDictionaryEditor = !notesVm.ShowDictionaryEditor;
if (notesVm.ShowDictionaryEditor) {
notesVm.ShowNoteParams = false;
}

return true;
}
break;
Expand Down
86 changes: 84 additions & 2 deletions OpenUtau/Strings/Strings.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -504,6 +504,7 @@ Warning: this option removes custom presets.</system:String>
<system:String x:Key="pianoroll.snapdiv">Snap Division</system:String>
<system:String x:Key="pianoroll.toggle.finalpitch">View Final Pitch to Render (R)</system:String>
<system:String x:Key="pianoroll.toggle.noteparams">View Note Parameters (\)</system:String>
<system:String x:Key="pianoroll.toggle.dictionary">View Dictionary Editor (/)</system:String>
<system:String x:Key="pianoroll.toggle.phoneme">View Phonemes (O)</system:String>
<system:String x:Key="pianoroll.toggle.pitch">View Pitch Bend (I)</system:String>
<system:String x:Key="pianoroll.toggle.snap">Toggle Snap (P)</system:String>
Expand Down Expand Up @@ -744,8 +745,6 @@ The voicebank may not work on another OS.</system:String>
<system:String x:Key="singersetup.textfileencoding.prompt">Choose an encoding that make file contents look right.</system:String>
<system:String x:Key="singersetup.title">Singer Setup</system:String>

<system:String x:Key="themeeditor.title">Theme Editor</system:String>

<system:String x:Key="tip.aliasbox">Override Alias</system:String>
<system:String x:Key="tip.exps">Numerical,Options Type
Left Button Draw: Set expressions
Expand Down Expand Up @@ -826,6 +825,89 @@ General
<system:String x:Key="welcome.start">Start</system:String>
<system:String x:Key="welcome.template">Template</system:String>

<system:String x:Key="themeeditor.title">Theme Editor</system:String>
<system:String x:Key="themeeditor.save">Save</system:String>
<system:String x:Key="themeeditor.cancel">Cancel</system:String>

<system:String x:Key="dict.setup">Dictionary Setup</system:String>
<system:String x:Key="dict.file">File</system:String>
<system:String x:Key="dict.file.none">None</system:String>
<system:String x:Key="dict.file.delete.tooltip">Delete File</system:String>
<system:String x:Key="dict.file.new.tooltip">New File</system:String>
<system:String x:Key="dict.file.refresh.tooltip">Refresh Folder</system:String>
<system:String x:Key="dict.file.new.title">Create New YAML File</system:String>
<system:String x:Key="dict.file.new.filename">Filename (e.g., my_dictionary.yaml)</system:String>
<system:String x:Key="dict.file.new.create">Create File</system:String>
<system:String x:Key="dict.file.new.create.tooltip">Creates a new blank YAML file</system:String>
<system:String x:Key="dict.file.delete.title">Delete File?</system:String>
<system:String x:Key="dict.object.delete.title">Delete Object?</system:String>
<system:String x:Key="dict.file.delete.confirm">Are you sure you want to permanently delete:</system:String>
<system:String x:Key="dict.cancel">Cancel</system:String>
<system:String x:Key="dict.delete">Delete</system:String>
<system:String x:Key="dict.object">Object</system:String>
<system:String x:Key="dict.manage.object">Manage Objects (Drag to reorder)</system:String>
<system:String x:Key="dict.object.delete.tooltip">Delete Object</system:String>
<system:String x:Key="dict.object.new.tooltip">Adds new Object</system:String>
<system:String x:Key="dict.cols.manage">cols</system:String>
<system:String x:Key="dict.cols.manage.tooltip">Manage Columns</system:String>
<system:String x:Key="dict.object.new.title">Create New Object</system:String>
<system:String x:Key="dict.object.new.name">Object Name (e.g., replacements)</system:String>
<system:String x:Key="dict.object.new.columns">Columns (e.g., from, to)</system:String>
<system:String x:Key="dict.object.new.create">Create Object</system:String>
<system:String x:Key="dict.object.new.create.tooltip">Generates the new object category</system:String>
<system:String x:Key="dict.cols.manage.title">Manage Columns</system:String>
<system:String x:Key="dict.cols.manage.name">Target Column Name (e.g., where)</system:String>

<system:String x:Key="dict.objs.manage">objs</system:String>
<system:String x:Key="dict.objs.manage.tooltip">Manage Objects</system:String>
<system:String x:Key="dict.add">Add</system:String>
<system:String x:Key="dict.add.tooltip">Adds the column to the grid</system:String>
<system:String x:Key="dict.remove">Remove</system:String>
<system:String x:Key="dict.remove.tooltip">Removes the column and its data</system:String>
<system:String x:Key="dict.file.open">Open YAML</system:String>
<system:String x:Key="dict.file.open.tooltip">Open in Text Editor</system:String>
<system:String x:Key="dict.file.save">Save YAML</system:String>
<system:String x:Key="dict.file.copy">Copy to VB</system:String>
<system:String x:Key="dict.file.copy.tooltip">Copy the selected plugin file to your Voicebank folder</system:String>
<system:String x:Key="dict.file.save.tooltip">Saves the YAML file</system:String>
<system:String x:Key="dict.file.save.ini">Save Presamp</system:String>
<system:String x:Key="dict.file.save.ini.tooltip">Save changes to presamp.ini</system:String>
<system:String x:Key="dict.file.open.ini">Open Presamp</system:String>
<system:String x:Key="dict.file.open.ini.tooltip">Browse for an existing presamp.ini file</system:String>
<system:String x:Key="dict.editor">Editor</system:String>
<system:String x:Key="dict.entry.comment">Add Comment</system:String>
<system:String x:Key="dict.entry.delete">Delete Entry</system:String>
<system:String x:Key="dict.entry.delete.tooltip">Deletes the selected row</system:String>
<system:String x:Key="dict.entry.add">Add Entry</system:String>
<system:String x:Key="dict.entry.add.tooltip">Adds a new blank row</system:String>
<system:String x:Key="dict.replace.title">Find &amp; Replace</system:String>
<system:String x:Key="dict.replace.column">Target Column:</system:String>
<system:String x:Key="dict.replace.column.tooltip">Select the column to search in</system:String>
<system:String x:Key="dict.replace.find">Find...</system:String>
<system:String x:Key="dict.replace.find.tooltip">Text to search for</system:String>
<system:String x:Key="dict.replace.replace">Replace With...</system:String>
<system:String x:Key="dict.replace.replace.tooltip">Text to replace the found text with</system:String>
<system:String x:Key="dict.replace.regex">Use Regular Expressions (Regex)</system:String>
<system:String x:Key="dict.replace.regex.tooltip">Enable to use Regular Expressions for searching</system:String>
<system:String x:Key="dict.replace.findbtn">Find Next</system:String>
<system:String x:Key="dict.replace.findbtn.tooltip">Find and highlight the next occurrence</system:String>
<system:String x:Key="dict.replace.replacebtn">Replace</system:String>
<system:String x:Key="dict.replace.replacebtn.tooltip">Replace the highlighted occurrence, or replace ALL if nothing is selected</system:String>
<system:String x:Key="dict.replace.findall">Find All</system:String>
<system:String x:Key="dict.replace.findall.tooltip">Highlight all matching occurrences</system:String>
<system:String x:Key="dict.replace.findprev.tooltip">Find previous occurrence (Up)</system:String>
<system:String x:Key="dict.replace.replaceall">Replace All</system:String>
<system:String x:Key="dict.replace.replaceall.tooltip">Replace every matching occurrence in the column at once</system:String>
<system:String x:Key="dict.menu.deselect">Deselect</system:String>
<system:String x:Key="dict.menu.cut">Cut</system:String>
<system:String x:Key="dict.menu.copy">Copy</system:String>
<system:String x:Key="dict.menu.paste">Paste</system:String>
<system:String x:Key="dict.error.syntax">Syntax Error</system:String>
<system:String x:Key="dict.error.line.error">Error at Line</system:String>
<system:String x:Key="dict.error.error.loading">Could not load file context to display the exact line.</system:String>
<system:String x:Key="dict.error.save.reload">Save and Reload</system:String>


<!-- Mix Effects (post-processing) -->
<system:String x:Key="mixfx.caption">Track Polish</system:String>
<system:String x:Key="mixfx.enabled">Enable on this track</system:String>
Expand Down
Loading
Loading