moeru-ai/airi · error · Error
inspection.errors.join(' ')
Error message
inspection.errors.join(' ') What it means
`loadTachieZip` runs `inspectTachieArchive` which fully decodes images and collects per-entry errors. If inspection yields no `assets` (errors accumulated), `loadTachieZip` throws `new Error(inspection.errors.join(' '))`, concatenating every accumulated problem (e.g. failed image decodes, a missing neutral image). A failed archive never returns a partial model.
Source
Thrown at packages/stage-ui-tachie/src/utils/tachie-archive.ts:455
errors,
ignoredEntries: layout.ignoredEntries,
warnings,
}
}
/**
* Loads and fully decodes every recognized emotion image in a Tachie ZIP.
*
* The returned image sources remain owned by the caller until `dispose()` is
* called. A failed archive never returns a partially usable model.
*/
export async function loadTachieZip(
input: Blob | ArrayBuffer,
options: TachieArchiveLoadOptions = {},
): Promise<TachieLoadedAssets> {
const inspection = await inspectTachieArchive(input, options)
if (!inspection.assets)
throw new Error(inspection.errors.join(' '))
return inspection.assets
}
/**
* Validates a local `.tachie.zip` without retaining decoded image resources.
*/
export async function validateTachieZip(file: File): Promise<TachieValidationReport> {
const inspection = await inspectTachieArchive(file, {
fileName: file.name,
requireTachieSuffix: true,
})
const assets = inspection.assets
const report: TachieValidationReport = {
status: inspection.errors.length > 0
? 'INVALID'
: inspection.warnings.length > 0
? 'WARNING'
: 'VALID',View on GitHub (pinned to 27111382b4)
Solutions
- Call `validateTachieZip(file)` (or `inspectTachieArchive`) first and read `inspection.errors` / the validation report for the specific failing entry.
- Replace or re-export the named failing image(s) the errors mention.
- Ensure the neutral emotion image is present and decodes cleanly.
- Re-create the `.tachie.zip` from source assets and retry.
Example fix
// before
const assets = await loadTachieZip(blob) // throws joined errors
// after
const report = await validateTachieZip(file)
if (!report.assets) {
console.error('Tachie archive rejected:', report.errors)
return
}
const assets = await loadTachieZip(blob) Defensive patterns
Strategy: try-catch
Validate before calling
const report = await validateTachieZip(file)
if (!report.assets) {
throw new Error(`Tachie archive rejected: ${report.errors.join('; ')}`)
}
await loadTachieZip(blob) Type guard
function isTachieValidationOk(report: TachieValidationReport): boolean {
return !!report.assets && report.errors.length === 0
} Try / catch
try {
await loadTachieZip(blob)
} catch (e) {
if (e instanceof Error && /decode|neutral image|could not/i.test(e.message)) {
// surface the per-entry failures from validateTachieZip
} else throw e
} Prevention
- Run validateTachieZip before loadTachieZip to get per-entry errors.
- Re-export failing emotion images from source.
- Ensure the neutral emotion image is present and decodes.
When it happens
Trigger: A Tachie ZIP where one or more recognized emotion images failed to decode (corrupt PNG/unsupported format), or where the neutral (`DEFAULT_TACHIE_EMOTION`) image could not be decoded. `inspectTachieArchive` disposes decoded images and returns only an errors array, so the joined string is the only diagnostic.
Common situations: Corrupt image bytes inside the archive; an emotion image in an unsupported format; missing or unreadable neutral emotion image; partial/aborted archive creation; an image that exceeds decode limits.
Related errors
- Empty settings file: ${url}
- Expected exactly one moc file, got ${mocFiles.length} ${file
- Textures not found
- Cannot find file: ${path}
- MMD ZIP must contain a .pmx or .pmd model file
AI-assisted analysis of moeru-ai/airi@27111382b4 (2026-08-12).
Data as JSON: /api/errors/1624aac4ad0a5bf3.
Report an issue: GitHub.