Files
vectorcraft/docs/affinity-validation.md
bflatasticandClaude Opus 5.5 573f27e6c9 AF.4 docs: leave out shop listings and sandbox notes
The source audit linked commercial template listings and other pages it
didn't use, and described the environment it ran in. Keep the two sources
the corpus uses, say in a sentence what kinds of sources were left out and
why, and state plainly that reopening our output in Affinity is still to do.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 22:20:39 +07:00

12 KiB

Affinity 3 .af: source audit and validation boundaries

Audit date: 2026-10-09. This audit focuses on the unified .af document format, not on increasing the number of legacy .afdesign, .afphoto or .afpub files. The source expansion adds 28 original Affinity 3.2.3 saves and one derived regression input to the four existing current-version .af illustrations. Passing a reader test, retaining editable objects and matching a saved picture are separate claims. None demonstrates compatibility with every Affinity feature.

Clean-room evidence

The inputs for this work are public documentation, fixture licensing/provenance notices and public document data. No Affinity executable, installation resources, private API or third-party Affinity parser implementation was read. No Adobe application was run or used as an oracle. Existing project restrictions still apply to Adobe-authored assets and software.

The additional Patchy files below were fetched as individual document blobs. Only its fixture directory listing, MIT license and third-party notice were read; its importer, tests and authoring scripts were not consulted. These files provide independently authored input data, not an implementation to translate.

The upstream notice attributes the ordinary tiny-*.af files to the Patchy team, using licensed Affinity 3.2.3 through its public JavaScript SDK, and describes the content as original, with no third-party content. It separately identifies tiny-lazy-placed.af as a deterministic byte-level derivation. That file is a regression/hostile-input case, not evidence that Affinity saved the derived layout. See the pinned provenance notice and MIT license.

An audit using this project's parser found absolute personal-path metadata in all 33 current .af files, including the four existing CC0 illustrations. These values were not copied into reports or source, and are not imported into the engine document. Do not claim that the downloadable inputs contain no personal paths. Inspection of archive-entry names/signatures and stream byte/blob values found no TTF, OTF, TTC, WOFF or WOFF2 binaries; this signature check is not a complete font-file validation.

Public-source decisions

Source Current .af evidence Features or equivalent files advertised Rights and decision
samuel-etver/vector-art Four .af files already pinned by this project Mexican character illustrations and playing cards; real vector art CC0. Retain the current-version vector examples; no paired PSD identified.
SethRobinson/Patchy fixture data 29 .af blobs at commit de84eab550758b30fa062e479f5778cce7693b73; author states Affinity 3.2.3, with one separately identified derived file Artboards, text, placed images, groups, vectors, masks, shapes, transforms, raster depth, color spaces and unsupported-feature examples MIT, copyright Seth A. Robinson, 2026; original fixture content per notice. Fetch pinned data only, SHA-256 verify, preserve attribution. No paired PSD identified in this directory.

Other public .af sources found while searching (commercial templates and mockups, and pages offering files without a redistribution licence) were left out: a downloadable template, or a free font it uses, isn't permission to redistribute it. Files published before the unified format aren't current-version evidence. This is a sample of discovered sources, not a claim that every public file was found. No openly redistributable, inspected Affinity 3 .af/PSD pair covering complex typography and artboards was located in this audit.

Additional current-version fixture inventory

The corpus names below map to upstream test-fixtures/af/tiny-<suffix>.af. For example, patchy-artboards.af comes from tiny-artboards.af. The source pin, filenames and SHA-256 digest manifest are the reproducibility boundary; never fetch a floating branch for CI.

Area Corpus files What the file selection can test
Artboards and units patchy-artboards.af, patchy-dpi300.af Board identity, rectangles, content association, clipping and conversion from document resolution to points
Editable typography patchy-text-artistic.af, patchy-text-frame.af, patchy-text-runs.af, patchy-text-rotated.af Native text retention, per-run styling, frame geometry and composed transforms
Paragraph/character differences patchy-text-indent.af, patchy-text-para-spacing.af, patchy-text-caps.af Detect unsupported text layout and case features; a passing parse is insufficient evidence of layout fidelity
Curves, shapes and masks patchy-vector.af, patchy-vector-mask.af, patchy-shapes.af, patchy-shapes-2.af Editable paths, mask attachment and known/fallback parametric shapes
Structure and transforms patchy-group.af, patchy-transform.af Nested groups, names, stacking and transform composition
Images and pixels patchy-embedded-jpeg.af, patchy-rgba8.af, patchy-rgba16.af, patchy-cmyk.af, patchy-lab.af Original image retention, tiled pixels, supported depths and explicit color-space limitations
Effects/adjustments/blends patchy-fx.af, patchy-fx-blur.af, patchy-fx-gradient.af, patchy-adjust-curves.af, patchy-adjust-hsl.af, patchy-live-filter.af, patchy-blend-affinity.af Warnings and safe fallbacks for unsupported visual operations; not automatic feature support
Saved revisions and derived input patchy-incremental-chain.af, patchy-lazy-placed.af Revision selection and bounded handling of a derived placement case

