酸橙熊熊(青柠熊熊)是一个舞萌 DX 数据渲染服务,提供高性能的图像生成和数据处理能力。项目基于 .NET 构建,采用 gRPC 协议提供高效的远程过程调用服务。
- 🎯 多数据源支持: 同时支持落雪和水鱼数据源
- 🎨 高质量渲染: 基于 SixLabors.ImageSharp 的高性能图像渲染引擎
- 📊 数据统计: 提供 Best 50、歌曲列表等多种数据展示
- 🔄 实时处理: 支持流式图像数据传输
- 🎭 动画支持: 可生成动画效果的 Best 50 图片
- 🎮 游戏集成: 专为舞萌 DX 游戏设计的数据处理
- 运行时: .NET
- 通信协议: gRPC
- 图像处理: SixLabors.ImageSharp.Drawing
- 字体渲染: SixLabors.Fonts
- 表达式引擎: NCalc
- 模板引擎: SmartFormat
Limekuma/
├── src/ # 源代码目录
│ ├── Prober/ # 数据探针模块
│ │ ├── Common/ # 通用数据模型
│ │ ├── DivingFish/ # 水鱼数据源
│ │ └── Lxns/ # 落雪数据源
│ ├── Render/ # 渲染引擎
│ │ ├── ExpressionEngine/ # 表达式引擎
│ │ ├── Nodes/ # 渲染节点
│ │ └── XmlSceneLoader.cs # XML场景加载器
│ ├── Services/ # gRPC服务实现
│ │ ├── BestsService.cs # Best 50服务
│ │ ├── ListService.cs # 列表服务
│ │ └── ...
│ ├── Utils/ # 工具类
│ ├── Protos/ # Protocol Buffers定义
│ └── Resources/ # 资源文件
├── docs/ # 文档资源
└── .github/ # GitHub工作流
- .NET 10.0 SDK
- 支持 HTTP/2 的客户端
-
克隆项目
git clone https://github.com/DerakkumaDev/limekuma-printer.git cd limekuma-printer -
恢复依赖
dotnet restore
-
运行服务
dotnet run --project src/Limekuma.csproj
服务默认运行在 HTTP/2 端口,支持以下 gRPC 服务:
GetFromLxns: 从落雪获取 Best 50GetAnimeFromLxns: 从落雪获取动画版 Best 50GetFromLxnsWithLevelSeg: 从落雪获取带等级建议的 Best 50GetFromDivingFish: 从水鱼获取 Best 50GetAnimeFromDivingFish: 从水鱼获取动画版 Best 50GetFromDivingFishWithLevelSeg: 从水鱼获取带等级建议的 Best 50
GetFromLxns: 从落雪获取达成表GetFromDivingFish: 从水鱼获取达成表
// 创建gRPC客户端
var channel = GrpcChannel.ForAddress("https://localhost:5001");
var client = new BestsApi.BestsApiClient(channel);
// 请求落雪Best 50数据
var request = new LxnsBestsRequest
{
DevToken = "your_dev_token",
Qq = 123456789,
PersonalToken = "your_personal_token"
};
using var call = client.GetFromLxns(request);
await foreach (var imageResponse in call.ResponseStream.ReadAllAsync())
{
// 处理图像数据
var imageData = imageResponse.Data;
}项目使用自定义的 XML 格式描述渲染场景:
<Canvas width="1200" height="1600" background="#FFFFFFFF">
<Layer opacity="1">
<Positioned x="100" y="100">
<Text value="玩家Best 50" fontFamily="NotoSans" fontSize="24" color="#000000"/>
</Positioned>
<For items="records" var="record" indexVar="i">
<Positioned x="{100 + (i % 5) * 120}" y="{200 + (i / 5) * 120}">
<Image namespace="Jacket" id="{record.JacketId}"/>
</Positioned>
</For>
</Layer>
</Canvas>Canvas: 画布容器Layer: 图层(支持透明度)Positioned: 定位容器Image: 图像节点Text: 文本节点Stack: 堆叠布局If: 条件渲染For: 循环渲染
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Kestrel": {
"EndpointDefaults": {
"Protocols": "Http2"
}
}
}- 内存管理: 使用 ImageSharp 的高效内存处理
- 并行处理: 支持异步并行图像处理
- 资源缓存: 智能资源缓存机制
- 流式传输: 支持分块流式图像传输
- Fork 本项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull request
本项目采用 GNU Affero General Public License v3.0 许可证 - 查看 LICENSE 文件了解详情。
如果您遇到任何问题或有建议,请通过以下方式联系我们:
- 📧 QQ: 2689340931
- 🐛 源域漏洞追踪系统
感谢以下开源项目的支持:
让音游数据渲染更简单 · Powered by .NET
