Repository navigation
Releases
Aski v0.8.0
Aski v0.8.0
v0.8.0 is the second release on this repository's public history. It corrects how raster
output interprets cell colors, validates GIF loop counts, adds aski render options for the
algorithm, dither strength and palette, and adds a CLI packaging script and a Swift Package
Index documentation config. The full list is in the changelog.
Highlights
- New
aski renderoptions (ASKI-82).--algorithm logPolar|dotMatrix,--coverage 0...1
and--palette fullColor|monochrome. The defaults (logPolar,0,fullColor) produce the
same output as before.--write-manifestrecords the three values as optional fields in the
existing v1 render manifest schema. - Character-art recipes. The recipes guide gives three
CLI recipes with their exact commands and the PNGs they produce from the bundled Carina image.
Each uses at least one of the new options above. - Glyph cycling with
dotMatrix(ASKI-81). Animation glyph cycling now changes glyphs under
dotMatrix; candidates after the base pick are the glyphs nearest in ink density. The base frame
is unchanged. - CLI text output to
/dev/nulland/dev/stdout(ASKI-83).aski render --outputcan
discard text or send it to a pipe while--render-pngwrites the image. - Updated
logPolarguidance (ASKI-79). The documentation now recommendslogPolaronly with
thestandardandbraillecharacter sets, and points todotMatrixfor the sets it renders
blank or with a few repeated glyphs. Converter output did not change. - README hero (ASKI-15). The README image is now a default-settings render from the current
build, with the command that produces it.
Behavior and source changes
- Raster colors change (ASKI-3). ASCII, tile and effects rendering previously interpreted
encoded sRGB and Display P3 cell colors as Generic RGB. They now use the grid's declared color
space, andAskiRenderEngineconverts colors when its output gamut differs from the grid's.
Raster colors change, including mid-gray neutrals. Glyph selection and attributed-string colors
do not change. Review saved renders and remove any compensation for the old colors. - CLI colors are sRGB.
--background,--mask-fallback-colorand--mask-groundare built
in sRGB.aski render --background "#808080"now writes#808080pixels; it wrote#929292
before. The value now matches the#RRGGBBAAvalue recorded in the manifest. - GIF loop counts are validated (ASKI-8).
ASCIIGIFEncoder.writeacceptsloopCountin
0...32767(0is infinite,1plays once) and throws the new
GIFEncodeError.invalidLoopCount(_:)for other values before it creates the file. This new
enum case is a source break for exhaustiveswitchstatements overGIFEncodeError.
GIFEncodeReport.loopCountnow reports the value read back from the written file. - Other special CLI destinations are rejected. Apart from
/dev/nulland/dev/stdout,
special files such as FIFOs are rejected as--outputbefore any output changes. PNG and
manifest destinations must be regular files.
No other public declarations in the Aski module were added, removed or changed since v0.7.0.
Upgrading
Pin the release exactly:
.package(url: "https://github.com/BigCactusLabs/Aski.git", exact: "0.8.0"),Aski is pre-1.0; an exact pin keeps upgrades deliberate. Then:
- Add a branch for
GIFEncodeError.invalidLoopCountto any exhaustiveswitchover
GIFEncodeError, and handle source GIFs whose loop count is outside0...32767. - Re-render and review saved raster output, and remove any manual color compensation for the
previous Generic RGB interpretation. Build background, mask-fallback and ground colors with
explicitly taggedCGColorvalues such asCGColor(srgbRed:green:blue:alpha:). - Regenerate CLI renders made with
--background,--mask-fallback-coloror--mask-ground
before comparing them with new output.
The migration notes cover these steps with
links to the rendering, video and command-line guides.
For contributors
- CLI candidates.
just package-cli <new-dir>builds an arm64-only, relocatableaski
candidate, checks its resources, smoke-tests a relocated copy and writes an archive with
SHA256SUMS. It does not run the acceptance gates or publish anything. See the
distribution guide. - Swift Package Index.
.spi.ymldeclaresAskias the documentation target. - DocC Markdown export path.
./Scripts/validate-docc.sh --emit-markdownno longer writes to
/tmp/aski-docc-markdown, which the v0.7.0 notes describe. It prints the directory it created;
pass--output-dir <new-dir>for a fixed location. - Script tests.
just test-infraruns portable regression tests for the doctor, DocC and
Metal-restoration scripts with Python 3. It does not replacejust check. - Render goldens. Goldens changed by ASKI-3 were re-recorded on macOS 27.0.1 / Xcode 27.0 /
Swift 6.4. Exact raster output also depends on the host machine; see the
toolchain and snapshot baseline.
Licensing
Licensing is unchanged from v0.7.0: Apache License 2.0 (see LICENSE and
NOTICE), with bundled Courier Prime under the SIL Open Font License 1.1.
Verification
Release PR #20 records the just check, just release-preflight, and DocC
Markdown export results together with the commit they ran on.
Assets
No prebuilt CLI binary is attached to this release. Build the CLI from a checkout as the
command-line guide describes. Check the
published release for any documentation assets actually attached.
Aski v0.7.0
Aski v0.7.0
Pictures, reconsidered as type. Now with a public front door.
v0.7.0 is the first release on this repository's public history. The history begins at a single
root commit that holds the code and the published research; development before it happened in a
private repository. The v0.6.0 tag and earlier tags do not exist here. Issue, pull-request and
commit references in the changelog and under docs/ from before this release point to that
private history.
Highlights
- A clearer way in. The README now starts with a bundled-image demo and
Swift integration. A dedicated command-line guide,
contributor guide, refreshed DocC onboarding, and expandedllms.txt
separate everyday use, development, and research. Current defaults, platform requirements,
plain-text/color behavior, and experimental boundaries are explicit. - Unified
aski labcommand tree (ASKI-48).aski lab {color,motion,video,accessibility,decolor,hdr,preset}
replaces the separate lab executables, with Bash, Zsh and Fish completions for the full tree. The
historicalAski*Labproducts remain as thin shims with identical help, usage and exit codes. - Masks and photo dissolve in the CLI (ASKI-43, ASKI-44).
aski render --maskaccepts raster
masks with transparent, solid-color or original-photo fallbacks, sizing modes, hard edges and
inversion. The newMaskOptions.groundColorplaces a color behind active glyphs and tiles. - Exact target-width PNGs (ASKI-63).
ASCIIGrid.renderImage(font:backgroundColor:targetPixelWidth:preserveSourceAspect:)
andaski render --widthrender to an exact pixel width, supersampled 4x and averaged down in
linear light. PNG size no longer depends on--font-size. - Bottom and right edges are sampled again (ASKI-65). Converters used to skip the last
height % rowsrows andwidth % columnscolumns of the source, up to 10% of the image height,
and the result looked stretched downward. The full image is now sampled; every rendered-grid
golden was re-recorded with no tolerance loosened. - Transparent PNG backgrounds.
aski render --background clear(ortransparent) produces an alpha-zero
ground for--render-png. The opaque-black default is unchanged.
Breaking changes
ASCIIAlgorithm.edgeMapis removed (ASKI-16). It picked the wrong stroke orientation in 9 of
20 test cases even after two fixes. Use.logPolar(the default) or.dotMatrix. Removing
edgeMapdid not change those algorithms; the separate sampling fix above can change output.RenderingOptionshas five public controls instead of twelve (ASKI-68). Occupancy matching,
shape-structure assist, steerable-shape assist, ink pre-compensation and chroma-shape assist were
default-off experiments that failed or stayed inconclusive; they are gone from the public API.- Custom character sets are snapshotted (ASKI-71).
ASCIIConvertercopies a character set's
glyph arrays when it is initialized or whencharacterSetis assigned. A reference-type set that
mutates its arrays in place must be assigned again before the next conversion. swift-argument-parserminimum 1.8.0 (ASKI-47). The requirement is nowfrom: "1.8.0".
Migration
After the tag is published, consumers moving from private-history pins can adopt the public
repository with an exact version:
.package(url: "https://github.com/BigCactusLabs/Aski.git", exact: "0.7.0"),Before publication, use a source checkout or a local package dependency. Aski is pre-1.0;
exact pins make upgrades deliberate rather than promising source or output stability.
Code using .edgeMap or removed RenderingOptions controls needs the changes above. Custom
character-set owners should review snapshot semantics. For earlier API changes and before/after
examples, see Migration Notes.
Licensing
Aski is licensed under the Apache License 2.0; see LICENSE and
NOTICE. Bundled Courier Prime remains under the SIL Open Font License 1.1. The
committed ShapeData glyph descriptors are measured from the system Courier font, as recorded in
NOTICE. Corpus assets retain their own attribution and terms.
For contributors
- Render goldens and
default.metallibare recorded on macOS 27 / Xcode 27 (ASKI-77); the render
snapshot suites fail on macOS 26. Glyph selection output is unchanged by that baseline refresh. just doctorandjust release-preflightno longer require a specific Xcode; the Swift minimum
comes fromswift-tools-version.- The contributor guide distinguishes library deployment minimums from
snapshot requirements and explains the local gates. This repository has no hosted CI workflow.
Verification
The release-preparation checks recorded in PR #3 were run at f18869e on
macOS 27.0 / Xcode 27.0 / Swift 6.4, before the public-documentation audit. They do not
verify later commits. Before tagging the final release commit, rerun:
just check
just release-preflight
./Scripts/validate-docc.sh --emit-markdownRecord the final commit and results in the release PR. Regenerate the DocC assets from that
checkout so they include the new command-line guide and updated articles; do not reuse the
pre-audit sidecars. The documentation audit does not substitute for these macOS gates.
Assets
The release's intended documentation assets are:
Aski-markdown-manifest.json: DocC Markdown manifest indexing public API symbols with anchors and cross-references.aski-docc-markdown.tar.gz: tarball of the per-symbol Markdown sidecars.
--emit-markdown writes its output under /tmp/aski-docc-markdown; packaging and uploading
release assets are separate steps. Check the published release for the files actually attached.