diff --git a/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs b/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs
index b0d5ee5e..633779d2 100644
--- a/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs
+++ b/TwitchDownloaderCLI/Modes/Arguments/ChatRenderArgs.cs
@@ -12,10 +12,13 @@ public class ChatRenderArgs
[Option('o', "output", Required = true, HelpText = "File the program will output to.")]
public string OutputFile { get; set; }
- [Option("background-color", Default = "#111111", HelpText = "Color of background in HEX string format.")]
+ [Option("background-color", Default = "#111111", HelpText = "The render background color in the string format of '#RRGGBB' or '#AARRGGBB' in hexadecimal.")]
public string BackgroundColor { get; set; }
- [Option("message-color", Default = "#ffffff", HelpText = "Color of messages in HEX string format.")]
+ [Option("alt-background-color", Default = "#191919", HelpText = "The alternate message background color in the string format of '#RRGGBB' or '#AARRGGBB' in hexadecimal. Requires --alternate-backgrounds")]
+ public string AlternateBackgroundColor { get; set; }
+
+ [Option("message-color", Default = "#ffffff", HelpText = "The message text color in the string format of '#RRGGBB' or '#AARRGGBB' in hexadecimal.")]
public string MessageColor { get; set; }
[Option('w', "chat-width", Default = 350, HelpText = "Width of chat render.")]
@@ -97,7 +100,10 @@ public class ChatRenderArgs
public int BadgeFilterMask { get; set; }
[Option("dispersion", Default = false, HelpText = "In November 2022 a Twitch API change made chat messages download only in whole seconds. If there are multiple messages on a second, they will be intelligently distributed over the second to improve chat flow. Requires an update rate less than 1.0 for effective results.")]
- public bool? DisperseCommentOffsets { get; set; }
+ public bool DisperseCommentOffsets { get; set; }
+
+ [Option("alternate-backgrounds", Default = false, HelpText = "Alternates the background color of every other chat message to help tell them apart.")]
+ public bool AlternateMessageBackgrounds { get; set; }
[Option("offline", Default = false, HelpText = "Render completely offline using only embedded emotes, badges, and bits from the input json.")]
public bool Offline { get; set; }
diff --git a/TwitchDownloaderCLI/Modes/RenderChat.cs b/TwitchDownloaderCLI/Modes/RenderChat.cs
index 7cbba1ac..d9d47d78 100644
--- a/TwitchDownloaderCLI/Modes/RenderChat.cs
+++ b/TwitchDownloaderCLI/Modes/RenderChat.cs
@@ -32,6 +32,7 @@ private static ChatRenderOptions GetRenderOptions(ChatRenderArgs inputOptions)
InputFile = inputOptions.InputFile,
OutputFile = inputOptions.OutputFile,
BackgroundColor = SKColor.Parse(inputOptions.BackgroundColor),
+ AlternateBackgroundColor = SKColor.Parse(inputOptions.AlternateBackgroundColor),
MessageColor = SKColor.Parse(inputOptions.MessageColor),
ChatHeight = inputOptions.ChatHeight,
ChatWidth = inputOptions.ChatWidth,
@@ -90,10 +91,11 @@ private static ChatRenderOptions GetRenderOptions(ChatRenderArgs inputOptions)
EmoteSpacingScale = inputOptions.ScaleEmoteSpace,
AccentIndentScale = inputOptions.ScaleAccentIndent,
AccentStrokeScale = inputOptions.ScaleAccentStroke,
- DisperseCommentOffsets = (bool)inputOptions.DisperseCommentOffsets
+ DisperseCommentOffsets = inputOptions.DisperseCommentOffsets,
+ AlternateMessageBackgrounds = inputOptions.AlternateMessageBackgrounds
};
- if (renderOptions.GenerateMask && renderOptions.BackgroundColor.Alpha == 255)
+ if (renderOptions.GenerateMask && renderOptions.BackgroundColor.Alpha == 255 && !(renderOptions.AlternateMessageBackgrounds! && renderOptions.AlternateBackgroundColor.Alpha != 255))
{
Console.WriteLine("[WARNING] - Generate mask option has been selected with an opaque background. You most likely want to set a transparent background with --background-color \"#00000000\"");
}
diff --git a/TwitchDownloaderCLI/README.md b/TwitchDownloaderCLI/README.md
index f04f0dc1..563f3c99 100644
--- a/TwitchDownloaderCLI/README.md
+++ b/TwitchDownloaderCLI/README.md
@@ -152,10 +152,13 @@ The path to the `.json` or `.json.gz` chat file input.
File the program will output to.
**--background-color**
-(Default: `#111111`) Color of background in HEX string format.
+(Default: `#111111`) The render background color in the string format of `#RRGGBB` or `#AARRGGBB` in hexadecimal.
+
+**--alt-background-color**
+(Default: `#191919`) The alternate message background color in the string format of `#RRGGBB` or `#AARRGGBB` in hexadecimal. Requires `--alternate-backgrounds`.
**--message-color**
-(Default: `#ffffff`) Color of messages in HEX string format.
+(Default: `#ffffff`) The message text color in the string format of `#RRGGBB` or `#AARRGGBB` in hexadecimal.
**-w / --chat-width**
(Default: `350`) Width of chat render.
@@ -240,6 +243,9 @@ Other = `1`, Broadcaster = `2`, Moderator = `4`, VIP = `8`, Subscriber = `16`, P
**--dispersion**
(Default: `false`) In November 2022 a Twitch API change made chat messages download only in whole seconds. If there are multiple messages on a second, they will be intelligently distributed over the second to improve chat flow. Requires an update rate less than 1.0 for effective results.
+**--alternate-backgrounds**
+(Default: `false`) Alternates the background color of every other chat message to help tell them apart.
+
**--offline**
(Default: `false`) Render completely offline using only embedded emotes, badges, and bits from the input json.
diff --git a/TwitchDownloaderCore/ChatRenderer.cs b/TwitchDownloaderCore/ChatRenderer.cs
index 9b7de55c..69d637af 100644
--- a/TwitchDownloaderCore/ChatRenderer.cs
+++ b/TwitchDownloaderCore/ChatRenderer.cs
@@ -512,6 +512,12 @@ private UpdateFrame GenerateUpdateFrame(int currentTick, int sectionDefaultYPos,
{
var comment = commentList[commentListIndex];
frameHeight -= comment.Image.Height + renderOptions.VerticalPadding;
+
+ if (renderOptions.AlternateMessageBackgrounds && comment.CommentIndex % 2 == 1)
+ {
+ frameCanvas.DrawRect(0, frameHeight - renderOptions.VerticalPadding / 2f, newFrame.Width, comment.Image.Height + renderOptions.VerticalPadding, renderOptions.AlternateBackgroundPaint);
+ }
+
frameCanvas.DrawBitmap(comment.Image, 0, frameHeight);
for (int i = 0; i < comment.Emotes.Count; i++)
diff --git a/TwitchDownloaderCore/Options/ChatRenderOptions.cs b/TwitchDownloaderCore/Options/ChatRenderOptions.cs
index 93f61173..ef00fdd7 100644
--- a/TwitchDownloaderCore/Options/ChatRenderOptions.cs
+++ b/TwitchDownloaderCore/Options/ChatRenderOptions.cs
@@ -10,6 +10,10 @@ public class ChatRenderOptions
public string InputFile { get; set; }
public string OutputFile { get; set; }
public SKColor BackgroundColor { get; set; }
+ public SKColor AlternateBackgroundColor { get; set; }
+ private SKPaint _alternateBackgroundPaint;
+ public SKPaint AlternateBackgroundPaint => _alternateBackgroundPaint ??= new SKPaint { Color = AlternateBackgroundColor, BlendMode = SKBlendMode.Src };
+ public bool AlternateMessageBackgrounds { get; set; }
public SKColor MessageColor { get; set; }
public int ChatHeight { get; set; }
public int ChatWidth { get; set; }
diff --git a/TwitchDownloaderWPF/App.config b/TwitchDownloaderWPF/App.config
index 7dd5e9c0..929b6697 100644
--- a/TwitchDownloaderWPF/App.config
+++ b/TwitchDownloaderWPF/App.config
@@ -59,6 +59,9 @@
True
+
+ 255
+
17
@@ -68,6 +71,18 @@
17
+
+ 255
+
+
+ 19
+
+
+ 19
+
+
+ 19
+
255
@@ -86,9 +101,6 @@
H264
-
- 255
-
@@ -227,6 +239,9 @@
False
+
+ False
+
\ No newline at end of file
diff --git a/TwitchDownloaderWPF/PageChatRender.xaml b/TwitchDownloaderWPF/PageChatRender.xaml
index 5613713e..568bd3c2 100644
--- a/TwitchDownloaderWPF/PageChatRender.xaml
+++ b/TwitchDownloaderWPF/PageChatRender.xaml
@@ -50,12 +50,14 @@
+
+
@@ -68,6 +70,7 @@
(?):
+ (?):
@@ -76,6 +79,7 @@
+
diff --git a/TwitchDownloaderWPF/PageChatRender.xaml.cs b/TwitchDownloaderWPF/PageChatRender.xaml.cs
index 8110a7bf..e180e12f 100644
--- a/TwitchDownloaderWPF/PageChatRender.xaml.cs
+++ b/TwitchDownloaderWPF/PageChatRender.xaml.cs
@@ -88,12 +88,15 @@ private void UpdateActionButtons(bool isRendering)
public ChatRenderOptions GetOptions(string filename)
{
SKColor backgroundColor = new(colorBackground.SelectedColor.Value.R, colorBackground.SelectedColor.Value.G, colorBackground.SelectedColor.Value.B, colorBackground.SelectedColor.Value.A);
+ SKColor altBackgroundColor = new(colorAlternateBackground.SelectedColor.Value.R, colorAlternateBackground.SelectedColor.Value.G, colorAlternateBackground.SelectedColor.Value.B, colorAlternateBackground.SelectedColor.Value.A);
SKColor messageColor = new(colorFont.SelectedColor.Value.R, colorFont.SelectedColor.Value.G, colorFont.SelectedColor.Value.B);
ChatRenderOptions options = new()
{
OutputFile = filename,
InputFile = textJson.Text,
BackgroundColor = backgroundColor,
+ AlternateBackgroundColor = altBackgroundColor,
+ AlternateMessageBackgrounds = (bool)checkAlternateMessageBackgrounds.IsChecked,
ChatHeight = int.Parse(textHeight.Text),
ChatWidth = int.Parse(textWidth.Text),
BttvEmotes = (bool)checkBTTV.IsChecked,
@@ -129,6 +132,7 @@ public ChatRenderOptions GetOptions(string filename)
SubMessages = (bool)checkSub.IsChecked,
ChatBadges = (bool)checkBadge.IsChecked,
Offline = (bool)checkOffline.IsChecked,
+ AllowUnlistedEmotes = true,
DisperseCommentOffsets = (bool)checkDispersion.IsChecked,
LogFfmpegOutput = true
};
@@ -172,7 +176,8 @@ private void LoadSettings()
comboFont.SelectedItem = Settings.Default.Font;
checkOutline.IsChecked = Settings.Default.Outline;
checkTimestamp.IsChecked = Settings.Default.Timestamp;
- colorBackground.SelectedColor = System.Windows.Media.Color.FromArgb((byte)Settings.Default.BackgroundColorA, (byte)Settings.Default.BackgroundColorR, (byte)Settings.Default.BackgroundColorG, (byte)Settings.Default.BackgroundColorB);
+ colorBackground.SelectedColor = System.Windows.Media.Color.FromArgb(Settings.Default.BackgroundColorA, Settings.Default.BackgroundColorR, Settings.Default.BackgroundColorG, Settings.Default.BackgroundColorB);
+ colorAlternateBackground.SelectedColor = System.Windows.Media.Color.FromArgb(Settings.Default.AlternateBackgroundColorA, Settings.Default.AlternateBackgroundColorR, Settings.Default.AlternateBackgroundColorG, Settings.Default.AlternateBackgroundColorB);
checkFFZ.IsChecked = Settings.Default.FFZEmotes;
checkBTTV.IsChecked = Settings.Default.BTTVEmotes;
checkSTV.IsChecked = Settings.Default.STVEmotes;
@@ -180,7 +185,7 @@ private void LoadSettings()
textWidth.Text = Settings.Default.Width.ToString();
numFontSize.Value = Settings.Default.FontSize;
textUpdateTime.Text = Settings.Default.UpdateTime.ToString("0.0#");
- colorFont.SelectedColor = System.Windows.Media.Color.FromRgb((byte)Settings.Default.FontColorR, (byte)Settings.Default.FontColorG, (byte)Settings.Default.FontColorB);
+ colorFont.SelectedColor = System.Windows.Media.Color.FromRgb(Settings.Default.FontColorR, Settings.Default.FontColorG, Settings.Default.FontColorB);
textFramerate.Text = Settings.Default.Framerate.ToString();
checkMask.IsChecked = Settings.Default.GenerateMask;
CheckRenderSharpening.IsChecked = Settings.Default.ChatRenderSharpening;
@@ -201,6 +206,7 @@ private void LoadSettings()
textBannedWordsList.Text = Settings.Default.BannedWordsList;
checkOffline.IsChecked = Settings.Default.Offline;
checkDispersion.IsChecked = Settings.Default.DisperseCommentOffsets;
+ checkAlternateMessageBackgrounds.IsChecked = Settings.Default.AlternateMessageBackgrounds;
RadioEmojiNotoColor.IsChecked = (EmojiVendor)Settings.Default.RenderEmojiVendor == EmojiVendor.GoogleNotoColor;
RadioEmojiTwemoji.IsChecked = (EmojiVendor)Settings.Default.RenderEmojiVendor == EmojiVendor.TwitterTwemoji;
RadioEmojiNone.IsChecked = (EmojiVendor)Settings.Default.RenderEmojiVendor == EmojiVendor.None;
@@ -287,6 +293,10 @@ public void SaveSettings()
Settings.Default.BackgroundColorG = colorBackground.SelectedColor.Value.G;
Settings.Default.BackgroundColorB = colorBackground.SelectedColor.Value.B;
Settings.Default.BackgroundColorA = colorBackground.SelectedColor.Value.A;
+ Settings.Default.AlternateBackgroundColorR = colorAlternateBackground.SelectedColor.Value.R;
+ Settings.Default.AlternateBackgroundColorG = colorAlternateBackground.SelectedColor.Value.G;
+ Settings.Default.AlternateBackgroundColorB = colorAlternateBackground.SelectedColor.Value.B;
+ Settings.Default.AlternateBackgroundColorA = colorAlternateBackground.SelectedColor.Value.A;
Settings.Default.FFZEmotes = (bool)checkFFZ.IsChecked;
Settings.Default.BTTVEmotes = (bool)checkBTTV.IsChecked;
Settings.Default.STVEmotes = (bool)checkSTV.IsChecked;
@@ -299,6 +309,7 @@ public void SaveSettings()
Settings.Default.ChatBadges = (bool)checkBadge.IsChecked;
Settings.Default.Offline = (bool)checkOffline.IsChecked;
Settings.Default.DisperseCommentOffsets = (bool)checkDispersion.IsChecked;
+ Settings.Default.AlternateMessageBackgrounds = (bool)checkAlternateMessageBackgrounds.IsChecked;
if (comboFormat.SelectedItem != null)
{
Settings.Default.VideoContainer = ((VideoContainer)comboFormat.SelectedItem).Name;
@@ -387,7 +398,7 @@ private bool ValidateInputs()
return false;
}
- if (checkMask.IsChecked == false && colorBackground.SelectedColor!.Value.A < 255)
+ if (checkMask.IsChecked == false && (colorBackground.SelectedColor!.Value.A < 255 || ((bool)checkAlternateMessageBackgrounds.IsChecked! && colorAlternateBackground.SelectedColor!.Value.A < 255)))
{
if (((VideoContainer)comboFormat.SelectedItem).Name is not "MOV" and not "WEBM" ||
((Codec)comboCodec.SelectedItem).Name is not "RLE" and not "ProRes" and not "VP8" and not "VP9")
@@ -397,7 +408,7 @@ private bool ValidateInputs()
}
}
- if (checkMask.IsChecked == true && colorBackground.SelectedColor!.Value.A == 255)
+ if (checkMask.IsChecked == true && colorBackground.SelectedColor!.Value.A == 255 && !((bool)checkAlternateMessageBackgrounds.IsChecked! && colorAlternateBackground.SelectedColor!.Value.A != 255))
{
AppendLog(Translations.Strings.ErrorLog + Translations.Strings.MaskWithNoAlpha);
return false;
diff --git a/TwitchDownloaderWPF/Properties/Settings.Designer.cs b/TwitchDownloaderWPF/Properties/Settings.Designer.cs
index b7b7f9b8..558c464b 100644
--- a/TwitchDownloaderWPF/Properties/Settings.Designer.cs
+++ b/TwitchDownloaderWPF/Properties/Settings.Designer.cs
@@ -154,12 +154,24 @@ public bool STVEmotes {
}
}
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("255")]
+ public byte BackgroundColorA {
+ get {
+ return ((byte)(this["BackgroundColorA"]));
+ }
+ set {
+ this["BackgroundColorA"] = value;
+ }
+ }
+
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("17")]
- public int BackgroundColorR {
+ public byte BackgroundColorR {
get {
- return ((int)(this["BackgroundColorR"]));
+ return ((byte)(this["BackgroundColorR"]));
}
set {
this["BackgroundColorR"] = value;
@@ -169,9 +181,9 @@ public int BackgroundColorR {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("17")]
- public int BackgroundColorG {
+ public byte BackgroundColorG {
get {
- return ((int)(this["BackgroundColorG"]));
+ return ((byte)(this["BackgroundColorG"]));
}
set {
this["BackgroundColorG"] = value;
@@ -181,9 +193,9 @@ public int BackgroundColorG {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("17")]
- public int BackgroundColorB {
+ public byte BackgroundColorB {
get {
- return ((int)(this["BackgroundColorB"]));
+ return ((byte)(this["BackgroundColorB"]));
}
set {
this["BackgroundColorB"] = value;
@@ -193,9 +205,57 @@ public int BackgroundColorB {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("255")]
- public int FontColorR {
+ public byte AlternateBackgroundColorA {
+ get {
+ return ((byte)(this["AlternateBackgroundColorA"]));
+ }
+ set {
+ this["AlternateBackgroundColorA"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("19")]
+ public byte AlternateBackgroundColorR {
+ get {
+ return ((byte)(this["AlternateBackgroundColorR"]));
+ }
+ set {
+ this["AlternateBackgroundColorR"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("19")]
+ public byte AlternateBackgroundColorG {
+ get {
+ return ((byte)(this["AlternateBackgroundColorG"]));
+ }
+ set {
+ this["AlternateBackgroundColorG"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("19")]
+ public byte AlternateBackgroundColorB {
+ get {
+ return ((byte)(this["AlternateBackgroundColorB"]));
+ }
+ set {
+ this["AlternateBackgroundColorB"] = value;
+ }
+ }
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("255")]
+ public byte FontColorR {
get {
- return ((int)(this["FontColorR"]));
+ return ((byte)(this["FontColorR"]));
}
set {
this["FontColorR"] = value;
@@ -205,9 +265,9 @@ public int FontColorR {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("255")]
- public int FontColorG {
+ public byte FontColorG {
get {
- return ((int)(this["FontColorG"]));
+ return ((byte)(this["FontColorG"]));
}
set {
this["FontColorG"] = value;
@@ -217,9 +277,9 @@ public int FontColorG {
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("255")]
- public int FontColorB {
+ public byte FontColorB {
get {
- return ((int)(this["FontColorB"]));
+ return ((byte)(this["FontColorB"]));
}
set {
this["FontColorB"] = value;
@@ -262,18 +322,6 @@ public string VideoCodec {
}
}
- [global::System.Configuration.UserScopedSettingAttribute()]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Configuration.DefaultSettingValueAttribute("255")]
- public int BackgroundColorA {
- get {
- return ((int)(this["BackgroundColorA"]));
- }
- set {
- this["BackgroundColorA"] = value;
- }
- }
-
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
@@ -825,5 +873,17 @@ public bool DownloadThrottleEnabled {
this["DownloadThrottleEnabled"] = value;
}
}
+
+ [global::System.Configuration.UserScopedSettingAttribute()]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Configuration.DefaultSettingValueAttribute("False")]
+ public bool AlternateMessageBackgrounds {
+ get {
+ return ((bool)(this["AlternateMessageBackgrounds"]));
+ }
+ set {
+ this["AlternateMessageBackgrounds"] = value;
+ }
+ }
}
}
diff --git a/TwitchDownloaderWPF/Properties/Settings.settings b/TwitchDownloaderWPF/Properties/Settings.settings
index ee086c65..5aeba779 100644
--- a/TwitchDownloaderWPF/Properties/Settings.settings
+++ b/TwitchDownloaderWPF/Properties/Settings.settings
@@ -35,22 +35,37 @@
True
-
+
+ 255
+
+
17
-
+
17
-
+
17
-
+
255
-
+
+ 19
+
+
+ 19
+
+
+ 19
+
+
255
-
+
+ 255
+
+
255
@@ -62,9 +77,6 @@
H264
-
- 255
-
@@ -203,6 +215,9 @@
False
+
+ False
+
diff --git a/TwitchDownloaderWPF/README.md b/TwitchDownloaderWPF/README.md
index 915e2fbd..8790e58b 100644
--- a/TwitchDownloaderWPF/README.md
+++ b/TwitchDownloaderWPF/README.md
@@ -156,6 +156,8 @@ the *Partial Render* option to render a smaller section of the chat, see Figure
**Background Color**: The background color of the output chat render.
+**Alt Background Color**: The alternate message background color. Requires *Alternate Backgrounds* be enabled.
+
#### Rendering
**Outline**: Adds a thin black outline to usernames and messages.
@@ -170,6 +172,8 @@ the *Partial Render* option to render a smaller section of the chat, see Figure
**Dispersion**: In November 2022 a Twitch API change made chat messages download only in whole seconds. If dispersion is enabled and there are multiple messages on a second, they will be intelligently distributed over the second to improve chat flow. Requires an update rate less than 1.0 for effective results.
+**Alternate Backgrounds**: Alternates the background color of every other chat message to help tell them apart.
+
**BTTV Emotes**: Enables emotes from BTTV in the render.
**FFZ Emotes**: Enables emotes from FFZ in the render.
diff --git a/TwitchDownloaderWPF/Translations/Strings.Designer.cs b/TwitchDownloaderWPF/Translations/Strings.Designer.cs
index 699dcb88..462e98e3 100644
--- a/TwitchDownloaderWPF/Translations/Strings.Designer.cs
+++ b/TwitchDownloaderWPF/Translations/Strings.Designer.cs
@@ -86,6 +86,33 @@ public static string AlphaNotSupportedByCodec {
}
}
+ ///
+ /// Looks up a localized string similar to Alt Background Color:.
+ ///
+ public static string AlternateBackgroundColor {
+ get {
+ return ResourceManager.GetString("AlternateBackgroundColor", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Alternate Backgrounds .
+ ///
+ public static string AlternateMessageBackgrounds {
+ get {
+ return ResourceManager.GetString("AlternateMessageBackgrounds", resourceCulture);
+ }
+ }
+
+ ///
+ /// Looks up a localized string similar to Alternates the background color of every other chat message to help tell them apart..
+ ///
+ public static string AlternateMessageBackgroundsTooltip {
+ get {
+ return ResourceManager.GetString("AlternateMessageBackgroundsTooltip", resourceCulture);
+ }
+ }
+
///
/// Looks up a localized string similar to Language .
///
diff --git a/TwitchDownloaderWPF/Translations/Strings.pl.resx b/TwitchDownloaderWPF/Translations/Strings.pl.resx
index d77c20f1..1cb540db 100644
--- a/TwitchDownloaderWPF/Translations/Strings.pl.resx
+++ b/TwitchDownloaderWPF/Translations/Strings.pl.resx
@@ -738,4 +738,7 @@
formatowanie crop_start_custom i crop_end_custom jest bazowane na
+
+ Alternate Backgrounds Leave a trailing space
+
\ No newline at end of file
diff --git a/TwitchDownloaderWPF/Translations/Strings.resx b/TwitchDownloaderWPF/Translations/Strings.resx
index 38fd7cd5..d58cbf5a 100644
--- a/TwitchDownloaderWPF/Translations/Strings.resx
+++ b/TwitchDownloaderWPF/Translations/Strings.resx
@@ -752,4 +752,13 @@
Unable to download ffmpeg. Please manually download it from {0} and place the file at {1}
+
+ Alt Background Color:
+
+
+ Alternate Backgrounds Leave a trailing space
+
+
+ Alternates the background color of every other chat message to help tell them apart.
+
\ No newline at end of file
diff --git a/TwitchDownloaderWPF/Translations/Strings.ru.resx b/TwitchDownloaderWPF/Translations/Strings.ru.resx
index 51c61555..dbccf7e7 100644
--- a/TwitchDownloaderWPF/Translations/Strings.ru.resx
+++ b/TwitchDownloaderWPF/Translations/Strings.ru.resx
@@ -738,4 +738,7 @@
crop_start_custom and crop_end_custom форматирование основанно на
+
+ Alternate Backgrounds Leave a trailing space
+
\ No newline at end of file
diff --git a/TwitchDownloaderWPF/Translations/Strings.tr.resx b/TwitchDownloaderWPF/Translations/Strings.tr.resx
index 9da4092e..aa20e294 100644
--- a/TwitchDownloaderWPF/Translations/Strings.tr.resx
+++ b/TwitchDownloaderWPF/Translations/Strings.tr.resx
@@ -736,4 +736,7 @@
C# standard TimeSpan format strings
+
+ Alternate Backgrounds Leave a trailing space
+
diff --git a/TwitchDownloaderWPF/Translations/Strings.zh.resx b/TwitchDownloaderWPF/Translations/Strings.zh.resx
index 3fb47185..3a4e5062 100644
--- a/TwitchDownloaderWPF/Translations/Strings.zh.resx
+++ b/TwitchDownloaderWPF/Translations/Strings.zh.resx
@@ -737,4 +737,7 @@
C#标准的时间跨度格式字符串
+
+ Alternate Backgrounds Leave a trailing space
+
\ No newline at end of file