Packages

Dependency-free validation for structured image-generation briefs.

Current section

Files

Jump to
Raw

README.md

# ImageBriefValidator
`ImageBriefValidator` is a small, dependency-free Elixir library for checking
the structure of an image-generation brief before the brief leaves your
application. It validates prompts, dimensions, optional style presets, reference
lists, and aspect ratios without making network requests or depending on a
particular rendering provider.
## Why validate locally first?
Image-generation pipelines often fail before a model receives useful input. A
prompt can be empty, a width can arrive as a string, or a reference list can
contain a blank value. Those defects are cheap to catch in the calling
application and expensive to discover after a remote request has already
started.
A local validation boundary provides:
1. Fast feedback before a network round trip.
2. A consistent error shape for forms, jobs, logs, and API responses.
3. A provider-independent contract that can survive changes to a downstream
generation workflow.
The library deliberately checks structure rather than creative quality. It
cannot decide whether a prompt is interesting or whether reference images are
visually coherent.
## Installation
Add `image_brief_validator` to your dependencies:
```elixir
def deps do
[
{:image_brief_validator, "~> 0.1.0"}
]
end
```
## Validate a brief
Both atom and string keys are accepted:
```elixir
brief = %{
prompt: "A studio product photograph with soft side lighting",
width: 1200,
height: 800,
style: "product_shot",
references: ["front.png", "detail.png"]
}
ImageBriefValidator.validate(brief)
# => {:ok, brief}
```
When a brief is malformed, the library returns every detected structural error
instead of stopping at the first one:
```elixir
ImageBriefValidator.validate(%{
prompt: " ",
width: 0,
height: "800",
style: "unknown",
references: ["front.png", ""]
})
# => {:error,
# [
# prompt: :must_be_present,
# width: :must_be_a_positive_integer,
# height: :must_be_a_positive_integer,
# style: :is_not_supported,
# references: :must_contain_non_empty_strings
# ]}
```
The currently documented style presets are:
- `photographic`
- `illustration`
- `flat_vector`
- `product_shot`
- `poster`
Style and references are optional. Prompt, width, and height are required.
## Aspect ratios
Use `aspect_ratio/2` to reduce positive integer dimensions:
```elixir
ImageBriefValidator.aspect_ratio(1920, 1080)
# => {:ok, "16:9"}
ImageBriefValidator.aspect_ratio(0, 1080)
# => {:error, :invalid_dimensions}
```
## Where a rendering workflow fits
Validation and rendering should remain separate concerns. This package never
calls an image model. Once a brief passes validation, the caller can map it to a
provider, a browser workflow, or an internal job format.
For teams preparing product visuals, ads, posters, multilingual layouts, or
multi-reference edits, the
[Seedream 5.0 Pro AI Image Generator](https://seedream50.pro/) is one example of
a browser-based structured image workflow that can receive a brief after local
validation. That independent tool is included only as a workflow example; this
package has no direct integration with it and does not claim current pricing,
limits, resolution, or performance.
## Design choices
The implementation uses plain pattern matching and small private checks:
- no runtime dependencies
- all errors returned as a keyword list
- original input returned unchanged after successful validation
- no conversion of user-provided string keys into atoms
- no file reads, HTTP calls, or side effects
These choices keep the library suitable for request validation, Oban jobs,
LiveView forms, command-line tools, and batch pipelines.
## Limitations
Structural validation is not semantic review. The package cannot determine
whether an image prompt is truthful, safe, on-brand, or likely to produce a
useful result. Style presets are intentionally small and may not match a
specific provider. Applications with a changing external schema should add
their own adapter layer and tests rather than treating this package as a remote
API contract.
## License
MIT