ElBruno.HuggingFace.Downloader
0.6.0
dotnet add package ElBruno.HuggingFace.Downloader --version 0.6.0
NuGet\Install-Package ElBruno.HuggingFace.Downloader -Version 0.6.0
<PackageReference Include="ElBruno.HuggingFace.Downloader" Version="0.6.0" />
<PackageVersion Include="ElBruno.HuggingFace.Downloader" Version="0.6.0" />
<PackageReference Include="ElBruno.HuggingFace.Downloader" />
paket add ElBruno.HuggingFace.Downloader --version 0.6.0
#r "nuget: ElBruno.HuggingFace.Downloader, 0.6.0"
#:package ElBruno.HuggingFace.Downloader@0.6.0
#addin nuget:?package=ElBruno.HuggingFace.Downloader&version=0.6.0
#tool nuget:?package=ElBruno.HuggingFace.Downloader&version=0.6.0
๐ฅ ElBruno.HuggingFace.Downloader
A .NET library to download files (ONNX models, tokenizers, voice presets, etc.) from Hugging Face Hub repositories with progress reporting, caching, and authentication support.
Features
- ๐ฆ Download any file from public or private Hugging Face repositories
- ๐ Rich progress reporting with stages (Checking โ Downloading โ Validating โ Complete)
- ๐ HF_TOKEN authentication for gated/private repositories (env var or explicit)
- ๐ Atomic writes using temp files to avoid partial/corrupt downloads
- โ Required vs optional files โ optional files fail silently
- ๐ HEAD requests to resolve total download size before starting
- โญ๏ธ Skip existing files โ only downloads what's missing
- ๐ฅ๏ธ Cross-platform cache directory helpers (Windows, Linux, macOS)
- ๐ DI-friendly with
IServiceCollectionextension methods - ๐ ILogger integration for structured logging
Installation
dotnet add package ElBruno.HuggingFace.Downloader
Quick Start
1) Download model files
using ElBruno.HuggingFace;
using var downloader = new HuggingFaceDownloader();
await downloader.DownloadFilesAsync(new DownloadRequest
{
RepoId = "sentence-transformers/all-MiniLM-L6-v2",
LocalDirectory = "./models/miniLM",
RequiredFiles = ["onnx/model.onnx", "tokenizer.json"],
OptionalFiles = ["tokenizer_config.json", "vocab.txt"]
});
2) Check if files are already downloaded
bool ready = downloader.AreFilesAvailable(
["onnx/model.onnx", "tokenizer.json"],
"./models/miniLM");
if (!ready)
{
var missing = downloader.GetMissingFiles(
["onnx/model.onnx", "tokenizer.json"],
"./models/miniLM");
Console.WriteLine($"Missing {missing.Count} files");
}
3) Track download progress
var progress = new Progress<DownloadProgress>(p =>
{
if (p.Stage == DownloadStage.Downloading)
Console.Write($"\rโฌ๏ธ [{p.CurrentFile}] {p.PercentComplete:F0}%");
else
Console.WriteLine($"{p.Stage}: {p.Message}");
});
await downloader.DownloadFilesAsync(new DownloadRequest
{
RepoId = "sentence-transformers/all-MiniLM-L6-v2",
LocalDirectory = "./models/miniLM",
RequiredFiles = ["onnx/model.onnx", "tokenizer.json"],
Progress = progress
});
4) Authentication (Private/Gated Repos)
Set the HF_TOKEN environment variable, or pass it explicitly:
var downloader = new HuggingFaceDownloader(new HuggingFaceDownloaderOptions
{
AuthToken = "hf_your_token_here"
});
5) Dependency Injection
builder.Services.AddHuggingFaceDownloader(options =>
{
options.Timeout = TimeSpan.FromMinutes(60);
});
// Then inject HuggingFaceDownloader in your services
public class MyModelService(HuggingFaceDownloader downloader)
{
public async Task EnsureModelAsync()
{
await downloader.DownloadFilesAsync(new DownloadRequest
{
RepoId = "my-org/my-model",
LocalDirectory = DefaultPathHelper.GetDefaultCacheDirectory("MyApp"),
RequiredFiles = ["model.onnx", "tokenizer.json"]
});
}
}
Documentation
| Topic | Description |
|---|---|
| Getting Started | Installation, all usage examples, and setup |
| API Reference | Complete class and method documentation |
| Architecture | Design decisions, data flow, and project structure |
| Publishing | NuGet publishing with GitHub Actions |
Related Projects
- ElBruno.PersonaPlex โ Integrates this downloader to auto-download ONNX models for NVIDIA's PersonaPlex-7B-v1 full-duplex speech-to-speech model
Building from Source
git clone https://github.com/elbruno/ElBruno.HuggingFace.Downloader.git
cd ElBruno.HuggingFace.Downloader
dotnet build ElBruno.HuggingFace.Downloader.slnx
dotnet test ElBruno.HuggingFace.Downloader.slnx
Requirements
- .NET 8.0 SDK or later
๐ค Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
๐ License
This project is licensed under the MIT License โ see the LICENSE file for details.
๐ About the Author
Hi! I'm ElBruno ๐งก, a passionate developer and content creator exploring AI, .NET, and modern development practices.
Made with โค๏ธ by ElBruno
If you like this project, consider following my work across platforms:
- ๐ป Podcast: No Tienen Nombre โ Spanish-language episodes on AI, development, and tech culture
- ๐ป Blog: ElBruno.com โ Deep dives on embeddings, RAG, .NET, and local AI
- ๐บ YouTube: youtube.com/elbruno โ Demos, tutorials, and live coding
- ๐ LinkedIn: @elbruno โ Professional updates and insights
- ๐ Twitter: @elbruno โ Quick tips, releases, and tech news
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
-
net8.0
NuGet packages (7)
Showing the top 5 NuGet packages that depend on ElBruno.HuggingFace.Downloader:
| Package | Downloads |
|---|---|
|
ElBruno.LocalEmbeddings
Local embedding generation using Microsoft.Extensions.AI and ONNX Runtime |
|
|
ElBruno.QwenTTS
Run Qwen3-TTS text-to-speech locally from C# using ONNX Runtime. Models download automatically from HuggingFace on first run. |
|
|
ElBruno.VibeVoiceTTS
A .NET library for VibeVoice text-to-speech using ONNX Runtime. Supports automatic model download from HuggingFace, voice presets, and native C# inference with no Python dependency. |
|
|
ElBruno.Text2Image
A .NET library for local text-to-image generation using Stable Diffusion and ONNX Runtime. Supports multiple models (SD 1.5, LCM Dreamshaper) with automatic model download from HuggingFace and native C# inference โ no Python dependency. |
|
|
ElBruno.LocalLLMs
Local LLM chat completions using Microsoft.Extensions.AI and ONNX Runtime GenAI. IChatClient implementation for running LLMs locally. |
GitHub repositories
This package is not used by any popular GitHub repositories.