Compare commits

...

6 Commits

Author SHA1 Message Date
bmgjet 9a711cffe2
more res, lang fix, exception handling 2024-12-28 18:43:17 +13:00
bmgjet 76847ad258
Delete Ruyi-GUI/AIIcon.ico 2024-12-28 18:42:32 +13:00
bmgjet 6c83e9dd0b
Delete Ruyi-GUI/Form1.resx 2024-12-28 18:42:21 +13:00
bmgjet 0d4e23fad0
Delete Ruyi-GUI/Form1.cs 2024-12-28 18:42:13 +13:00
bmgjet b652740c9d
Delete Ruyi-GUI/Form1.Designer.cs 2024-12-28 18:42:06 +13:00
bmgjet ef46d24f71
Icon, More res, Lang fix, Exception handling 2024-12-28 18:40:05 +13:00
8 changed files with 208 additions and 165 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -1,6 +1,6 @@
namespace Ruyi_GUI
{
partial class Form1
partial class GUIForm
{
/// <summary>
/// Required designer variable.
@ -29,7 +29,7 @@
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(GUIForm));
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.pictureBox2 = new System.Windows.Forms.PictureBox();
this.Img1lbl = new System.Windows.Forms.Label();
@ -66,7 +66,6 @@
this.PlayVideo = new System.Windows.Forms.Button();
this.FileWatch = new System.Windows.Forms.Timer(this.components);
this.AddJob = new System.Windows.Forms.Button();
this.JobList = new System.Windows.Forms.ListBox();
this.RemoveJob = new System.Windows.Forms.Button();
this.RunJobs = new System.Windows.Forms.Button();
this.JobsTimer = new System.Windows.Forms.Timer(this.components);
@ -114,6 +113,7 @@
this.Error20 = new System.Windows.Forms.Label();
this.Error21 = new System.Windows.Forms.Label();
this.Error22 = new System.Windows.Forms.Label();
this.JobList = new System.Windows.Forms.ListBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
this.panel1.SuspendLayout();
@ -280,7 +280,9 @@
"512",
"640",
"768",
"896"});
"896",
"960",
"1024"});
this.Resolution.Location = new System.Drawing.Point(166, 372);
this.Resolution.Margin = new System.Windows.Forms.Padding(2);
this.Resolution.MaxLength = 3;
@ -505,7 +507,7 @@
this.GenerateButton.Location = new System.Drawing.Point(6, 513);
this.GenerateButton.Margin = new System.Windows.Forms.Padding(2);
this.GenerateButton.Name = "GenerateButton";
this.GenerateButton.Size = new System.Drawing.Size(544, 30);
this.GenerateButton.Size = new System.Drawing.Size(542, 30);
this.GenerateButton.TabIndex = 34;
this.GenerateButton.Text = "Generate Video";
this.GenerateButton.UseVisualStyleBackColor = true;
@ -530,28 +532,19 @@
//
// AddJob
//
this.AddJob.Location = new System.Drawing.Point(556, 451);
this.AddJob.Location = new System.Drawing.Point(556, 456);
this.AddJob.Name = "AddJob";
this.AddJob.Size = new System.Drawing.Size(101, 31);
this.AddJob.Size = new System.Drawing.Size(101, 26);
this.AddJob.TabIndex = 36;
this.AddJob.Text = "Add As Job";
this.AddJob.UseVisualStyleBackColor = true;
this.AddJob.Click += new System.EventHandler(this.AddJob_Click);
//
// JobList
//
this.JobList.FormattingEnabled = true;
this.JobList.Location = new System.Drawing.Point(556, 12);
this.JobList.Name = "JobList";
this.JobList.Size = new System.Drawing.Size(228, 433);
this.JobList.TabIndex = 37;
this.JobList.SelectedIndexChanged += new System.EventHandler(this.JobList_SelectedIndexChanged);
//
// RemoveJob
//
this.RemoveJob.Location = new System.Drawing.Point(683, 451);
this.RemoveJob.Location = new System.Drawing.Point(683, 456);
this.RemoveJob.Name = "RemoveJob";
this.RemoveJob.Size = new System.Drawing.Size(101, 31);
this.RemoveJob.Size = new System.Drawing.Size(101, 26);
this.RemoveJob.TabIndex = 38;
this.RemoveJob.Text = "Remove Job";
this.RemoveJob.UseVisualStyleBackColor = true;
@ -1062,11 +1055,21 @@
this.Error22.Text = "python.exe is not running. Maybe it crashed, Please check the log.txt";
this.Error22.Visible = false;
//
// Form1
// JobList
//
this.JobList.FormattingEnabled = true;
this.JobList.Location = new System.Drawing.Point(558, 8);
this.JobList.Name = "JobList";
this.JobList.Size = new System.Drawing.Size(225, 446);
this.JobList.TabIndex = 80;
this.JobList.SelectedIndexChanged += new System.EventHandler(this.JobList_SelectedIndexChanged);
//
// GUIForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(552, 577);
this.ClientSize = new System.Drawing.Size(552, 580);
this.Controls.Add(this.JobList);
this.Controls.Add(this.Error22);
this.Controls.Add(this.Error21);
this.Controls.Add(this.Error20);
@ -1102,7 +1105,6 @@
this.Controls.Add(this.panel1);
this.Controls.Add(this.RunJobs);
this.Controls.Add(this.RemoveJob);
this.Controls.Add(this.JobList);
this.Controls.Add(this.AddJob);
this.Controls.Add(this.PlayVideo);
this.Controls.Add(this.GenerateButton);
@ -1111,7 +1113,7 @@
this.Margin = new System.Windows.Forms.Padding(2);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form1";
this.Name = "GUIForm";
this.Text = "Ruyi-GUI";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
@ -1161,7 +1163,6 @@
private System.Windows.Forms.Button PlayVideo;
private System.Windows.Forms.Timer FileWatch;
private System.Windows.Forms.Button AddJob;
private System.Windows.Forms.ListBox JobList;
private System.Windows.Forms.Button RemoveJob;
private System.Windows.Forms.Button RunJobs;
private System.Windows.Forms.Timer JobsTimer;
@ -1209,6 +1210,7 @@
private System.Windows.Forms.Label Error20;
private System.Windows.Forms.Label Error21;
private System.Windows.Forms.Label Error22;
private System.Windows.Forms.ListBox JobList;
}
}

