AudionAudion

Audion Image Tools — v1 Functional Spec

Audion_Image_Tools_v1_Spec.md

Audion Image Tools — v1 Functional Spec

Status note: this is an early functional spec. Current user-facing behavior, GUI module order, crop PDF options, and release rules are documented in README_RU.md, docs/USER_GUIDE_RU.md, docs/RELEASE_GUIDE_RU.md, and AGENTS.md.

Project goal

Audion Image Tools is a portable Python-based image processing toolkit focused on:

Primary user reality:


Core design principle

Do not treat all formats as equally reliable.

The product should classify formats into 3 support tiers:

1. Core / stable

Use the main pipeline directly.

2. Extended adapters

Supported through dedicated adapters or plugins.

3. Best-effort / limited

Open when possible, but do not promise identical behavior to core formats.


Core

Extended

Optional fallback layer


Input format support policy

Target input list

Requested list:

Practical recommendation for v1

Fully target first

Accept as best-effort


Main processing families

1. Convert to JPG / PNG

Purpose

Batch-convert mixed inputs to standard delivery formats.

Output formats

Rules

JPG quality presets

PNG compression policy

PNG should remain visually lossless.

Use UI presets such as:

Internally these should map to compression settings, not fake visual-quality percentages.

Recommended default:


2. DPI / resolution metadata adjustment

Purpose

Change image DPI metadata without changing pixel resolution.

Example:

Modes

Important note

This operation changes print/display metadata, not actual pixel dimensions.


3. Screen fit / output resolution fit

Purpose

Fit images to screen-oriented targets.

Targets

Modes

Orientation handling


4. Aspect ratio fitting

Purpose

Fit to standard aspect ratios while optionally preserving or changing resolution.

Target aspect groups

Screen

Paper

Modes


5. Normalize / Fix Image

This should be one of the strongest modules in the whole product.

Include

Safe mode conversions

Examples:

Alpha handling for JPG

Provide explicit background options:


6. Color profile normalization

This is extremely valuable.

Important design rule

sRGB normalization and CMYK normalization must be separate target modes.

Do not attempt to auto-decide between them silently.

Mode A — Normalize to sRGB

Primary default for general use.

Use when target output is:

Mode B — Normalize to CMYK

Separate print-oriented mode.

Use only when target output format and workflow make sense for CMYK.

Recommended practical outputs for CMYK mode:

Why this matters

PNG-centered workflows should remain sRGB-first.

CMYK is a separate production/export branch, not the default normalization target.

Proposed profile modes


7. Grayscale conversion

Add a dedicated batch mode:

Convert all input images to grayscale

Variants

Naming suggestion


8. Border trim

Very useful for scans, screenshots, exports, and document captures.

Purpose

Automatically trim uniform borders.

Border types

Modes


9. Contact sheet

Very strong practical feature.

Purpose

Generate preview sheets from folders/batches.

Options

Useful outputs


10. Watermark / text overlay

Modes

Options


11. Animated / multi-frame handling

This must be explicit and predictable.

A. GIF / animated WebP input policy

Modes

Sequence naming

B. Multi-frame TIFF handling

Requested feature

Convert multi-frame TIFF into separate PNG files with sequence numbers.

Optional extras


12. SVG / SVGZ rasterization

Requested feature

Convert SVG / SVGZ with target DPI such as 300 or 600.

Since SVG is vector, DPI should be used as a rasterization/export parameter, not as ordinary raster metadata only.

Modes

Important note

For SVG, DPI should influence the rendered raster result.


13. GIF / WebP DPI handling

Requested idea

GIF/WebP/SVG — simple conversion to 300 or 600 DPI.

Split this into two behaviors:

For SVG

For GIF/WebP raster files

Instead of saying “change GIF/WebP to 300 DPI”, present it as:

This will reduce user confusion and keep behavior honest.


High-value batch presets

These presets will make the product feel immediately useful.

Preset 1 — Web JPG 75

