{"id":51483534,"url":"https://github.com/solido/mixbox","last_synced_at":"2026-07-07T04:01:01.957Z","repository":{"id":361690808,"uuid":"1154630545","full_name":"Solido/mixbox","owner":"Solido","description":"Mixbox is a library for natural color mixing based on real pigments.","archived":false,"fork":false,"pushed_at":"2026-02-10T16:29:48.000Z","size":401,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T21:29:24.496Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Dart","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Solido.png","metadata":{"files":{"readme":"README.FR.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T15:54:55.000Z","updated_at":"2026-04-15T05:29:49.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Solido/mixbox","commit_stats":null,"previous_names":["solido/mixbox"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/Solido/mixbox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Solido%2Fmixbox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Solido%2Fmixbox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Solido%2Fmixbox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Solido%2Fmixbox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Solido","download_url":"https://codeload.github.com/Solido/mixbox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Solido%2Fmixbox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35213821,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-07T02:00:07.222Z","response_time":90,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-07T04:01:01.143Z","updated_at":"2026-07-07T04:01:01.951Z","avatar_url":"https://github.com/Solido.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mixbox pour Dart/Flutter\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://scrtwpns.com/mixbox/teaser.jpg\"/\u003e\n\u003c/p\u003e\n\nImplémentation Dart de **Mixbox 2.0** - mélange de couleurs physiquement réaliste simulant le comportement des pigments réels.\n\n## 🎨 Pourquoi Mixbox ?\n\nLe mélange RGB classique produit des couleurs ternes :\n- **Jaune + Bleu = Gris** ❌ (en RGB)\n- **Jaune + Bleu = Vert** ✅ (avec Mixbox)\n\nMixbox simule le comportement physique des pigments pour des résultats naturels.\n\n## 📦 Installation\n\n### 1. Ajoutez les fichiers\n\n```\nlib/\n  mixbox/\n    mixbox.dart\n    mixbox_loader.dart\nassets/\n  mixbox_lut.dat\n```\n\n### 2. Dépendances dans `pubspec.yaml`\n\n```yaml\ndependencies:\n  flutter:\n    sdk: flutter\n  archive: ^3.4.0 \n\nflutter:\n  assets:\n    - assets/mixbox_lut.dat\n```\n\n### 3. Téléchargez la LUT\n\nLe fichier `mixbox_lut.dat` doit être téléchargé depuis :\n- **Source officielle**: https://github.com/scrtwpns/mixbox\n- Placez-le dans `assets/mixbox_lut.dat`\n\n\u003e ⚠️ **Important**: Sans la LUT, Mixbox ne fonctionnera pas correctement.\n\n## 🚀 Utilisation\n\n### Initialisation (une fois au démarrage)\n\n```dart\nimport 'mixbox_loader.dart';\n\nvoid main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n  \n  // Chargement de la LUT\n  await MixboxLoader.initializeFromAsset('assets/mixbox_lut.dat');\n  \n  runApp(MyApp());\n}\n```\n\n### Mélange simple (2 couleurs)\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'mixbox.dart';\nimport 'mixbox_loader.dart';\n\n// Extension pour faciliter l'usage avec Flutter Color\nfinal yellow = Color(0xFFFEEC00);\nfinal blue = Color(0xFF190059);\n\nfinal green = yellow.mixWith(blue, 0.5); // 50% de chaque\n```\n\n### Mélange multi-couleurs (3+)\n\n```dart\nfinal red = Color(0xFFFF2702);\nfinal yellow = Color(0xFFFCD300);\nfinal blue = Color(0xFF0D1B44);\n\n// Conversion en espace latent\nfinal z1 = Mixbox.rgbToLatent(red.toMixboxInt());\nfinal z2 = Mixbox.rgbToLatent(yellow.toMixboxInt());\nfinal z3 = Mixbox.rgbToLatent(blue.toMixboxInt());\n\n// Mélange personnalisé\nfinal zMix = List.generate(\n  Mixbox.latentSize,\n  (i) =\u003e 0.4 * z1[i] + 0.3 * z2[i] + 0.3 * z3[i],\n);\n\nfinal mixed = Color(Mixbox.latentToRgb(zMix));\n```\n\n### Gradient physiquement correct\n\n```dart\nfinal gradient = List.generate(\n  10,\n  (i) =\u003e yellow.mixWith(blue, i / 9.0),\n);\n```\n\n## 🎨 Couleurs Pigments Prédéfinies\n\nUtilisez ces couleurs pour des résultats réalistes :\n\n```dart\nconst cadmiumYellow = Color(0xFFFEEC00);       // Jaune cadmium\nconst hansaYellow = Color(0xFFFCD300);         // Jaune Hansa\nconst cadmiumOrange = Color(0xFFFF6900);       // Orange cadmium\nconst cadmiumRed = Color(0xFFFF2702);          // Rouge cadmium\nconst quinacridoneMagenta = Color(0xFF80022E); // Magenta quinacridone\nconst cobaltViolet = Color(0xFF4E0042);        // Violet cobalt\nconst ultramarineBlue = Color(0xFF190059);     // Bleu outremer\nconst cobaltBlue = Color(0xFF002185);          // Bleu cobalt\nconst phthaloBlue = Color(0xFF0D1B44);         // Bleu phthalo\nconst phthaloGreen = Color(0xFF003C32);        // Vert phthalo\nconst permanentGreen = Color(0xFF076D16);      // Vert permanent\nconst sapGreen = Color(0xFF6B9404);            // Vert sève\nconst burntSienna = Color(0xFF7B4800);         // Terre de Sienne brûlée\n```\n\n## 📊 API Complète\n\n### Méthodes principales\n\n```dart\n// Mélange int (0xAARRGGBB)\nint Mixbox.lerp(int color1, int color2, double t)\n\n// Mélange liste [r, g, b] ou [r, g, b, a] (0-255)\nList\u003cint\u003e Mixbox.lerpList(List\u003cint\u003e color1, List\u003cint\u003e color2, double t)\n\n// Mélange float [r, g, b] ou [r, g, b, a] (0.0-1.0)\nList\u003cdouble\u003e Mixbox.lerpFloat(List\u003cdouble\u003e color1, List\u003cdouble\u003e color2, double t)\n\n// Mélange RGB linéaire (pour rendu 3D)\nList\u003cdouble\u003e Mixbox.lerpLinearFloat(List\u003cdouble\u003e color1, List\u003cdouble\u003e color2, double t)\n```\n\n### Conversions\n\n```dart\n// RGB → Latent\nList\u003cdouble\u003e Mixbox.rgbToLatent(int color)\nList\u003cdouble\u003e Mixbox.floatRgbToLatent(double r, double g, double b)\n\n// Latent → RGB\nint Mixbox.latentToRgb(List\u003cdouble\u003e latent)\nList\u003cdouble\u003e Mixbox.latentToFloatRgb(List\u003cdouble\u003e latent)\n```\n\n## 🧪 Exemple Complet\n\n```dart\nimport 'package:flutter/material.dart';\nimport 'mixbox.dart';\nimport 'mixbox_loader.dart';\n\nvoid main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n  await MixboxLoader.initializeFromAsset('assets/mixbox_lut.dat');\n  runApp(const MyApp());\n}\n\nclass MyApp extends StatefulWidget {\n  const MyApp({super.key});\n\n  @override\n  State\u003cMyApp\u003e createState() =\u003e _MyAppState();\n}\n\nclass _MyAppState extends State\u003cMyApp\u003e {\n  double _mix = 0.5;\n  \n  final _yellow = const Color(0xFFFEEC00);\n  final _blue = const Color(0xFF190059);\n\n  @override\n  Widget build(BuildContext context) {\n    final mixed = _yellow.mixWith(_blue, _mix);\n    \n    return MaterialApp(\n      home: Scaffold(\n        appBar: AppBar(title: const Text('Mixbox Demo')),\n        body: Column(\n          children: [\n            Container(height: 200, color: mixed),\n            Slider(\n              value: _mix,\n              onChanged: (v) =\u003e setState(() =\u003e _mix = v),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n```\n\n## ⚙️ Configuration Avancée\n\n### Sans la LUT (Tests uniquement)\n\n```dart\n// Génère une approximation (NON recommandé en production)\nfinal testLut = MixboxLoader.generateTestLut();\nMixbox.initialize(testLut);\n```\n\n### Espace Linéaire (Rendu 3D)\n\nPour shaders/rendu 3D, utilisez l'espace linéaire :\n\n```dart\nfinal color1Linear = [1.0, 0.5, 0.0]; // RGB linéaire\nfinal color2Linear = [0.0, 0.2, 1.0];\n\nfinal mixed = Mixbox.lerpLinearFloat(color1Linear, color2Linear, 0.5);\n```\n\n## 📝 Licence\n\n**Creative Commons Attribution-NonCommercial 4.0**\n\n- ✅ Usage non-commercial gratuit\n- ❌ Usage commercial nécessite une licence\n- Contact: mixbox@scrtwpns.com\n\n## 🔗 Ressources\n\n- **Site officiel**: https://scrtwpns.com/mixbox\n- **Paper**: https://scrtwpns.com/mixbox.pdf\n- **GitHub**: https://github.com/scrtwpns/mixbox\n- **Démo interactive**: https://scrtwpns.com/mixbox/painter/\n\n## ❓ FAQ\n\n**Q: Pourquoi la LUT est nécessaire ?**  \nR: Elle contient les données pré-calculées du modèle physique des pigments (64×64×64 = 262,144 valeurs).\n\n**Q: Puis-je utiliser sans la LUT ?**  \nR: Non pour des résultats corrects. La fonction `generateTestLut()` est juste pour les tests rapides.\n\n**Q: Performances ?**  \nR: Très rapide (~1μs par mélange). L'interpolation trilinéaire est optimisée.\n\n**Q: Différence avec HSV/HSL ?**  \nR: HSV/HSL sont des transformations mathématiques. Mixbox simule la physique réelle des pigments.\n\n**Q: Ça marche pour l'animation ?**  \nR: Oui ! Parfait pour les gradients, transitions, et animations fluides.\n\n## 🎯 Cas d'Usage\n\n- 🎨 Applications de dessin/peinture\n- 🌈 Gradients naturels\n- 🎬 Outils de création de contenu\n- 🎮 Systèmes de couleurs dans les jeux\n- 🖼️ Filtres photo réalistes\n- 📊 Visualisations de données\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolido%2Fmixbox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolido%2Fmixbox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolido%2Fmixbox/lists"}