These are focused feature probes. They complement the larger vector illustrations but do not replace a large production document with many interacting features. Fixture filenames alone do not prove the imported model preserved those features; assert native model structure and imported engine behavior independently.

PSD compatibility oracle design

Affinity's public PSD-import guide documents import settings that change the result: smart objects can be rasterized or retained, and text can be imported as text or bitmap. It also describes artboard mapping and profile conversion. Therefore, a same-looking PSD is not inherently an equivalent editable document, and an export can lose features before our reader sees it.

For a future paired oracle, record the original author, license for all embedded art, Affinity version, platform, import settings, profile, resolution, fonts, export preset and each expected semantic loss. Keep an original .af, a native Affinity-rendered PNG per board at full resolution, an Affinity-exported PSD and a human-readable object/layout inventory. Do not run Photoshop or another Adobe application to generate or validate the comparison. A PSD written by VectorCraft after import tests our writer/round trip; it is not an independent Affinity oracle.

Compare board dimensions and names, object counts/ordering/visibility, text and run boundaries, placed-image transforms, mask geometry and transparency, then render each board with the documented background. Document which PSD objects are rasterized, approximated or absent. A flat full-document thumbnail can hide lost boards, editable text or misplaced children. Require native-import success where native support is claimed; preview fallback must never satisfy that test.

Typography and complex-document coverage still required

Affinity publicly documents variable fonts, OpenType features, path text, artistic/frame text and precision spacing. The discovered real-file set does not establish faithful support for all of them.

Required independent fixture Evidence needed before claiming support
Variable fonts and named instances Font family plus axes/instance settings preserved; exact pinned font version; non-default weight/width/optical-size rendering
OpenType feature combinations Ligatures, discretionary ligatures, stylistic sets, alternate glyphs, small caps, numeric forms and kerning controls; compare both text content and glyph output
Mixed scripts and direction Arabic joining/RTL, Hebrew, Devanagari conjuncts, Thai combining marks, CJK line breaks, bidi mixed numbers, combining accents and supplementary-plane characters
Mixed runs and font fallback Multiple families, sizes, colors and baseline shifts within one paragraph; missing font and missing glyph outcomes reported without silently changing text
Advanced frames and flow Columns, insets, linked frames, overflow, tabs/indents, paragraph spacing, justified text, wrapping around objects and text on a transformed path
Font representations TrueType, CFF/OpenType, collection faces, variable outlines and color glyph formats; avoid treating family-name retention as outline support
Large interacting document Multiple unequal/overlapping boards, off-board artwork, nested clips/masks, rotations/skews, repeated placed/embedded documents, symbols, images and text at non-72 dpi
Pixel/vector interaction Raster depths/color spaces, blend/opacity combinations, effects, live adjustments, brushes and pressure profiles with explicit warnings for unsupported cases

Acquire these as original contributor documents with explicit redistribution rights, or add independently published originals with complete provenance. Fonts belong in storytold/craft-fonts, not this repository; a fixture's font names do not grant redistribution rights to font binaries. Synthetic containers remain useful for parser limits and precise regression tests, but cannot establish real Affinity saves or rendering semantics for an unobserved feature.

Tests must distinguish supported behavior, approximated behavior with warnings, rejected input and unvalidated behavior. Keep the unmet rows above visible when reporting results: there is no evidence for universal .af compatibility.

Checks added in this change

The pinned corpus contains 51 documents, including 33 current .af files with 34 artboards. Native model signatures freeze retained geometry, paints, masks, images, text runs, fonts, bounds and warnings. Every current board is saved and reloaded in .vectorcraft, then exported through SVG, PDF and PSD. SVG/PDF dimensions and reimport are checked; a test-only decoder written from the public PSD specification compares merged pixels and alpha with VectorCraft's PNG output. These export checks establish internal consistency, not independent Affinity fidelity.

A headless VectorCraft MCP session also opens the real two-board .af, saves and reopens .vectorcraft with the complete saved model unchanged, exports both boards as SVG/PSD, then reopens and exports the two-page PDF again with embedded editing data disabled, exercising the PDF reader rather than native restoration. The normal save command adds creation/modification metadata for the new native file.

Saved-thumbnail comparisons cover 36 board crops across 31 documents. Both boards in the Affinity 3 artboard probe match exactly; the embedded JPEG probe has a mean difference of 0.50/255. Per-file ceilings preserve measured regression limits; unsupported text layout and effects are tested structurally and through warnings.

No check reopens VectorCraft's output in Affinity yet, and no .af export is claimed by this change: the independent reopen procedure above needs Affinity on a supported desktop.