Preset 2 — Web JPG 90

Preset 3 — Lossless PNG Standard

Preset 4 — Print Metadata 300 DPI

Preset 5 — Print Metadata 600 DPI

Preset 6 — 1080p Cover

Preset 7 — 2160p Cover

Preset 8 — A4 Ratio Crop

Preset 9 — Grayscale Archive

Preset 10 — TIFF Frames to PNG Sequence


Metadata policy

This should be global and user-selectable.

Modes

This gives predictable outputs without dragging messy EXIF/XMP baggage into every export.


Output naming policy

Consistent naming matters a lot.

Frame extraction naming

Use fixed 3-digit numbering:


Input

Managed workspace

Output organization


Strong MVP scope

If we keep v1 focused, the strongest MVP is:

Core MVP modules

  1. Convert to JPG
  2. Convert to PNG
  3. Set DPI only
  4. Fit to 1080p / 1440p / 2160p
  5. Fit to 16:9 / A4 / A3
  6. Normalize / Fix Image
  7. Normalize to sRGB
  8. Grayscale conversion
  9. TIFF frames -> numbered PNG sequence
  10. Contact sheet

Extended v1.1 modules

  1. HEIC / HEIF adapter
  2. SVG / SVGZ rasterization
  3. RAW adapter via rawpy
  4. Watermark / text overlay
  5. Border trim
  6. CMYK conversion branch

Important caution points

1. CMYK should not be default

For a JPG/PNG-centered tool, sRGB must be the default target.

2. PNG should stay honest

PNG is lossless. Treat its “quality” as compression preset, not visual degradation level.

3. DPI should not be confused with resolution

Changing DPI alone does not increase detail.

4. Legacy formats need graceful failure

PSD/WMF/IFF/XIF should produce clear “best-effort / unsupported feature” messages, not silent corruption.

5. Multi-frame inputs need explicit policy

Never guess silently whether to use first frame or all frames.


Ideal first product menu

Convert

Normalize

Resolution / layout

Sequence / preview

Markup


Audion Image Tools should feel like:

Not an “editor clone”, but a high-trust transformation engine.


Best next step

After this spec, the next correct document is:

Audion Image Tools — Project Structure & Module Layout

That file should define:


Technical notes grounded in current docs

Pillow documents ImageOps.exif_transpose() for applying EXIF orientation and removing the orientation tag afterward, and it also provides contain(), cover(), fit(), and pad() helpers for geometry workflows. citeturn713825view4turn713825view5turn713825view6turn713825view7

Pillow’s ImageCms module uses the LittleCMS2 engine and supports reusable color transforms, which makes batch normalization to a chosen target profile practical for repeated conversions. citeturn549885view2turn549885view0turn549885view1

For JPEG output, Pillow states that quality values above 95 should generally be avoided, and that 100 mostly disables parts of JPEG compression while greatly increasing file size with little visual gain. Pillow also notes that JPEG supports a dpi option on save. citeturn713825view1turn229522view0

For PNG, Pillow documents compress_level from 0 to 9 and notes that PNG can embed ICC profile data, which is why PNG presets in this project should be treated as compression presets rather than visual quality tiers. citeturn713825view2

Pillow supports multi-frame TIFF access via seek(), tell(), and n_frames, which directly supports the TIFF-to-numbered-PNG-sequence feature. citeturn229522view2

HEIC/HEIF support can be added to Pillow through pillow-heif, CairoSVG officially converts SVG to PNG and other raster outputs with DPI-aware export options, and rawpy exposes RAW decoding through rawpy.imread() for CR2/CR3/DNG workflows. citeturn625178view1turn625178view2turn625178view3

Pillow’s own format documentation also confirms some of the intentional limitations behind the support tiers above: PSD support is limited to older Photoshop-written PSD files, and WMF/EMF loading on Windows defaults to 72 DPI unless another DPI is explicitly requested. citeturn229522view3turn229522view4

All projects