
AI 应用人工智能桌面应用本地部署媒体生成【免费下载链接】StabilityMatrixMulti-Platform Package Manager for Stable Diffusion项目地址https://gitcode.com/gh_mirrors/st/StabilityMatrix点击查看免费下载本文以仓库根目录的 CONTRIBUTING.md 为骨架结合当前仓库的工程配置Runtimes.Default.props、StabilityMatrix.Avalonia.csproj、.husky/task-runner.json、StabilityMatrix.Avalonia.pupnet.conf等逐项展开。读完本文你将掌握 StabilityMatrix 的本地构建与调试方法、Windows/macOS/Linux 三平台单文件发布流程、基于 Husky.Net 的 pre-commit 自动化与 OpenApi 客户端再生成方式以及该仓库完整的 C# 代码风格约定与目录组织规范可直接用于日常开发与提交代码。快速上手搭建本地构建环境StabilityMatrix 是基于 Avalonia 的跨平台桌面应用核心工程为StabilityMatrix.AvaloniaUI 层与StabilityMatrix.Core领域/服务层。开发前请确认本机已安装 .NET SDK仓库根目录的 global.json 声明了 SDK 版本9.0.0并允许latestMajor向前滚动即安装了更高主版本的 SDK 也可以构建。{ sdk: { version: 9.0.0, rollForward: latestMajor, allowPrerelease: true } }在仓库根目录执行以下命令即可完成 Debug 构建以 Windows 运行时为例dotnet build ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r win-x64 -c Debug这条命令的核心要点是必须显式传入-r win-x64即--runtime win-x64。原因有二仓库的 Runtimes.Default.props 声明了RuntimeIdentifiers为win-x64;linux-x64;osx-x64;osx-arm64而StabilityMatrix.Avalonia.csproj中针对不同 RID 条件性地包含不同的运行时资源见下文“为什么必须显式指定 RuntimeIdentifier”若使用 Rider / Visual Studio 等托管 IDE 构建同样需要保证传给dotnet的参数里带上了有效的--runtime ...或者对msbuild调用设置了RuntimeIdentifier...否则依赖特定运行时runtime-specific的资源不会被打进构建产物。目标框架与输出路径在 Windows 上工程使用net9.0-windows10.0.17763.0目标框架见 Runtimes.Default.props 中的条件属性因此 Debug 构建产物位于StabilityMatrix.Avalonia/bin/Debug/net9.0-windows10.0.17763.0/win-x64在其他平台Linux、macOS使用通用net9.0目标框架输出路径相应为StabilityMatrix.Avalonia/bin/Debug/net9.0/...。说明原 CONTRIBUTING.md 中记载的是net8.0-windows10.0.17763.0而当前仓库的 Runtimes.Default.props 已升级为net9.0-windows10.0.17763.0Directory.Build.props 也将默认TargetFramework设为net9.0实际构建输出目录以仓库当前配置为准。深入为什么必须显式指定 RuntimeIdentifierStabilityMatrix 的发布需要携带各平台专属的运行时资源这在 StabilityMatrix.Avalonia.csproj 中有非常直观的体现win-x64时将Assets/win-x64/**作为 Avalonia 资源打进程序集并启用 Windows 平台 manifestapp.manifestlinux-x64时引入SkiaSharp.NativeAssets.Linux原生包见Directory.Packages.props中的集中版本管理并打包Assets/linux-x64/**osx-arm64时设置CFBundleName、CFBundleIdentifierai.lykos.stabilitymatrix、CFBundleIconFile等 macOS Bundle 属性并额外通过EditInfoPlist目标在打包后向Info.plist注入stabilitymatrix://自定义 URL Scheme 注册信息。同时 Runtimes.Default.props 提供了“未指定 RID 时按当前操作系统自动选择默认 RID”的回退逻辑Windows →win-x64Linux →linux-x64macOS →osx-arm64但自动回退只保证“能跑”无法保证你拿到的是完整产物因此 CONTRIBUTING 才反复强调要显式传 RID。另外StabilityMatrix.Avalonia.csproj中InternalsVisibleTo声明了StabilityMatrix.Tests与StabilityMatrix.UITests意味着两个测试程序集可以直接访问内部成员这与 StabilityMatrix.Tests / StabilityMatrix.UITests 的测试用例相印证。发布单文件安装包Release进行正式发布时需要把$RELEASE_VERSION替换为不带v前缀的 semver 版本号例如2.10.0、2.11.0-dev.1等。以下分别给出三平台流程。Windowsdotnet publish单文件自解压dotnet publish ./StabilityMatrix.Avalonia/StabilityMatrix.Avalonia.csproj -r win-x64 -c Release -p:Version$env:RELEASE_VERSION -p:PublishSingleFiletrue -p:IncludeNativeLibrariesForSelfExtracttrue -p:PublishReadyToRuntrue参数含义-p:PublishSingleFiletrue把托管程序集与依赖捆绑为单个可执行文件-p:IncludeNativeLibrariesForSelfExtracttrue将原生库一并捆绑运行时自解压执行-p:PublishReadyToRuntrue启用 ReadyToRunR2R预编译提升启动性能-p:Version...把版本号写入程序集版本与文件版本。注意$env:RELEASE_VERSION是 PowerShell 环境变量语法若在 bash 中执行请改为$RELEASE_VERSION。macOSbuild_macos_app.sh打包 .appmacOS 使用仓库自带的 Build/build_macos_app.sh 脚本它内部会调用dotnet msbuild ... -t:BundleApp生成标准Stability Matrix.appBundle./Build/build_macos_app.sh -v $RELEASE_VERSION脚本行为要点与 Build/build_macos_app.sh 源码对照output_dir环境变量可自定义输出目录默认./out/osx-arm64/通过-t:BundleApp与-p:RuntimeIdentifierosx-arm64、-p:ConfigurationRelease、-p:SelfContainedtrue等参数执行 MSBuild 打包PublishDir指向${output_dir}/bin打包完成后用plutil -lint校验Info.plist再把.app从bin目录复制到输出根目录构建成功后脚本会以超链接形式打印输出目录。如果需要走正式的签名与公证流程Build 目录还提供了配套脚本codesign_macos.sh逐文件签名并注入 Build/AppEntitlements.entitlements 权限与notarize_macos.shnotarytool提交公证并stapler附加票据二者都支持 CI 环境下的凭据注入。LinuxAppImageappimagetool PupNetsudo apt-get -y install fuse3 # 下载 appimagetool使用静态 type2-runtime终端用户系统仍需 # fusermount 或 fusermount3 setuid 辅助程序或可使用 # --appimage-extract-and-run 作为备选运行方式 sudo wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage -O /usr/local/bin/appimagetool sudo chmod x /usr/local/bin/appimagetool dotnet tool install -g KuiperZone.PupNet --version 1.9.1 pupnet -r linux-x64 -c Release --kind appimage --app-version $RELEASE_VERSION --clean流程拆解fuse3AppImage 运行时依赖 FUSE需先安装appimagetool把打包产物转换为 AppImage 的工具KuiperZone.PupNet版本固定为 1.9.1StabilityMatrix 使用的跨平台部署工具其配置位于仓库根目录的 StabilityMatrix.Avalonia.pupnet.conf其中声明了AppBaseName StabilityMatrix.Avalonia、AppFriendlyName Stability Matrix、AppId zone.lykos.stabilitymatrix、StartCommand stabilitymatrix等元信息pupnet -r linux-x64 -c Release --kind appimage --app-version $RELEASE_VERSION --clean以 AppImage 形式产出发布包--clean表示清理旧输出。值得一提的细节PupNet 配置文件中的DotnetPublishArgs与 Windows 单文件发布一脉相承包含-p:PublishReadyToRuntrue -p:PublishSingleFiletrue -p:IncludeNativeLibrariesForSelfExtracttrue且默认--self-contained自包含部署终端用户无需预装 .NET 运行时。工程脚本Husky.Net 与 pre-commit 钩子仓库使用 Husky.Net 管理 git 钩子与任务运行器。安装钩子构建一次StabilityMatrix.Avalonia工程即可自动安装 Husky.Net也可以手动执行dotnet tool restore dotnet husky install这里的自动化其实也写进了工程文件StabilityMatrix.Avalonia.csproj 中有一个名为husky的 MSBuild Target挂在Restore;CollectPackageReferences之前条件是HUSKY1或HUSKY ! 0且非 CI 环境其内容就是执行dotnet tool restore与dotnet husky install——这就是“构建一次即装好钩子”的底层原理。日常新增/更新 pre-commit 钩子时可单独运行dotnet husky installpre-commit 钩子实际执行什么钩子入口是 .husky/pre-commit它会调用dotnet husky run --group pre-commit。而具体任务定义在 .husky/task-runner.json 中当前包含两条 pre-commit 任务任务名命令作用对象Run csharpierdotnet csharpier format ${staged}**/*.csRun xamlstylerdotnet xstyler -f ${staged}**/*.axaml也就是说每次提交时所有暂存的.cs与.axaml文件会被自动格式化。这与仓库的格式配置是配套的.editorconfig规定max_line_length 120、dotnet_sort_system_directives_first true等规则而 .csharpierrc.yaml 将 CSharpier 的行宽设为110。${staged}是 Husky 对暂存文件列表的模板变量保证只格式化本次提交涉及的文件。生成的 OpenApi 客户端Refitter 再生成流程仓库的部分 API 客户端是通过Refitter从 OpenApi 文档自动生成的遵循“接口契约变化后一键重新生成”的维护模式。新客户端应登记到 .husky/task-runner.json 中即新增一个group: generate-openapi的 refitter 任务重新生成全部客户端执行dotnet husky run -g generate-openapi当前 .husky/task-runner.json 中登记了两个生成任务LykosAuthApi以 StabilityMatrix.Core/Api/LykosAuthApi/.refitter 为设置文件输出到StabilityMatrix.Core/Api/LykosAuthApi/Generated接口命名为LykosAuthApiV2并通过includePathMatches只保留/api/v2/Accounts/me、/api/v2/oauth/patreon、/api/v2/files/download等路径PromptGenApi以 StabilityMatrix.Core/Api/PromptGen/.refitter 为设置文件生成提示词生成服务客户端。从源码结构看StabilityMatrix.Core/Api 目录下还手工维护着大量I*Api.cs接口如ICivitApi、IComfyApi、IHuggingFaceApi等说明仓库的策略是能契约化生成的走 Refitter其余手工接口保持 Refit 风格——二者的共同点是都位于Api目录符合 CONTRIBUTING 中“Refit 接口放在Api\文件夹”的约定。代码风格指南CONTRIBUTING 的风格章节与官方 C# 风格指南基本一致少数地方有项目特化。以下逐条给出规则与代码示例。命名约定Naming ConventionsPascal Case帕斯卡命名命名class、record、struct以及类型的public成员字段、属性、方法、局部函数时使用 PascalCase例如CheckpointManagerViewModel、DownloadPackage命名interface时除 PascalCase 外还须加前缀I例如 StabilityMatrix.Core/Api/ICivitApi.cs、StabilityMatrix.Core/Services/IServiceManager.cs。Camel Case驼峰命名private或internal字段使用 camelCase禁止为它们添加下划线前缀_。这一条与 .editorconfig 中的规则遥相呼应——注意.editorconfig里 ReSharper 侧的resharper_style aaBb, _ aaBb是 IDE 内部的兼容映射而源码层面遵循“无下划线前缀”的规范阅读仓库代码时可留意各类readonly字段的写法。using指令不要提交带有未使用using语句的代码。配合 .editorconfig 的dotnet_sort_system_directives_first trueSystem 命名空间应排在首位IDE/分析器会协助清理。文件作用域命名空间File-scoped Namespaces一律使用文件作用域命名空间C# 10 语法using System; namespace X.Y.Z; class Foo { }仓库中几乎所有源文件都遵循此写法例如 analyzers/StabilityMatrix.Analyzers/ViewModelControlConventionAnalyzer.cs 顶部即为namespace StabilityMatrix.Analyzers;。隐式类型局部变量var当局部变量的类型能从赋值右侧明显看出、或精确类型并不重要时使用隐式类型var例如var dialog new InstallerWindowDialog();可选花括号Optional Curly Braces只有一种情况下允许省略if的花括号紧随其后的语句是return。以下写法可接受if (alreadyAteBreakfast) return;其余情况必须带花括号if (alreadyAteLunch) { mealsEaten; }项目结构Project StructureCONTRIBUTING 明确了目录组织原则结合当前仓库可以一一对应模型类放入Models\目录 → 见 StabilityMatrix.Core/Models282 个模型文件与 StabilityMatrix.Avalonia/ModelsViewModel放入ViewModels\→ 见 StabilityMatrix.Avalonia/ViewModels含Base/、Dialogs/、Inference/等子目录只含扩展方法的静态类放入Extensions\→ 见 StabilityMatrix.Core/Extensions 与 StabilityMatrix.Avalonia/ExtensionsXAML Designer 用的 Mock 数据放入DesignData\→ 见 StabilityMatrix.Avalonia/DesignData 中的Mock*类XAML 转换器与JSON 转换器分别放入Converters\与Converters\Json\→ 见 StabilityMatrix.Avalonia/Converters 与 StabilityMatrix.Core/Converters/JsonRefit 接口放入Api\→ 见 StabilityMatrix.Core/ApiHelper\与Services\目录没有硬性规范可按最佳判断放置 → 对应 StabilityMatrix.Core/Helper、StabilityMatrix.Core/Services。与仓库工具链的相互印证CONTRIBUTING 提到的规范与自动化在当前仓库中都能找到落地证据格式一致性.editorconfig与 .csharpierrc.yaml 是 CSharpier / 编辑器格式化的依据而 .husky/task-runner.json 在提交前强制运行它们自定义 Roslyn 分析器仓库自带 StabilityMatrix.Analyzers 工程其中的ViewModelControlConventionAnalyzer会以诊断规则SM0001控件必须继承UserControlBase/TemplatedControlBase与SM0002缺少 View 特性在编译期约束 ViewModel/View 的命名与继承约定且这两个分析器通过 StabilityMatrix.Avalonia.csproj 以OutputItemTypeAnalyzer的方式挂进 UI 工程集中式包管理Directory.Packages.props 以ManagePackageVersionsCentrallytrue统一管理全部 NuGet 版本Avalonia 11.3.7、Refit 8.0.0、CommunityToolkit.Mvvm 8.4.0 等新增依赖时应在该文件登记版本而不是在各个 csproj 里写死多平台与测试Runtimes.Default.props的 RID 清单win-x64;linux-x64;osx-x64;osx-arm64与 CONTRIBUTING 声明支持的运行时一致测试侧由 StabilityMatrix.Tests核心逻辑单测与 StabilityMatrix.UITestsAvalonia Headless UI 测试 快照构成二者均通过InternalsVisibleTo访问内部实现。小结围绕 CONTRIBUTING.md本文完整覆盖了 StabilityMatrix 的开发闭环本地构建必须显式指定RuntimeIdentifier三平台 RID 及输出路径Release 发布分别走dotnet publish单文件Windows、build_macos_app.sh打包 .appmacOS、appimagetool PupNet 产出 AppImageLinux工程侧用 Husky.Net 驱动 csharpier / xamlstyler 的 pre-commit 格式化用 Refitter 一键再生成 OpenApi 客户端代码侧则需遵循无下划线前缀的 camelCase 私有字段、文件作用域命名空间、var优先与受约束的花括号省略等约定并按Models、ViewModels、Extensions、DesignData、Converters、Api的目录划分组织新代码。这些规则不仅写在了文档里也同时被.editorconfig、自定义分析器与 pre-commit 钩子强制保障是理解该仓库工程化体系的一把钥匙。赞分享AI 应用人工智能桌面应用本地部署媒体生成【免费下载链接】StabilityMatrixMulti-Platform Package Manager for Stable Diffusion项目地址https://gitcode.com/gh_mirrors/st/StabilityMatrix点击查看免费下载相关推荐superagent 贡献指南从 PR 提交流程到代码风格、测试与分发构建规范superagent 贡献指南从 PR 提交流程到代码风格、测试与分发构建规范 导读 本文以 CONTRIBUTING.md https://link.git开发工具Anubis 贡献指南实战从构建、测试到代码风格与提交规范Anubis 贡献指南实战从构建、测试到代码风格与提交规范 本篇指南基于 Anubis 项目官方贡献文档 docs/docs/developer/CONTR后端网络安全Council of High Intelligence的CI漂移守卫markdownlint规则为何一度静默失效Council of High Intelligence的CI漂移守卫markdownlint规则为何一度静默失效 Council of High IntelAI 技能AI 插件人工智能上一篇OpCore-Simplify 教程黑苹果 OpenCore EFI 自动配置的完整入门指南下一篇StarUML Java插件完全使用指南从入门到精通创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考