diff --git a/.gitignore b/.gitignore
index 1bfc3db..c92abfc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,36 +1,146 @@
-# ---> Go
-# If you prefer the allow list template instead of the deny list, see community template:
-# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
-#
-# Binaries for programs and plugins
-*.exe
-*.exe~
-*.dll
-*.so
-*.dylib
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+##
+## Original source: https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
-# Test binary, built with `go test -c`
-*.test
+# User-specific files
+*.rsuser
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
-# Code coverage profiles and other test artifacts
-*.out
-coverage.*
-*.coverprofile
-profile.cov
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
-# Dependency directories (remove the comment below to include it)
-# vendor/
+# Mono auto generated files
+mono_crash.*
-# Go workspace file
-go.work
-go.work.sum
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+[Ww][Iinit][Nn]32/
+[Aa][Rr][Mm]/
+[Aa][Rr][Mm]64/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+[Ll]ogs/
-# env file
-.env
+# Visual Studio 2015/2017/2019/2022 cache/options directory
+.vs/
+# Uncomment if you use Visual Studio Code
+.vscode/
-# Editor/IDE
-# .idea/
-# .vscode/
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUnit
+*.VisualState.xml
+TestResult.xml
+nunit-agent.log
+
+# .NET Core
+project.lock.json
+project.fragment.lock.json
+artifacts/
+
+# StyleCop
+StyleCopReport.xml
+
+# Files built by Visual Studio
+*_i.c
+*_p.c
+*_h.h
+*.ilk
+*.meta
+*.obj
+*.iobj
+*.pch
+*.pdb
+*.ipdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*_wpftmp.csproj
+*.log
+*.vspscc
+*.vssscc
+.buildlog
+*.aps
+*.ncb
+*.opendb
+*.sdf
+*.cachefile
+*.nosync
+*.dbmdl
+*.dbproj.schemaview
+*.vshost.exe
+*.vshost.exe.config
+*.vshost.exe.manifest
+*.manifest
+*.spec
+*.coverage
+*.coveragexml
+*_UnitTests.coverage
+*.orderedtest
+*.trx
+*.sur
+*.ipch
+*.vcmeta
+*.VC.db
+*.VC.VC.opendb
+
+# JetBrains Resharper
+_ReSharper*/
+*.[Rr]e[Ss]harper.user
+
+# JustMock
+*.jmconfig
+
+# TeamCity
+_TeamCity*
+
+# Octopus Deploy
+*.nupkg
+
+# Cake
+Tools/
+!tools/
+
+# NuGet Packages
+*.nupkg
+# The packages folder can be ignored because of Package Restore
+**/[Pp]ackages/*
+# except build/, which is used as an MSBuild target.
+!**/[Pp]ackages/build/
+# Uncomment if using NuGet Config to restore to a custom location
+# !NuGet.Config
+
+# Rider
+.idea/
+*.sln.iml
+
+# OS generated files
+.DS_Store
+.DS_Store?
+._*
+.Spotlight-V100
+.Trashes
+ehthumbs.db
+Thumbs.db
TODO
/binaries/
diff --git a/App.axaml b/App.axaml
new file mode 100644
index 0000000..3c7a5f4
--- /dev/null
+++ b/App.axaml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/App.axaml.cs b/App.axaml.cs
new file mode 100644
index 0000000..add4615
--- /dev/null
+++ b/App.axaml.cs
@@ -0,0 +1,31 @@
+using Avalonia;
+using Avalonia.Controls.ApplicationLifetimes;
+using Avalonia.Data.Core;
+using Avalonia.Data.Core.Plugins;
+using System.Linq;
+using Avalonia.Markup.Xaml;
+using Finder2eFoundryConverterCS.ViewModels;
+using Finder2eFoundryConverterCS.Views;
+
+namespace Finder2eFoundryConverterCS;
+
+public partial class App : Application
+{
+ public override void Initialize()
+ {
+ AvaloniaXamlLoader.Load(this);
+ }
+
+ public override void OnFrameworkInitializationCompleted()
+ {
+ if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
+ {
+ desktop.MainWindow = new MainWindow
+ {
+ DataContext = new MainWindowViewModel(),
+ };
+ }
+
+ base.OnFrameworkInitializationCompleted();
+ }
+}
\ No newline at end of file
diff --git a/Assets/avalonia-logo.ico b/Assets/avalonia-logo.ico
new file mode 100644
index 0000000..f7da8bb
Binary files /dev/null and b/Assets/avalonia-logo.ico differ
diff --git a/Finder2eFoundryConverterCS.csproj b/Finder2eFoundryConverterCS.csproj
new file mode 100644
index 0000000..7dbfc62
--- /dev/null
+++ b/Finder2eFoundryConverterCS.csproj
@@ -0,0 +1,26 @@
+
+
+ WinExe
+ net10.0
+ enable
+ app.manifest
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ None
+ All
+
+
+
+
diff --git a/Models/ImageItem.cs b/Models/ImageItem.cs
new file mode 100644
index 0000000..d4ea071
--- /dev/null
+++ b/Models/ImageItem.cs
@@ -0,0 +1,10 @@
+using Avalonia.Media.Imaging;
+
+namespace Finder2eFoundryConverterCS.Models
+{
+ public class ImageItem
+ {
+ public string Path { get; set; } = string.Empty;
+ public Bitmap? Thumbnail { get; set; }
+ }
+}
diff --git a/Program.cs b/Program.cs
new file mode 100644
index 0000000..20d7bef
--- /dev/null
+++ b/Program.cs
@@ -0,0 +1,20 @@
+using Avalonia;
+using System;
+
+namespace Finder2eFoundryConverterCS;
+
+sealed class Program
+{
+ [STAThread]
+ public static void Main(string[] args) => BuildAvaloniaApp()
+ .StartWithClassicDesktopLifetime(args);
+
+ public static AppBuilder BuildAvaloniaApp()
+ => AppBuilder.Configure()
+ .UsePlatformDetect()
+#if DEBUG
+ .WithDeveloperTools()
+#endif
+ .WithInterFont()
+ .LogToTrace();
+}
diff --git a/Services/LlmService.cs b/Services/LlmService.cs
new file mode 100644
index 0000000..0674587
--- /dev/null
+++ b/Services/LlmService.cs
@@ -0,0 +1,108 @@
+using System;
+using System.Collections.Generic;
+using System.Net.Http;
+using System.Net.Http.Json;
+using System.Text.Json;
+using System.Threading.Tasks;
+using System.Text.Json.Serialization;
+
+namespace Finder2eFoundryConverterCS.Services
+{
+ public class LlmService
+ {
+ private readonly HttpClient _httpClient = new HttpClient();
+
+ public async Task> GetModelsAsync(string baseUrl)
+ {
+ try
+ {
+ var response = await _httpClient.GetFromJsonAsync($"{baseUrl.TrimEnd('/')}/v1/models");
+ if (response?.Data == null) return new List();
+
+ var models = new List();
+ foreach (var model in response.Data)
+ {
+ models.Add(model.Id);
+ }
+ return models;
+ }
+ catch
+ {
+ return new List { "Error: LM Studio not found" };
+ }
+ }
+
+ public async Task GenerateResponseAsync(string baseUrl, string model, string text, List imagePaths)
+ {
+ try
+ {
+ var contents = new List