FrappeUIPhx.DiceBear (frappe_ui_phx v0.3.1)

Copy Markdown View Source

URL da API HTTP do DiceBear (avatares gerados a partir de uma seed).

Funções puras; o componente é FrappeUIPhx.Components.DiceBearAvatar. A API devolve o mesmo avatar para a mesma style + seed + opções, então o servidor só monta a URL — nada é gerado nem guardado aqui. Não há biblioteca oficial para Elixir; as opções são esta API (URL em <img>) ou a mesma API hospedada por você.

Privacidade

A seed vai na URL para quem hospeda a API. Não use e-mail, CPF ou nome completo; use seed/1 (id opaco).

Uso comercial, limites e licenças

A API pública (https://api.dicebear.com/10.x) é gratuita para uso não comercial, sem garantia de disponibilidade e com limite por segundo (SVG 50, raster 10; excedido: HTTP 429). Em produção/comercial, hospede a sua (guia, imagem Docker dicebear/api) e configure:

config :frappe_ui_phx, dice_bear_base_url: "https://avatars.meuapp.com/10.x"

Cada estilo tem a licença do seu criador (CC BY 4.0 exige atribuição, CC0, MIT...); confira em https://www.dicebear.com/licenses/ antes de publicar.

Determinismo

A seed passa por um hash (FNV-1a) que inicia um gerador pseudoaleatório (Mulberry32): a mesma style + seed + opções dá sempre o mesmo avatar. Não é criptográfico: serve para avatar estável, nunca para derivar segredo.

Opções

opts vira a query string. Comuns: flip (none|horizontal|vertical|both), rotate, scale, borderRadius (0 a 50), size, translateX/translateY, backgroundColor (lista de hex), backgroundColorFill; cada estilo tem as suas (hairVariant, ...). idRandomization, fontFamily, fontWeight e title só funcionam em instância própria. Raster (png, jpg, webp, avif) vai até 256 px na API pública. options/1 converte e valida as opções do núcleo em snake_case (border_radius: 50) para os parâmetros da API.

Receita "avatar placeholder"

Para quem ainda não enviou foto, gere o avatar de uma seed estável (id do usuário, seed/1) ou, no estilo initials, das iniciais do nome (initials/1). O componente DiceBearAvatar já faz a troca no servidor (image presente = foto real).

Summary

Functions

URL base configurada (:dice_bear_base_url) ou a API pública do DiceBear.

Formatos de imagem aceitos (json devolve metadados, não imagem).

Iniciais de um nome (até duas letras maiúsculas): "Ana Souza" -> "AS", "ana" -> "A", sem letras -> nil. Para style="initials" na receita de placeholder.

Opções do núcleo em snake_case -> parâmetros da API, validadas nos intervalos da documentação (flip, rotate -360..360, scale 0..10, border_radius 0..50, translate_x/translate_y -1000..1000, background_color (hex, com ou sem #; texto ou lista), background_color_fill, background_color_angle, tags). Chave desconhecida ou valor fora do contrato falha alto.

Seed opaca e estável para um identificador (id, e-mail...): 16 hex do SHA-256. Evita colocar dados pessoais na URL.

Estilos oficiais conhecidos (DiceBear 10.x), para documentação e seletores.

URL do avatar. opts são os parâmetros da API (listas viram a,b); config aceita format: (svg padrão) e base_url: (troca o servidor).

Functions

base_url()

@spec base_url() :: String.t()

URL base configurada (:dice_bear_base_url) ou a API pública do DiceBear.

formats()

@spec formats() :: [String.t()]

Formatos de imagem aceitos (json devolve metadados, não imagem).

initials(name)

@spec initials(term()) :: String.t() | nil

Iniciais de um nome (até duas letras maiúsculas): "Ana Souza" -> "AS", "ana" -> "A", sem letras -> nil. Para style="initials" na receita de placeholder.

options(typed)

@spec options(keyword() | map()) :: %{required(String.t()) => term()}

Opções do núcleo em snake_case -> parâmetros da API, validadas nos intervalos da documentação (flip, rotate -360..360, scale 0..10, border_radius 0..50, translate_x/translate_y -1000..1000, background_color (hex, com ou sem #; texto ou lista), background_color_fill, background_color_angle, tags). Chave desconhecida ou valor fora do contrato falha alto.

iex> FrappeUIPhx.DiceBear.options(border_radius: 50, background_color: ["#b6e3f4"])
%{"backgroundColor" => ["b6e3f4"], "borderRadius" => 50}

seed(identifier)

@spec seed(term()) :: String.t()

Seed opaca e estável para um identificador (id, e-mail...): 16 hex do SHA-256. Evita colocar dados pessoais na URL.

styles()

@spec styles() :: [String.t()]

Estilos oficiais conhecidos (DiceBear 10.x), para documentação e seletores.

url(style, seed, opts \\ %{}, config \\ [])

@spec url(String.t(), String.t(), map() | keyword(), keyword()) :: String.t()

URL do avatar. opts são os parâmetros da API (listas viram a,b); config aceita format: (svg padrão) e base_url: (troca o servidor).

O estilo só precisa ter um nome bem formado (thumbs, pixel-art): a lista muda entre versões e em instâncias próprias, então um estilo novo não é recusado aqui (se não existir, o servidor responde 404).

iex> FrappeUIPhx.DiceBear.url("thumbs", "ana", %{backgroundColor: ["b6e3f4"], flip: "horizontal"})
"https://api.dicebear.com/10.x/thumbs/svg?backgroundColor=b6e3f4&flip=horizontal&seed=ana"