# gecol-core
A perception-aware accent color extractor and dynamic theme generator.
## Table of Contents
- [How to get it](#how-to-get-it)
- [With cargo](#with-cargo)
- [Example](#example)
- [Full pipeline](#full-pipeline)
- [Template syntax](#template-syntax)
- [Configuration](#configuration)
- [Links](#links)
## How to get it
This crate is available on [crates.io](https://crates.io/crates/gecol-core).
### With cargo
```bash
cargo add gecol-core
```
## Example
### Full pipeline
You can extract a color, generate a theme and build a template using only
a few lines of code:
```rust
use gecol_core::prelude::*;
let config = Config::default();
// 1. Extract the color from the given image
if let Some(color) = Extractor::extract_cached("/path/img.jpg", &config, None)? {
// 2. Generate theme based on that color
let theme = Theme::dark(color);
// 3. Build the configuration file
let template = Template::new("config.toml.template", "config.toml");
template.build(&theme)?;
// Or when having multiple templates (more efficient)
let templates: Vec<Template> = get_templates();
build_templates(&templates, theme)?;
}
```
### Template syntax
In the templates, you have access to a rich object-oriented color API:
```text
background = "{{ background }}"
transparent_bg = "{{ background.hexa(0.8) }}"
hover_color = "{{ background.lighten(0.1) }}"
border = rgba({{ primary.rgb }}aa)
```
## Configuration
The [`ExtractionConfig`] struct allows fine-tuning of the extraction
algorithm, such as saliency bonus, warmth bias and so on. You can read more
about all the fine-tuning options in the [`ExtractionConfig`]
documentation.
## Links
- **Author:** [Martan03](https://github.com/Martan03)
- **GitHub repository:** [gecol](https://github.com/Martan03/gecol)
- **Package**: [crates.io](https://crates.io/crates/gecol-core)
- **Documentation**: [docs.rs](https://docs.rs/gecol-core/latest/gecol/gecol-core)
- **Author website:** [martan03.github.io](https://martan03.github.io)