View File

@ -14,6 +14,7 @@ using System.Drawing;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Linq.Expressions;
using System.Management;
using System.Net;
using System.Net.Http;
@ -26,7 +27,7 @@ using System.Windows.Forms;
namespace Ruyi_GUI
{
public partial class Form1 : Form
public partial class GUIForm : Form
{
public static List<string> LogMessages = new List<string>();
public string[] PythonCode;
@ -37,7 +38,7 @@ namespace Ruyi_GUI
public string GPUInfo;
public int MaxVram = 0;
public Form1()
public GUIForm()
{
InitializeComponent();
if (File.Exists("Lang.cfg")) { LoadLangFile(this.Controls, File.ReadAllLines("Lang.cfg")); }
@ -60,7 +61,7 @@ namespace Ruyi_GUI
{
ZipFile.ExtractToDirectory("Ruyi-Models.zip", Path.Combine(AssemblyDirectory()));
Thread.Sleep(1000);
File.Delete("Ruyi-Models.zip");
try { File.Delete("Ruyi-Models.zip"); } catch { }
}
}
}
@ -103,11 +104,12 @@ namespace Ruyi_GUI
{
if (control is Label || control is Button)
{
string controlname = control.Name + ",";
foreach (string s in strings)
{
if (s.StartsWith(control.Name))
if (s.StartsWith(controlname))
{
control.Text = s.Replace(control.Name + ",", "");
control.Text = s.Replace(controlname, "");
break;
}
}
@ -118,6 +120,7 @@ namespace Ruyi_GUI
private string SettingsString() { return Img1.Text + "|" + Img2.Text + "|" + VideoOut.Text + "|" + FrameRate.Text + "|" + AspectRatio.Text + "|" + Resolution.Text + "|" + Direction.Text + "|" + Motion.Text + "|" + GPUOffload.Text + "|" + LowMemoryMode.Checked + "|" + Steps.Text + "|" + Cfg.Text + "|" + Seed.Text + "|" + Scheduler.Text + "|" + VideoRes.Text + "|" + Loratxt.Text + "|" + Weighttxt.Text + "|" + Updates.Checked + "|" + discordhook.Text; }
private void SaveSettings() { File.WriteAllText("Config.cfg", SettingsString()); }
private void LoadSettings(string Settings, bool ShowError = true)
@ -125,25 +128,25 @@ namespace Ruyi_GUI
try
{
string[] SSettings = Settings.Split('|');
Img1.Text = SSettings[0];
Img2.Text = SSettings[1];
VideoOut.Text = SSettings[2];
FrameRate.Text = SSettings[3];
AspectRatio.Text = SSettings[4];
Resolution.Text = SSettings[5];
Direction.Text = SSettings[6];
Motion.Text = SSettings[7];
GPUOffload.Text = SSettings[8];
LowMemoryMode.Checked = bool.Parse(SSettings[9]);
Steps.Text = SSettings[10];
Cfg.Text = SSettings[11];
Seed.Text = SSettings[12];
Scheduler.Text = SSettings[13];
VideoRes.Text = SSettings[14];
Loratxt.Text = SSettings[15];
Weighttxt.Text = SSettings[16];
Updates.Checked = bool.Parse(SSettings[17]);
discordhook.Text = SSettings[18];
try { Img1.Text = SSettings[0]; } catch { }
try { Img2.Text = SSettings[1]; } catch { }
try { VideoOut.Text = SSettings[2]; } catch { }
try { FrameRate.Text = SSettings[3]; } catch { }
try { AspectRatio.Text = SSettings[4]; } catch { }
try { Resolution.Text = SSettings[5]; } catch { }
try { Direction.Text = SSettings[6]; } catch { }
try { Motion.Text = SSettings[7]; } catch { }
try { GPUOffload.Text = SSettings[8]; } catch { }
try { LowMemoryMode.Checked = bool.Parse(SSettings[9]); } catch { }
try { Steps.Text = SSettings[10]; } catch { }
try { Cfg.Text = SSettings[11]; } catch { }
try { Seed.Text = SSettings[12]; } catch { }
try { Scheduler.Text = SSettings[13]; } catch { }
try { VideoRes.Text = SSettings[14]; } catch { }
try { Loratxt.Text = SSettings[15]; } catch { }
try { Weighttxt.Text = SSettings[16]; } catch { }
try { Updates.Checked = bool.Parse(SSettings[17]); } catch { }
try { discordhook.Text = SSettings[18]; } catch { }
}
catch
{
@ -152,11 +155,19 @@ namespace Ruyi_GUI
MessageBox.Show(FaultLoadinglbl.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
try
{
if (File.Exists(Img1.Text)) { pictureBox1.BackgroundImage = new Bitmap(Img1.Text); }
else { pictureBox1.BackgroundImage = null; }
}
catch { }
try
{
if (File.Exists(Img2.Text)) { pictureBox2.BackgroundImage = new Bitmap(Img2.Text); }
else { pictureBox2.BackgroundImage = null; }
}
catch { }
}
private string[] NvidiaSMI()
{
@ -216,10 +227,19 @@ namespace Ruyi_GUI
private void LogFiltered(string message)
{
if (string.IsNullOrEmpty(message)) { return; }
if (message.Contains("%|")) { LogMessages.Add(message + GPUInfo); }
if (message.StartsWith("Fetching "))
{
if (message.Contains("files: 100%|")) { message = "Loading Ai..."; }
LogMessages.Add(message);
AppendTextBox(message + GPUInfo);
return;
}
if (message.Contains("%|"))
{
LogMessages.Add(message + GPUInfo);
AppendTextBox(message + GPUInfo);
}
else { LogMessages.Add(message); }
if (message.StartsWith("Fetching ")) { AppendTextBox(message); return; }
if (message.Contains("%")) { AppendTextBox(message + GPUInfo); }
if (message.Contains("100%") && Not100) { Not100 = false; return; }
if (message.Contains("100%"))
{
@ -231,11 +251,15 @@ namespace Ruyi_GUI
LogMessages.Add("Finished Generation @ " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "[" + Math.Round(Elapsed.TotalSeconds, 2) + "s]");
if (DoingJobs)
{
while (!File.Exists(VideoOut.Text)) { Thread.Sleep(500); }
DoingJobs = false;
while (!File.Exists(VideoOut.Text)) { Thread.Sleep(1000); }
string Job = Path.Combine("Jobs", JobList.Items[0].ToString());
if (File.Exists(Job)) { File.Delete(Job); }
if (File.Exists(Job))
{
Thread.Sleep(500);
try { File.Delete(Job); } catch { }
}
JobList.Items.RemoveAt(0);
DoingJobs = false;
if (!string.IsNullOrEmpty(discordhook.Text) && discordhook.Text.StartsWith(@"https://discord.")) { DiscordPostFile(discordhook.Text, VideoOut.Text); }
return;
}
@ -361,16 +385,25 @@ namespace Ruyi_GUI
private void ExecuteCommand()
{
ControlsUpdate(false);
string CallCode = ParsePythonCode();
if (string.IsNullOrEmpty(CallCode)) { return; }
Restart:
try
{
File.WriteAllText(Path.Combine("Ruyi-Models-main", "i2v.py"), CallCode);
if (File.Exists(VideoOut.Text)) { File.Move(VideoOut.Text, VideoOut.Text.Replace(".mp4", "-" + GetTimestamp() + ".mp4")); }
if (File.Exists(VideoOut.Text)) { Thread.Sleep(500); try { File.Move(VideoOut.Text, VideoOut.Text.Replace(".mp4", "-" + GetTimestamp() + ".mp4")); } catch { } }
}
catch
{
Thread.Sleep(1000);
goto Restart;
}
StartTime = DateTime.Now;
LogMessages.Add("Starting Generation: [" + FrameRate.Text + "-" + Resolution.Text + "-" + (LowMemoryMode.Checked ? "Lowmem" : "Normal") + "-" + GPUOffload.Text + "] " + Path.GetFileName(Img1.Text) + " @ " + StartTime.ToString("yyyy-MM-dd HH:mm:ss"));
Task.Run(() =>
{
MaxVram = 0;
ControlsUpdate(false);
AppendTextBox(LoadingAilbl.Text);
var processInfo = new ProcessStartInfo("cmd.exe", "/c call " + Path.Combine(AssemblyDirectory(), "environment.bat") + " && cd " + Path.Combine(AssemblyDirectory(), "Ruyi-Models-main") + " && python i2v.py");
processInfo.CreateNoWindow = true;
@ -467,10 +500,14 @@ namespace Ruyi_GUI
}
}
if (LogMessages.Count > 0)
{
try
{
File.AppendAllLines("log.txt", LogMessages);
LogMessages.Clear();
}
catch { }
}
}
private void PlayVideo_Click(object sender, EventArgs e)
@ -479,14 +516,22 @@ namespace Ruyi_GUI
}
private void FileWatch_Tick(object sender, EventArgs e)
{
try
{
if (File.Exists(VideoOut.Text)) { PlayVideo.Enabled = true; }
else { PlayVideo.Enabled = false; }
}
catch { }
if (LogMessages.Count > 0)
{
try
{
File.AppendAllLines("log.txt", LogMessages);
LogMessages.Clear();
}
catch { }
}
}
private bool ValidateInOut()
@ -508,7 +553,7 @@ namespace Ruyi_GUI
if (!AspectRatio.Text.Contains(":")) { MessageBox.Show(Error15.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
if (!VideoRes.Text.Contains(", ") && !VideoRes.Text.Contains("None") && !VideoRes.Text.Contains("auto")) { MessageBox.Show(Error16.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
if (int.TryParse(FrameRate.Text, out int FPS)) { if (FPS < 24 || FPS > 120) { MessageBox.Show(Error17.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } }
if (int.TryParse(Resolution.Text, out int RES)) { if (RES < 384 || RES > 896) { MessageBox.Show(Error18.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } }
if (int.TryParse(Resolution.Text, out int RES)) { if (RES < 384 || RES > 1024) { MessageBox.Show(Error18.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } }
if (!GPUOffload.Items.Contains(GPUOffload.Text)) { MessageBox.Show(Error19.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
if (!Direction.Items.Contains(Direction.Text)) { MessageBox.Show(Error20.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
if (!Motion.Items.Contains(Motion.Text)) { MessageBox.Show(Error21.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); return false; }
@ -532,7 +577,7 @@ namespace Ruyi_GUI
{
if (JobList.SelectedIndex == -1) return;
string Job = Path.Combine("Jobs", JobList.Items[JobList.SelectedIndex].ToString());
if (File.Exists(Job)) { File.Delete(Job); }
if (File.Exists(Job)) { try { File.Delete(Job); } catch { } }
JobList.Items.RemoveAt(JobList.SelectedIndex);
}
@ -550,6 +595,7 @@ namespace Ruyi_GUI
DoingJobs = true;
UpdateJobList(true);
this.Update();
Thread.Sleep(100);
ExecuteCommand();
}
else
@ -583,13 +629,17 @@ namespace Ruyi_GUI
{
LoadSettings(File.ReadAllText(Path.Combine("Jobs", JobList.Items[index].ToString())), false);
}
else
{
JobList.Items.RemoveAt(index);
}
}
private void JobList_SelectedIndexChanged(object sender, EventArgs e) { UpdateJobList(); }
private void Batch_Click(object sender, EventArgs e)
{
if (this.Width == 810) { this.Width = 572; JobList.Items.Clear(); }
if (this.Width == 815) { this.Width = 572; JobList.Items.Clear(); }
else
{
if (Directory.Exists("Jobs"))
@ -600,14 +650,11 @@ namespace Ruyi_GUI
{
if (file.Name.Length == 64)
{
if (!JobList.Items.Contains(file.Name))
{
JobList.Items.Add(file.Name);
if (!JobList.Items.Contains(file.Name)) { JobList.Items.Add(file.Name); }
}
}
}
}
this.Width = 810;
this.Width = 815;
}
}
@ -650,6 +697,8 @@ namespace Ruyi_GUI
Process[] processes = Process.GetProcesses();
bool isPythonRunning = processes.Any(p => p.ProcessName.Equals("python", StringComparison.OrdinalIgnoreCase));
if (!isPythonRunning)
{
try
{
AppendTextBox(Errorlbl.Text);
CrashChecker.Enabled = false;
@ -658,6 +707,8 @@ namespace Ruyi_GUI
DoingJobs = false;
MessageBox.Show(Error22.Text, Errorlbl.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
catch { }
}
}
public void DiscordPostFile(string url, string FilePath)
@ -681,11 +732,15 @@ namespace Ruyi_GUI
{
string[] Output = NvidiaSMI();
if (Output != null)
{
try
{
GPUInfo = " [GPU:" + Output[2] + "% " + Output[0] + "C " + Output[1] + "MB]";
if (int.TryParse(Output[1], out int Vram)) { if (Vram > MaxVram) { MaxVram = Vram; } }
this.Text = this.Text.Split(new string[] { " [GPU:" }, StringSplitOptions.RemoveEmptyEntries)[0] + GPUInfo;
}
catch { }
}
}
}
}

View File

@ -132,78 +132,64 @@
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAICAAAAEAIACoEAAAFgAAACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVEgwAaVVVADEp
JQg2LSoXNi4sGjQtKxozKykbMSknHC4nJR4tJSMfLCQhHi0kIB0tJCAeLCMgHywjHx0qIh4dJx8bFyAb
FwZCNjMACAcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtKSIAQzc1ADsy
LRg+NDFrQDYytj41MtY7MzDaOjEw2zkwLts5Ly3cNy0r3TUrKd4zKSfeMygl3TMoJN4yJyTfMick3jEn
JN0xJyTWMikmsjQrJ2w0LCcYNywpACspIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMysnAEY6
NwA+NDA1QTczw0E2M/1IOzr/VEpI/1RLSf9LQkH/Qzo5/zwzMf88MjD/OjAt/zkuLP85Liv/OCwp/zcr
Kf83Kyn/PDEv/z80Mf85Ly3/OjAt/TsxLsI6MC00PzQyADEsJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAsJ
BwBANTIAPzQwJkE3NM5BNzT/YVdU/pyUk/6spqf+raiq/oV+gP5eU1L+Wk5N/l9SUf5oWln+XE5N/k9B
QP5BNTL+PDAu/kg7Ov5hU1D9cWNf/WRWUv5IPDn+PjMx/z0zMM07MS0kOzIuABghFAAAAAAAAAAAAAAA
AAAAAAAAOjAsADMpJgNBNjKXQTYz/2hdXP6gmZj+bGVm/mZfY/5+d3v9f3R1/m1fXf6Kenb+mImI/p2Q
kv6HeHf+eWdh/m9fWf5NQD7+XlBN/lhMS/5VTE3+eXBw/H5ycPtNQT3+PTMw/z0zL5I2LScCOzEtAAAA
AAAAAAAAAAAAAAAAAABAMi8APzEvKkE1MuRPREL/m5SU/oF7gP1sZGn+g3l+/piNj/6DdG/+d2hl/qeb
mv6mm5v+p5ye/pOGhv6Le3f+kH93/nVlYP5/bmn+YFBL/kg+P/5lXGH9l5KZ+ntvbv1CNjP/PDIv3zsx
LSQ7MS4AAAAAAAAAAAAAAAAAAAAAAEEyMAA/Mi9ZPzIw/HRqaf16dHf4YFlg/XVsdP6XkJj+rKSr/oR3
eP5wZmf+u7a6/sbCx/63sbb+rKSo/qacnf6UhoX+dmpr/pmMiv16Z17+W0xK/llQVf6XlJ77npmg/FpN
TP48MS76PDEuUDwxLwAAAAAAAAAAAAAAAAAAAAAAPTIvAD4yMHM9MTD/hHp792ljZvFXTlP+aWJo/rKw
uv7Cvsj+n5ef/omCiP6tqKz+pKGk/oiDiP5+d3v+h31//oJ2dv56bnD+qaGn/Ip5c/xlU0z9XVRZ/ndw
d/ydm6X5dm1w/DwxLv88MS5rPTIvAAAAAAAAAAAAAAAAAAAAAAA5LywAPTIwdjswLv9ZUFDwa2Vo721l
av59eID+u7rH/sC/y/6uqbT+qaOq/mpjZ/5JQkf+QztA/jIqLf43MDP+VkxM/oBwa/6QgH79hXNt/GhV
TfxZTU79bGVq/I2Kk/l8dnv7PTIv/zwxLnI+Mi8AAAAAAAAAAAAAAAAAAAAAADctKwA7MS51OS8s/0xD
ROdzbXHme3R6+5KRm/vMztv+u7nF/qGZof5nX2T+V1BY/n11fP55b3P+ZFdV/VpOTv04LzH+UUI+/oVz
bP2Bb2n8c2BX/FNGRP1PRkn+bGVq+3dvc/o+Mi//PDEucj4yMAAAAAAAAAAAAAAAAAAAAAAANy0rADow
LnQ4Ly3/TUVF3GplaOJ8d336WlZd866vuP2inqn+g3p+/ldPVv5/d379hX2A/oyDg/6JfXv+ZldV/kU2
Nf43Kyr+dGRg/mVXVf1iUkr9QDY2/lBHSv5tZ2v7gnyB9T4yMP87MC1zPTEvAAAAAAAAAAAAAAAAAAAA
AAA4KysAOy8udDgtLf9MRETXamVp142MmvtSTVn1l5ag/IiDi/5nXmP+f3mA+5+Xmf1zZ2b+X1NQ/nFm
Y/6ajoz+Xk5K/jUrKv5rX17+ZVla/lVGQv5IP0L+XVVb/lxSU/1dU1T8PDEv/zkvLXM7MS4AAAAAAAAA
AAAAAAAAAAAAADcrKwA6Ly50Ny0t/1BJS9dsZ23XlJOh+WBaZvnCwsr9yMbL/mJXXP6Lho38d21s/jsv
K/4uIx7+Myci/mxgXf5vYVz+RDc1/nx1eP6wp6n9bl9a/ltRVf5sYWf+UkZF/lxSUf47Mi//OTAtczox
LgAAAAAAAAAAAAAAAAAAAAAANisrADovL3Q1Kyv/Ylpd8ZOQmfWWlKH5Y15p+sTEzf3Y1tv+cmlv/peU
mv57cXH+VEpJ/iofHP4kGRX+Qjcz/nBjX/5QQkD+iIGE/raur/1vYFv+YVhc/nFlav5XSEf+VUlI/Tsx
L/85MC10OTAtAAAAAAAAAAAAAAAAAAAAAAA2KisAOi4vdDUrK/9mYGTtnpyr7qqpuPhcWWz5mZej/b66
wf6JgYj+ioaM/rKsrf7Cvbz+RTs5/iAVEv5WTEr+aVpW/ks/P/6gmZz+fHFu/lBCPf5qY2r+iICL/lpO
Uv5KPz/9OjEu/zkvLXU5MC0AAAAAAAAAAAAAAAAAAAAAADUoKgA5LS50NSkr/1BKTvOMiZPvgoGQ7EpH
VfilpK7+4+Hm/qOdov5oYmf+p6Cj/pWLif5uY1/+cGVj/o2Cgv5jU0/+XFNU/q2kpP6KenT+UkQ//kxG
TP5mYGz+Z1xg/FFGRvg5Lyz/OS8sdTguLAAAAAAAAAAAAAAAAAAAAAAANScpADotL3Q1KCv/Vk5R9pKP
mPWAeoH2gXqD+bi4xv309vr+z8vQ/oqEiv6zrrH+raao/qegoP6poaL+pZyc/nFmZf6YkZP9rKGf/pGA
ef5qWlf+U0VD/U5APf5YTEr+UEZH/DguLP83LSt2NywqAAAAAAAAAAAAAAAAAAAAAAA0JykAOS4vczIn
KP9uZ2r1wcDF9srJzfbAvsPksrG79ODh5/6xrbL8lI+T/ODf4PzOysr839zc/cXAv/yaj477d2xt/JWP
k/2tpKT8lIV//XhpZviJfHjqdGNc+Hhsavx1bW76Nywr/zYsKnY2KyoAAAAAAAAAAAAAAAAAAAAAADQo
KQA7MDB0MSYn/0xERvucmZz4vLm7+sLAw+zNy83v4+Pm/dHO0v6po6f9q6ep/be0tfySjY38gXp5/G1l
ZPuAd3r7q6Om/Ly0tPykmZb9jYF/75SKiOeIe3j3mI+O+WBXV/s0Kin/NSsqdjYrKwAAAAAAAAAAAAAA
AAAAAAAAPjI0AEI3OHAzJyn/PTQ2/Y2Iivaln6H7ramr9JWQkPjCwML+6Obo/uro6f7V0tT+trO2/oeC
hv1xaWv9kYeH/b+4t/zQycj8y8TE/qSbmv6MgoD4oZeW+IyDgvdyamv3QTc3/DQpKf8zKSluNSoqAAAA
AAAAAAAAAAAAAAAAAABLQUMASkBBUjkvMfouJCb+ZF1f97Gtr/aVkJH3lJCP7aWhofOkn6H82tfZ/uzq
6v7V09b+kouP/ntwcP6jmJX+xLy6/bWtrP2lnZz+o5qY/o6Dgf6BeHf9YFZV/EI4OPwzKCn+NCgp+DMo
KE0zKCgAAAAAAAAAAAAAAAAAAAAAAEtDRABPR0gcSD5A1TAnKP80Kyz9f3l79ZCMj9t7dnbKkYyM67+8
vfXU0NL+9/X1/vHv8P7Lx8j7xsHB++Le3v7EvLr8rKKi/bWtrf6gl5b8bWRj/VlQUPxNQkL9Ny0t/jIn
Kf8zKCnONSoqGDUpKgAAAAAAAAAAAAAAAAAAAAAAUEhKAHdvbQBcVVZuSkFC+i8lJf8zKCr9RDw86kM8
O9ZeV1fwgXt66aumpvHW1NP+2dfW/aynpt6no6Ld0M3M/qylovyIfXv5joWE+JKKie5fVlX5Qjg4/Tcs
Lf4xJij/NSor9jcsLWI0KCkAOjAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAeXJzAHx1dw10bW2XXFNT+z0y
M/8wJSb/MSYn/zQqKf0zKCf7OC4t+0I5OP9COTj/OS8u+zcuLPtBODf/PjU0/zctLP42Kyr+OzEw/DQq
Kf8xJyf/Niss/0A0NfREODmCPTIyCD80NQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlY+PAJ6X
lw6LhYVwfXV0zmphYPFeU1L3WU9N91dNSvVVSkjzU0hG8FJHRO5TSEXsU0hF7FNIRetTSUbrVElG7FRJ
RuxUSUbuVUpH8FVKSedWSUm4U0hHVU5EQgdQRUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAzsvKAPLz8gGpo6EVmJGPOIuCf0Z9dXFFcmpmQmhgXD5eVVI5WlBNM1tRTTBeVE8uYFVRLmJX
Ui1iV1MuYldSL2JYUzFjWVU0YVdUKFpRTgtuXl8AREY9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA/////////////////wAA//wAAD/4AAAf8AAAD+AAAAfgAAAH4AAAB+AA
AAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB/AA
AA/wAAAP+AAAH/wAAH////////////////8=
AAABAAMAEBAAAAEAIABoBAAANgAAABAQAAABACAAaAQAAJ4EAAAQEAAAAQAgAGgEAAAGCQAAKAAAABAA
AAAgAAAAAQAgAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAIKCgk44ODi+JCQkvyUlJb8lJSW/JSUlvyUl
Jb8lJSW/JSUlvyUlJb8lJSW/JSUlvyUlJb8kJCS/NDQ0v3p6emAzMzOfHx8f/yEhIf8iIiL/IiIi/yIi
Iv8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8iIiL/ICAg/x8fH/87Ozu+IyMjnyAgIP8hISH/ISEh/yEh
If8hISH/ISEh/yEhIf8hISH/ISEh/yEhIf8iIiL/IiIi/yEhIf8gICD/MTExvyMjI58fHx//Ozs7/z4+
Pv8hISH/Ojo6/0NDQ/9ERET/Q0ND/y0tLf8fHx//KCgo/0lJSf8lJSX/ISEh/zIyMr8kJCSfICAg/3Z2
dv/s7Oz/NjY2/4aGhv/4+Pj/+fn5//n5+f/m5ub/QkJC/01NTf/4+Pj/OTk5/yEhIf8yMjK/IyMjnyAg
IP8nJyf/2tra/5eXl/8mJib/QEBA/0BAQP9HR0f/6enp/35+fv9OTk7/+fn5/zo6Ov8hISH/MjIyvyMj
I58hISH/ICAg/3R0dP/u7u7/Ozs7/yAgIP8gICD/bGxs//Ly8v9FRUX/Tk5O//n5+f86Ojr/ISEh/zIy
Mr8mJiafISEh/yEhIf8nJyf/2NjY/56env8hISH/JiYm/9bW1v+jo6P/ICAg/05OTv/5+fn/Ojo6/yEh
If8yMjK/JCQknyAgIP8iIiL/ICAg/3Fxcf/v7+//PT09/3p6ev/t7e3/ODg4/yEhIf9OTk7/+fn5/zo6
Ov8hISH/MjIyvyQkJJ8gICD/IiIi/yEhIf8nJyf/1tbW/6ysrP/g4OD/kJCQ/yAgIP8iIiL/Tk5O//n5
+f85OTn/ISEh/zIyMr8kJCSfISEh/yIiIv8iIiL/ICAg/25ubv/5+fn/5ubm/zAwMP8hISH/IiIi/05O
Tv/5+fn/OTk5/yEhIf8yMjK/JCQknyEhIf8iIiL/IiIi/yEhIf8lJSX/yMjI/3p6ev8gICD/ISEh/yIi
Iv8+Pj7/29vb/zExMf8hISH/MjIyvyQkJJ8gICD/IiIi/yIiIv8iIiL/ICAg/yMjI/8gICD/ISEh/yIi
Iv8iIiL/ICAg/yUlJf8gICD/ISEh/zIyMr8kJCSfISEh/yIiIv8iIiL/IiIi/yIiIv8hISH/ICAg/yEh
If8iIiL/IiIi/yIiIv8iIiL/IiIi/yEhIf8xMTG/MzMznyAgIP8hISH/ISEh/yIiIv8iIiL/IiIi/yIi
Iv8iIiL/IiIi/yIiIv8iIiL/IiIi/yEhIf8fHx//Pz8/vn9/f0Q7Ozu8KSkpvywsLL8sLCy/LCwsvyws
LL8sLCy/LCwsvywsLL8sLCy/LCwsvywsLL8qKiq/ODg4vnt7e1sAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAA
AAAABAAAAAAAAAAAAAAAAAAAAAAAAGtra2U5OTnDIyMjxyUlJcclJSXHJSUlxyUlJcclJSXHJSUlxyUl
JcclJSXHJSUlxyUlJcckJCTHNjY2xWVlZXc1NTWpIiIi/yEhIf8iIiL/IiIi/yIiIv8iIiL/IiIi/yIi
Iv8iIiL/IiIi/yIiIv8iIiL/ICAg/yEhIf87OzvEIyMjqyAgIP8fHx//Hx8f/yEhIf8gICD/Hx8f/x8f
H/8fHx//Hx8f/yEhIf8hISH/ICAg/yEhIf8gICD/Ly8vxyMjI6shISH/QkJC/0pKSv8lJSX/QkJC/1ZW
Vv9WVlb/VFRU/z09Pf8gICD/MDAw/1FRUf8sLCz/ISEh/zAwMMckJCSrHx8f/3R0dP/Ozs7/SEhI/3d3
d//a2tr/3Nzc/97e3v/Ly8v/TExM/1dXV//Q0ND/SkpK/x8fH/8wMDDHIyMjqx8fH/84ODj/ysrK/5eX
l/8yMjL/T09P/1BQUP9oaGj/39/f/3x8fP9bW1v/3d3d/01NTf8fHx//MDAwxyQkJKshISH/Hx8f/3x8
fP/Z2dn/S0tL/xwcHP8dHR3/cnJy/9zc3P9SUlL/W1tb/9zc3P9NTU3/Hx8f/zAwMMclJSWrISEh/yAg
IP83Nzf/ycnJ/52dnf8jIyP/NjY2/8fHx/+goKD/IyMj/11dXf/c3Nz/TU1N/x8fH/8wMDDHJCQkqyAg
IP8hISH/Hx8f/3l5ef/a2tr/Tk5O/35+fv/Y2Nj/SkpK/xwcHP9eXl7/3Nzc/01NTf8fHx//MDAwxyQk
JKshISH/IiIi/yAgIP82Njb/xsbG/7i4uP/R0dH/kZGR/yMjI/8fHx//Xl5e/9zc3P9NTU3/Hx8f/zAw
MMclJSWrIiIi/yIiIv8iIiL/ICAg/3Z2dv/09PT/1dXV/0FBQf8fHx//Hx8f/15eXv/e3t7/TU1N/x8f
H/8wMDDHJCQkqyEhIf8iIiL/IiIi/yAgIP80NDT/r6+v/3x8fP8hISH/IiIi/yAgIP9LS0v/srKy/0BA
QP8fHx//MDAwxyQkJKshISH/IiIi/yIiIv8iIiL/ISEh/y4uLv8nJyf/ICAg/yIiIv8iIiL/JCQk/zEx
Mf8kJCT/ISEh/zAwMMckJCSrISEh/yIiIv8iIiL/IiIi/yIiIv8gICD/ICAg/yEhIf8iIiL/IiIi/yIi
Iv8hISH/IiIi/yEhIf8vLy/HNTU1qCMjI/8hISH/ISEh/yIiIv8iIiL/IiIi/yIiIv8iIiL/IiIi/yIi
Iv8iIiL/IiIi/yEhIf8hISH/PT09w2ZmZl47OzvAKSkpxyoqKscqKirHKioqxyoqKscqKirHKioqxyoq
KscqKirHKioqxyoqKscpKSnHOTk5xGdnZ3MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABAAAAAgAAAAAQAgAAAAAAAABAAAAAAAAAAA
AAAAAAAAAAAAAGpqamc4ODjEIyMjyCUlJcclJSXHJSUlxyUlJcclJSXHJSUlxyUlJcclJSXHJSUlxyUl
JccjIyPHNTU1xmRkZHozMzOoIiIi/yEhIf8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8iIiL/IiIi/yIi
Iv8iIiL/ICAg/yEhIf85OTnFIiIiqSAgIP8fHx//Hx8f/yEhIf8gICD/Hx8f/x8fH/8eHh7/Hx8f/yEh
If8hISH/Hx8f/yEhIf8hISH/Li4uyCMjI6kgICD/RERE/0tLS/8kJCT/Q0ND/1hYWP9YWFj/VlZW/z09
Pf8gICD/MDAw/1RUVP8tLS3/ISEh/y8vL8ckJCSpHx8f/3V1df/R0dH/SEhI/3h4eP/e3t7/4ODg/+Li
4v/Ozs7/TU1N/1hYWP/X19f/TExM/yAgIP8wMDDHIyMjqR8fH/82Njb/ycnJ/5iYmP8xMTH/UFBQ/1FR
Uf9oaGj/4eHh/35+fv9bW1v/4eHh/09PT/8gICD/MDAwxyQkJKkhISH/Hx8f/3t7e//c3Nz/TExM/xwc
HP8cHBz/cnJy/97e3v9TU1P/W1tb/+Hh4f9PT0//ICAg/zAwMMclJSWpISEh/yAgIP81NTX/yMjI/56e
nv8jIyP/NTU1/8fHx/+goKD/IiIi/11dXf/h4eH/T09P/yAgIP8wMDDHJCQkqSEhIf8iIiL/Hx8f/3h4
eP/c3Nz/Tk5O/319ff/Z2dn/SkpK/xwcHP9eXl7/4eHh/09PT/8gICD/MDAwxyQkJKkhISH/IiIi/yAg
IP80NDT/xcXF/7i4uP/S0tL/kpKS/yIiIv8fHx//Xl5e/+Dg4P9PT0//ICAg/zAwMMckJCSpISEh/yIi
Iv8iIiL/Hx8f/3V1df/29vb/1tbW/0FBQf8fHx//Hx8f/15eXv/i4uL/T09P/x8fH/8wMDDHJCQkqSEh
If8iIiL/IiIi/yAgIP8zMzP/rq6u/3t7e/8gICD/IiIi/yAgIP9KSkr/s7Oz/0FBQf8gICD/MDAwxyQk
JKkhISH/IiIi/yIiIv8iIiL/ISEh/y0tLf8mJib/ICAg/yIiIv8iIiL/JCQk/y8vL/8jIyP/IiIi/zAw
MMckJCSpISEh/yIiIv8iIiL/IiIi/yIiIv8gICD/ICAg/yEhIf8iIiL/IiIi/yIiIv8hISH/IiIi/yEh
If8vLy/INTU1pyMjI/8hISH/IiIi/yIiIv8iIiL/IiIi/yIiIv8iIiL/IiIi/yIiIv8iIiL/IiIi/yEh
If8iIiL/PDw8xGdnZ106Ojq9KCgoxCkpKcQqKirEKioqxCoqKsQqKirEKioqxCoqKsQqKirEKioqxCoq
KsQoKCjENzc3wmdnZ3MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA
</value>
</data>
</root>

View File

@ -16,7 +16,7 @@ namespace Ruyi_GUI
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
Application.Run(new GUIForm());
}
}
}

View File

@ -51,7 +51,7 @@
<CheckForOverflowUnderflow>true</CheckForOverflowUnderflow>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>AIIcon.ico</ApplicationIcon>
<ApplicationIcon>favicon_676f4f1b1d268_optimized.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
@ -69,16 +69,16 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Form1.cs">
<Compile Include="GUIForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Form1.Designer.cs">
<DependentUpon>Form1.cs</DependentUpon>
<Compile Include="GUIForm.Designer.cs">
<DependentUpon>GUIForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="Form1.resx">
<DependentUpon>Form1.cs</DependentUpon>
<EmbeddedResource Include="GUIForm.resx">
<DependentUpon>GUIForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
@ -102,9 +102,6 @@
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="AIIcon.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.8">
<Visible>False</Visible>
@ -117,5 +114,8 @@
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<ItemGroup>
<Content Include="favicon_676f4f1b1d268_optimized.ico" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB