Display Name
News Image Generator
Display Description
Produce the per-article and per-column image carried by every piece Main Street Independent publishes. Parallel to the news-article-generator, not downstream of it. Receives the image-generation request emitted alongside the article object, resolves the appropriate visual register for the content type and section, searches public-domain and CC-licensed image commons before falling back to AI generation, applies visual quality and suitability gates, assembles the complete attribution and disclosure chain, and emits an imageSchema-validated object that updates the article record. Falls through to a labeled section-appropriate placeholder when neither commons nor AI produces a vetted image; queues a retry for later.
Version 1.0. F-Design output for Workstream 11 (Visual Journalism) of the Main Street Independent project. Parallel to the News Article Generator Framework (Appendix F of the treatise). Not to be confused with it.
Architectural Note
This framework is a lateral companion to the three-layer text pipeline:
- Layer 1 —
news-cluster-selectorselects event clusters for publication. - Layer 2 —
news-article-generatorproduces the article from the cluster and emits the image-generation request alongside the article object. - Layer 2.v —
news-image-generator(this framework) receives that request and produces the image artifact. The “2.v” designation signals that image generation runs in parallel with article output processing, not after it. - Layer 3 —
rag-ingestionindexes the article’s atomic claims. It does not index image artifacts directly, but it records theimageSchemaobject as part of the article’s metadata.
Two facts about this framework’s position in the architecture govern its design:
First, it is per-invocation, not continuous-running. It fires once per article or column, receives a bounded request, produces one image artifact, and exits. It does not maintain state between invocations.
Second, it is parallel, not serial, with the article. The article publishes when the article is ready. The image updates the article when the image is ready. If the image is not ready at article publication time, the placeholder image ships with the article and the real image replaces it on retry. The article’s correctness does not depend on the image’s presence.
The text-pipeline frameworks — cluster selector, article generator, source-correction monitor — do not call this framework. The article generator emits the image-generation request as a data object alongside the article; this framework picks that request up from the queue and processes it asynchronously.
The framework runs under CC0. Its prompts, configuration, and outputs are public-domain.
Setup Questions
Request object
Required. The image-generation request emitted by the article generator alongside the article. Must conform to the Input Contract below.
Mode
Optional. One of:
generate(default) — produce a new image for a newly-published article.retry— re-attempt a prior generation where the result was a placeholder. Carries the prior attempt’s failure reason, so the retry can avoid the same failure mode.refresh— replace an existing non-placeholder image at the publisher’s explicit request (e.g., because the image style specification has been updated and the article needs to conform to the new standard).
Source-path override
Optional. One of:
commons_only— attempt only the commons search path; emit placeholder if no match. Used when the publisher has a specific reason to prefer a real photograph.ai_only— skip the commons search and proceed directly to AI generation. Used for analytical columns where AI illustration is the declared visual register.placeholder_only— emit the section-appropriate placeholder immediately without attempting either path. Used during initial site population before the commons and AI connectors are configured.
If omitted, the source-path strategy is determined by the image style specification for the applicable visual register.
Style specification version pin
Optional. Specific version of Reference — MSI Image Style Specification.md to apply. Default is “current.” Pinned versions are recorded in the output metadata.
Purpose
To produce, for each published article and column, a single image artifact that:
- Matches the visual register declared in the image style specification for the article’s content type and section.
- Carries a complete and accurate attribution chain — photographer credit and license for commons-sourced images; model identifier and prompt summary for AI-generated images — as the visual-domain equivalent of the text pipeline’s sourcing discipline.
- Passes the visual suitability and bad-faith gates: no real-individual likenesses produced without explicit authorization, no PII visible in the image, no defamatory composite, no contextual misframing.
- Carries alt text that accurately describes what the image shows — not what the article is about — in compliance with WCAG 2.1 accessibility discipline.
- Emits an
imageSchema-validated object that can be attached to the article record and rendered by the Astro static-site builder without reformatting.
The framework’s success criterion is not “the image looks good.” It is: the image’s provenance is fully attributed; the image passes all visual suitability gates; the alt text accurately describes the image; the visual register matches the section’s declared style; and the schema-validated output is parseable by the Astro build without modification.
Input Contract
Primary input — image-generation request
The framework receives a structured request object emitted by the article generator alongside the article object. The request contains:
article_id(string, required) — the article’scluster_idor stable identifier, used to associate the image with its article.stable_url(string, required) — the article’s stable URL; becomes the referent for the image association.content_type(enum, required) — one of:news_article | analytical_column | white_paper | book. Determines the base visual register.pen_name(enum, nullable) — one of the canonical roster identifiers inReference — MSI Tracker.mdDecision #2:msi-editorial-board | mary-magdelena | malcolm-little-king | joanna-rivera-blackwell | phukher-tarlson | diklis-chump | mark-paulson | ashley-wagner | big-jim-zebedee | thomas-reynolds | hector-rentier | null. Non-null for analytical columns and editorial cartoons. Overrides the base register with the pen-name-specific register from the style specification when non-null.section(string, required) — the site section:newsfeed | pen-names | tools | white-papers | books | corrections. Used alongsidecontent_typeandpen_namefor register resolution.headline(string, required) — the article’s headline. Used as the primary seed for search terms and generation prompts.lede(string, required) — the article’s first paragraph. Used as a secondary seed for search-term derivation and generation-prompt context.primary_themes(array of strings, required) — from the article’s metadata. Contributes to search seeds and prompt construction.floor_values_engaged(array of objects, required) — from the article’s metadata; each entry carriesvalueandintensity. Informs which aspects of the story the image should foreground while staying inside the floor.primary_entities(array of strings, required) — canonical identifiers of the named entities in the article. Used at Layer 4’s likeness check: any entity identified as a named real individual triggers the likeness gate.prior_attempt_failure(object, nullable) — present only inretrymode. Containsfailure_reason(one of the named failure modes below),prior_source_path(commons | ai | placeholder), andprior_failure_detail.
The framework does not attempt to fill gaps in the request object. A request missing any required field is rejected at Layer 1 with a non-production response.
Secondary input — framework configuration
The framework consults at runtime:
Reference — MSI Image Style Specification.md— the authoritative per-section visual style guide. This document is not yet drafted; it is a publisher decision analogous to the consensus values floor. Until it exists, the framework operates from the inline register defaults encoded in Layer 1. When the style specification is drafted, it supersedes the inline defaults.Reference — MSI Consensus Values Floor.md— the floor values, for context-setting during suitability evaluation.Reference — MSI Editorial Router.md— queried at Layer 4 when a contextual-misframing or defamatory-composite concern requires editorial judgment beyond the inline rules.commons-api-config.json— API credentials, base URLs, license-acceptance table, and source priority order for Unsplash, Pexels, Wikimedia Commons, and public-domain archives. Not yet drafted.likeness-exclusion-list.json— named real individuals for whom AI likeness generation requires explicit publisher override. Populated initially from the publication’s primary coverage subjects; extended as the publication matures. Not yet drafted.
Output Contract
Primary output — imageSchema object
A single object conforming to the imageSchema defined in src/content/config.ts. The schema:
{
url: string, // resolved URL of the image file
alt: string, // what the image shows (not what the article is about)
caption?: string, // optional brief article-context description
credit: string, // photographer name (commons) or "AI-generated" (AI)
source: ImageSourceEnum, // one of the source enum values below
license?: string, // human-readable license name
license_url?: string, // canonical license URL
disclosure?: string, // AI-disclosure text when source = ai_generated
ai_model?: string, // model identifier when source = ai_generated
ai_prompt?: string // prompt summary when source = ai_generated
}
source enum values:
ai_generated— produced by an AI image-generation model; carriesai_model,ai_prompt, anddisclosure.stock_unsplash— sourced from Unsplash; carriescredit(photographer),license(“Unsplash License”),license_url.stock_pexels— sourced from Pexels; carriescredit,license(“Pexels License”),license_url.wikimedia_commons— sourced from Wikimedia Commons; carriescredit,license(specific CC or PD designation),license_url.public_domain— sourced from a public-domain archive; carriescredit(photographer or archive),license(“Public Domain”),license_url(archive page).cc_licensed— sourced from another CC-licensed archive; carriescredit,license,license_url.placeholder— the section-appropriate SVG placeholder;creditis “Main Street Independent”,disclosurestates retry is pending.
Metadata appended to the image record
{
"image_framework_version": "1.0",
"generation_timestamp": "ISO-8601",
"visual_register": "photographic | illustrated | editorial_cartoon | diagrammatic | placeholder",
"source_path": "commons | ai | placeholder",
"commons_search_attempted": true,
"commons_search_terms": ["..."],
"ai_generation_attempted": false,
"style_spec_version": "string-or-pending",
"layer4_screen_result": "pass | flagged_regenerated | flagged_placeholder",
"retry_queued": false,
"retry_reason": "string-or-null"
}
Non-production output
When the framework rejects the request at Layer 1 or exhausts all source paths without producing a vetted image, it emits:
- The section-appropriate placeholder
imageSchemaobject. - A diagnostic object with
decision: "placeholder",reason,failed_layer, and the per-path failure details. - A retry-queue entry for later re-attempt.
The placeholder ships with the article. The article does not hold for the image.
Execution Tier
Standard tier (5–8 layers), per-invocation, with one visual-suitability gate at Layer 4 that may trigger regeneration or fallback.
Six sequential processing layers. The source-path decision tree spans Layers 2–3 and branches based on visual register and search results. Layer 4 is the visual suitability gate; it may loop back to Layer 3 for re-generation (up to two retries) before falling through to the placeholder path. Layer 6 emits the final imageSchema object and queues a retry if a placeholder was used.
Milestones Delivered
Milestone 1: Request Validated and Visual Register Determined
- Endpoint produced: A validated request object with the visual register determined (
photographic | illustrated | editorial_cartoon | diagrammatic), the source-path strategy set (commons_first | ai_preferred | commons_only | ai_only | placeholder_only), and the search/prompt seeds derived from headline + lede + primary themes. - Verification criterion: All required Input Contract fields are present; visual register is one of the four defined values; source-path strategy is consistent with the register’s style-spec default (or the setup question override); search/prompt seeds are neutral in framing (no frame-capture in the vocabulary used to describe the story visually).
- Layers covered: Layer 1.
- Required prior milestones: None.
- Gear: 3.
- Output format: Validated request object plus register/strategy record plus search/prompt seed set.
- Drift check question: Does the determined register match the content type and section? Are the search seeds derived from the content, or have they adopted a bad-faith framing of the story?
Milestone 2: Commons Candidate Selected or Path Exhausted
- Endpoint produced: Either (a) a commons image candidate with license verified, resolution adequate, and content confirmed editorially appropriate, or (b) a “no suitable match” signal that advances the framework to Layer 3 or Layer 5.
- Verification criterion: If a candidate is selected, it has a verifiable photographer credit, a license in the acceptance table, and adequate resolution; it does not depict non-public individuals in contexts that create PII or identification risks; the license has been verified against the source API’s data, not assumed.
- Layers covered: Layer 2.
- Required prior milestones: M1.
- Gear: 3.
- Output format: Commons candidate object (URL, photographer, license, license_url, provenance metadata) or “no match” signal.
- Drift check question: Has the license been verified against the API’s license data, or assumed from the source? Has the image been checked for content appropriateness beyond its surface visual match to the search terms?
Milestone 3: AI Image Generated or Generation Abandoned
- Endpoint produced: Either (a) an AI-generated image with the prompt constructed under style-spec and quality-gate constraints, or (b) a generation-failure record noting why AI generation was abandoned (model unavailable, prompt quality gate failed on construction, all retries failed suitability screen).
- Verification criterion: If an image is produced, the prompt contains no instruction to produce a likeness of a named real individual, no instruction to depict PII-revealing details, no instruction to juxtapose unrelated subjects in a defamatory configuration. The prompt summary recorded in the output accurately represents the prompt used.
- Layers covered: Layer 3.
- Required prior milestones: M1 (M2 not required if source-path is ai_preferred).
- Gear: 3.
- Output format: Generated image plus prompt metadata (model, full prompt, prompt summary), or generation-failure record.
- Drift check question: Does the prompt summary in the output accurately reflect the prompt used? Has any instruction to produce a real individual’s likeness entered the prompt through indirect framing (e.g., “the former president of the United States” as a roundabout likeness request)?
Milestone 4: Visual Suitability Screen Passed
- Endpoint produced: The candidate image (commons or AI-generated) has passed all visual quality gates: likeness check, PII check, defamatory-composite check, contextual-misframing check, and style-register match check. Alt text is generated accurately describing what the image shows.
- Verification criterion: All five checks have run and are documented; any failure has triggered re-generation (AI path) or discard (commons path) with the failure reason recorded; the alt text does not describe what the article is about — it describes what the image shows (a photographer’s name and scene description, or an illustration’s visual content, not the article’s thesis).
- Layers covered: Layer 4.
- Required prior milestones: M2 or M3.
- Gear: 4.
- Output format: Vetted image plus per-check results log plus alt text.
- Drift check question: Does the alt text describe what the image shows or what the article claims? Has the contextual-misframing check verified the image’s provenance context — not just its visual content — against the article’s context?
Milestone 5: Attribution, Disclosure, and Caption Assembled
- Endpoint produced: The complete attribution and disclosure chain assembled: photographer credit + license + license_url for commons; model identifier + prompt summary + disclosure text for AI. Caption generated (brief article-context description, distinct from alt text). All fields validated for completeness.
- Verification criterion: Commons images carry a verifiable photographer name (not “unknown” unless the archive genuinely lacks attribution); AI-generated images carry the exact model identifier and a prompt summary that accurately represents what the model was asked to produce; disclosure text conforms to the publication’s AI-disclosure standard; caption is present and distinct from alt text.
- Layers covered: Layer 5.
- Required prior milestones: M4.
- Gear: 3.
- Output format: Complete attribution object plus disclosure text plus caption.
- Drift check question: Is the photographer credit verifiable against the source API record, or assumed? Is the AI prompt summary an accurate digest, or has it been cleaned up to obscure what the model was actually instructed to produce?
Milestone 6: Schema-Validated Output Emitted
- Endpoint produced: Schema-validated
imageSchemaobject emitted and associated with the article record. Or, if neither path produced a vetted image: the section-appropriate placeholder emitted, diagnostic record logged, retry queued. - Verification criterion: Output validates against the
imageSchemainsrc/content/config.ts; all required fields present;sourceenum value is consistent with the actual source;ai_modelandai_promptare present iffsource = ai_generated;creditis present regardless of source; article record updated with the image association; retry queue entry created iff a placeholder was used. - Layers covered: Layer 6.
- Required prior milestones: M5.
- Gear: 3.
- Output format: Final
imageSchemaobject plus update event for the article record, plus retry queue entry (conditional). - Drift check question: Does the emitted object validate against schema? If a placeholder was used, has the retry queue entry been created with enough context for the retry to avoid the same failure?
Governing Principles
These principles govern decisions inside the framework. When a layer-level rule is silent, resolve by the principle in priority order.
1. Attribution is non-negotiable and non-approximable
Every image carries a complete and accurate credit chain. For commons images: the photographer’s name (not the agency, not “Getty” as the credit when the photographer is on record) and the specific license under which the image is used. For AI-generated images: the model identifier and a prompt summary that accurately represents what the model was asked to produce. Credit stripped, assumed, or substituted defeats the publication’s sourcing discipline as completely as a text article without citations.
2. Alt text describes the image; caption describes the article context
These are two distinct functions that must not be conflated. Alt text is an accessibility requirement: a visually impaired reader using a screen reader hears the alt text; it must accurately describe the image’s visual content — a crowd, a building, an illustrated figure, a diagram. The caption is an editorial function: it situates the image within the article’s context. Alt text for an image of the Capitol building reads “The United States Capitol building viewed from the east front plaza.” It does not read “Congress passed the bill despite opposition.” That is caption territory, and captions must be accurate to what the article actually reports, not interpretive summaries.
3. Visual bad-faith has the same standing as textual bad-faith
The bad-faith techniques in the text domain have visual analogues that this framework guards against with equal discipline:
- Manipulated imagery is the visual equivalent of fabricated quotation. An image that has been materially altered from its source — faces swapped, crowds added or removed, context cropped away to reverse meaning — is not an accurate depiction.
- Composite-by-juxtaposition is the visual equivalent of defamatory-adjacent textual assertion. Placing an image of an unrelated person alongside a headline creates an implied association the image’s context does not support. This is defamation by image framing even when neither element is individually false.
- Contextual misframing is the visual equivalent of a sourcing error. A photograph from a 2019 protest accompanying a 2026 article about a different event misrepresents the photographic record with the same seriousness as a textual misattribution.
The Layer 4 visual suitability screen is the enforcement mechanism for all three. It applies the same documentation-threshold standard as the bad-faith catalog: report the technique when the triggering pattern is documented, when the pattern matches the definition, and when falsification conditions are not met.
4. Likeness of real individuals requires affirmative authorization
AI generation of a real individual’s likeness requires two conditions both to be met: the individual must be a public figure, AND the context must be their public role. The absence of either condition requires publisher override. This is not a preference. The failure mode — AI-generated likenesses of real people in contexts they did not consent to — is one of the most significant integrity risks in AI-assisted visual journalism.
The population of named real individuals whose likenesses require explicit authorization is encoded in likeness-exclusion-list.json. It is populated initially from the publication’s primary coverage subjects and extended continuously. When the framework encounters a request involving a named entity identified as a real person, the likeness check runs regardless of whether the entity appears explicitly in the generation prompt — indirect likeness instructions (see Milestone 3’s drift check question) are the primary failure mode.
5. The image style specification governs visual register; the framework enforces but does not author it
Which visual register applies to which content type is a publisher decision encoded in Reference — MSI Image Style Specification.md. That document is the visual analog of the consensus values floor — it articulates what Main Street Independent’s visual identity is, section by section, pen-name by pen-name. The framework consumes the style specification and enforces it; the framework does not determine what the style specification says.
The style specification (Reference — MSI Image Style Specification.md v1.0, drafted 2026-05-06) is authoritative over the framework’s inline register defaults. Per the spec: hard news → photographic; pen-name analytical (including Phukher Tarlson) → illustrated; Hector Rentier (cartoonist) → editorial-cartoon register exclusively; white papers → diagrammatic where the topic supports a labeled visual, illustrated when the topic is abstract.
6. The commons path is preferred for hard news; the AI path is preferred for analytical registers
For hard news (content_type = news_article, section = newsfeed), a real photograph from verifiable public sources is the preferred outcome. A real photograph of a legislative chamber, a courthouse, or a geographic location carries evidentiary weight an illustration cannot. The commons path runs first; AI generation is the fallback.
For analytical columns (content_type = analytical_column, pen_name non-null), AI illustration is the preferred register because the content is explicitly declared-perspective analysis. An illustration expresses the analytical character of the work. The AI path may run first, with commons as a fallback for pen names whose style specification permits it.
For Hector Rentier specifically, the editorial-cartoon register is the exclusive visual register; he is the only voice using it. Commons photography is not appropriate for editorial-cartoon work. The AI path generates in the cartoon register per the style specification §5. Phukher Tarlson — though he writes about propaganda — is in the illustrated register; his cartoons (when generated) support his prose and do not compete with it.
7. The placeholder is a valid outcome, not a failure state
The framework is designed to produce real images at scale, but the placeholder mechanism is architecturally intentional. The article publishes when the article is ready; the image follows when the image is ready. A placeholder with an honest disclosure label and a retry queue entry is preferable to a misattributed image, a defamatory composite, or a real-individual likeness that failed the authorization check. The placeholder is the framework’s equivalent of the article generator’s non-publication response — an honest acknowledgment that the right artifact isn’t ready, not a concealment of failure.
8. Symmetric visual standards across pen names and across political alignments
The same quality gates, the same attribution discipline, the same defamatory-composite checks, and the same likeness-authorization requirements apply to every pen name and every article regardless of the political alignment of the story or the subject. An illustration for a Malcolm Little King column and an illustration for a Phukher Tarlson column both pass through the same Layer 4 screen. The style registers differ; the quality standards do not.
Processing Layers
Layer 1 — Request Validation and Style Routing
Entry condition: An image-generation request received from the article-generator’s output queue.
Operations:
- Schema validation. Every required Input Contract field is present and well-formed. Missing or malformed fields → non-production response with diagnostic and placeholder queue entry.
- Visual register determination. Apply the register decision tree (per
Reference — MSI Image Style Specification.md§4):content_type = news_article, section = newsfeed→photographic.content_type = analytical_column, pen_name = hector-rentier→editorial_cartoon. Hector owns this register exclusively per the style spec §4.3.content_type = analytical_column, pen_name ∈ {msi-editorial-board, mary-magdelena, malcolm-little-king, joanna-rivera-blackwell, phukher-tarlson, diklis-chump, mark-paulson, ashley-wagner, big-jim-zebedee, thomas-reynolds}→illustrated. All analytical voices including Phukher Tarlson are in the illustrated register; Phukher’s cartoons (when generated) support his prose and live in this register, not editorial-cartoon.content_type = white_paper→diagrammatic(when the topic supports a labeled visual) orillustrated(when the topic is abstract or conceptual). Diagrammatic is the preferred default per spec §4.4.content_type = book→illustrated(cover/thumbnail context).- If
source_path_overrideis set in the setup question, record it and let it govern Layer 2/3 routing.
- Style-spec load. Load
Reference — MSI Image Style Specification.mdv1.0 (drafted 2026-05-06). The spec supersedes the inline register defaults above where they conflict. Recordstyle_spec_versionfrom the loaded spec’s frontmatter. - Source-path strategy assignment. Based on visual register (or setup question override):
photographic→commons_first(commons path runs; AI fallback if no match).editorial_cartoon→ai_preferred(AI path runs; no commons fallback).illustrated→ai_preferredunless the style spec specifies otherwise.diagrammatic→ai_preferred.
- Search seed derivation. For commons-path strategies: derive 3–5 neutral search terms from headline + lede + primary_themes. Neutral means: no frame-captured vocabulary (no contested terms from
contested-terms.jsonin the search string); no named individual as a target subject (a search for “Senator X” as the search subject seeks a likeness; a search for “US Senate chamber” does not); concrete and visual (terms that describe visible subject matter, not abstract concepts). - Prompt seed derivation. For AI-path strategies: derive the prompt seed from headline + lede + primary_themes + visual register + applicable pen-name register constraints. Prompt seeds are processed at Layer 3 into the full generation prompt; here they are the informational core. Apply the likeness pre-screen: if any
primary_entitiesentry resolves to a named real individual, flag for the Layer 3 likeness gate and record the entity name.
Invariant check at Layer 1 → 2/3 boundary: visual register is one of the four defined values; source-path strategy is set; search/prompt seeds are neutral; any named-individual entity is flagged for Layer 3.
Failure-mode triggers: Missing required field → non-production. Unresolvable register (content type not in the decision tree) → escalate to publisher.
Carry-forward to Layer 2 (commons-path) or Layer 3 (ai-path): validated request, register, strategy, seeds, flagged entity list.
Layer 2 — Commons Search and Candidate Selection
Entry condition: Source-path strategy is commons_first or commons_only; validated request and search seeds from Layer 1.
Operations:
- API priority sequence. Execute searches in priority order:
- Unsplash (default
free_to_usefilter; sort by relevance). - Pexels (default
free_to_usefilter; sort by relevance). - Wikimedia Commons (Creative Commons and public domain filter; sort by relevance).
- Public-domain archives (Library of Congress, Smithsonian Open Access, NYPL Digital Collections, others in
commons-api-config.jsonas configured). Stop at the first source that returns a qualifying candidate. Do not silently aggregate candidates from multiple sources and pick without recording which sources were tried.
- Unsplash (default
- Candidate evaluation. For each candidate returned:
- License verification. Confirm the license is in the acceptance table in
commons-api-config.json. Licenses that do not permit editorial use, that require notification to the photographer, or that have non-commercial-only restrictions → disqualify. - Resolution check. Minimum resolution for web publication (configurable in
commons-api-config.json; default 1200px on the long edge) → below minimum disqualifies. - Content appropriateness. Does the image depict: (a) a named real individual in a non-public or private context → disqualify; (b) recognizable non-public individuals in contexts that would create PII or identification risks → disqualify; (c) scenes of graphic violence or explicit content inconsistent with editorial standards → disqualify.
- Contextual provenance. Does the image’s caption or description metadata match the article’s context? A photograph labeled “anti-war protest, 2003” is not appropriate for an article about a 2026 legislative vote, even if the visual subject matter is superficially similar. Provenance mismatch → disqualify for that specific article, even if the image is high quality.
- License verification. Confirm the license is in the acceptance table in
- Best-candidate selection. If multiple candidates survive evaluation, select on: visual suitability for the story (most closely evokes the actual event or topic without misframing), photographer credit quality (named photographer preferable to uncredited), license permissiveness.
- Photographer credit extraction. Extract the photographer’s name from the API response metadata. If the API returns only an organization or agency name and the image metadata contains no individual photographer credit, record as-received with a note that individual credit was unavailable from the source.
- No-match resolution. If no qualifying candidate is found across all sources:
- If strategy is
commons_only→ advance to Layer 5 (placeholder). - If strategy is
commons_first→ advance to Layer 3 (AI generation). Record which sources were searched and why each failed (no results, license failure, resolution failure, content failure, provenance mismatch).
- If strategy is
Invariant check at Layer 2 → 3/4 boundary: if a candidate is selected, it has a verified license in the acceptance table, adequate resolution, no content or provenance disqualification; photographer credit is present or noted as unavailable from source.
Failure-mode triggers: API unavailable → log, record search-attempted: true, advance to next source or to “no match” with API-unavailable note.
Carry-forward to Layer 4 (if candidate selected) or Layer 3 (if no match, commons_first strategy) or Layer 5 (if no match, commons_only strategy): candidate image object, search results log.
Layer 3 — AI Image Generation
Entry condition: Source-path strategy is ai_preferred or ai_only, OR Layer 2 returned “no match” under commons_first strategy.
Operations:
- Pre-generation quality gate: likeness screen. Review the flagged entity list from Layer 1. For any named real individual in the list:
- Check whether the entity is a public figure (per
is_public_figurein the article generator’s pre-extracted entities). - Check whether the article context is the individual’s public role (e.g., their official duties, their public statements, their public position — not their family life, physical appearance, or private context).
- If both conditions are met → individual may be referenced in the prompt by role (e.g., “a senator at a podium”), not by name (which can be an indirect likeness instruction in some models).
- If either condition is not met → the prompt must not reference the individual in any way that would direct the model toward their appearance. Remove the entity from the prompt seed. Record the removal.
- If the generation request cannot be executed without violating the likeness gate → emit the placeholder and queue a retry flagged for publisher review.
- Check whether the entity is a public figure (per
- Pre-generation quality gate: PII and defamatory-composite screen. Review the prompt seeds. Remove any instruction that would direct the model to produce: visible text containing personal addresses, phone numbers, or identification numbers; a visual juxtaposition of unrelated real individuals that would imply an association they did not choose; a scene that contextually misframes a public figure (e.g., depicting a politician in a criminal context without an actual criminal charge).
- Prompt construction. Construct the full generation prompt from:
- The cleaned prompt seeds (headline essence + primary themes + visual subject).
- The visual register instructions from the style specification:
photographic | illustrated | editorial_cartoon | diagrammatic. Each register has its style vocabulary (e.g., editorial cartoon: bold outlines, exaggerated features, political-cartoon aesthetic; illustrated: editorial illustration, painterly or graphic, not photorealistic; diagrammatic: clean lines, labeled components, informational graphic). - The pen-name register constraints when applicable (Hector Rentier’s editorial-cartoon register has its full Nast-tradition style vocabulary in the style spec §5; Phukher Tarlson’s illustrated register has lighter conventions matching the other analytical pen names).
- The quality constraints: no text visible in the image unless it is essential to the informational content (diagrams may label; news illustrations generally should not carry text that the alt-text layer already handles); no photorealistic simulation of identifiable real individuals.
- Generation. Submit to the configured AI image-generation service. Record the exact model identifier and the full prompt in the metadata.
- Generation-failure handling. If the model returns an error, a content-policy rejection, or an unusable image (blank, corrupted):
- Retry up to two times with a simplified prompt variant. Record each attempt.
- After two failures: if strategy is
ai_only→ advance to placeholder. If strategy isai_preferredand commons was not yet tried → advance to Layer 2 with search seeds. Record generation failure.
Invariant check at Layer 3 → 4 boundary: the generated image exists and is not corrupted; the prompt contains no instruction to produce a named individual’s likeness without authorization; the prompt summary recorded in metadata accurately represents the prompt used.
Failure-mode triggers: Likeness gate triggered → placeholder (if no alternative path). Generation failure after two retries → placeholder.
Carry-forward to Layer 4: generated image, exact model identifier, full prompt, prompt summary, pre-generation gate results log.
Layer 4 — Visual Suitability Screen
Entry condition: A candidate image from Layer 2 (commons) or Layer 3 (AI-generated), ready for quality evaluation.
Operations:
- Likeness check. Examine the image for the presence of a face or figure that could be identified as a named real individual. This check applies to both commons and AI-generated images:
- For commons images: verify that any identifiable person in the image is depicted in their public role and the image’s provenance supports public use of their likeness.
- For AI-generated images: evaluate whether the generated face or figure — even if no name was in the prompt — resembles a named individual in the article’s
primary_entitieslist or in thelikeness-exclusion-list.json. A match → regenerate (one additional attempt) with explicit no-real-likeness constraint, or fall to placeholder.
- PII screen. Examine the image for visible personally identifiable information: readable addresses, phone numbers, identification numbers, non-public individual’s full name on a visible document or sign. Present → regenerate (AI) or discard (commons); record.
- Defamatory-composite screen. Evaluate whether the image, combined with the article’s headline (the framing context most readers will see alongside the image), creates an implied association between unrelated subjects that would constitute defamation by juxtaposition. This applies particularly to:
- Commons images of individuals who are not the article’s subjects but whose presence in the image could be read as implicating them in the article’s subject.
- AI-generated images that place visual elements in proximity that, in the headline context, create a false implied relationship. Where this screen cannot be resolved by the inline rules alone → query the editorial-supervisor MindSpec for guidance. Record the supervisor’s response.
- Contextual-misframing screen. For commons images: verify that the image’s provenance context — when was it taken, where, of what event — matches the article’s context closely enough that using it would not mislead a careful reader. The standard is the same as the text pipeline’s source-corroboration standard: would a careful reader, seeing this image alongside this headline, reasonably infer that the image depicts what the article describes? If not → discard.
- Style-register match check. Does the image match the visual register determined at Layer 1? A photograph presented for a Hector Rentier editorial-cartoon slot, or an editorial cartoon presented for a hard-news photographic slot, or a heavy Nast-density cross-hatch image presented for a Mary Magdalena illustrated slot → register mismatch → discard and re-generate or substitute with appropriate-register placeholder.
- Alt text generation. Generate alt text describing what the image shows. Rules:
- Describe the visual content: subjects, setting, composition, relevant details.
- Do not describe what the article claims about those subjects.
- Do not repeat the headline or lede as alt text.
- For editorial illustrations and cartoons: describe the visual metaphor or scene, not the political interpretation.
- For diagrams: describe the diagram’s structure and labeled components.
- Maximum length: 125 characters (WCAG 2.1 guidance for meaningful alt text without overwhelming screen-reader users).
Invariant check at Layer 4 → 5 boundary: all five screens have run and are documented; any failure has been resolved by regeneration, discard, or placeholder; alt text is present, describes the image (not the article), and is ≤125 characters.
Failure-mode triggers: Any check fails → attempt one re-generation (AI path) or discard and return to Layer 2 for a new search (commons path). If re-generation also fails → fall to placeholder.
Carry-forward to Layer 5: vetted image, per-check results log, alt text.
Layer 5 — Attribution, Disclosure, and Caption Assembly
Entry condition: Vetted image from Layer 4 (or placeholder signal if all paths failed).
Operations:
-
Attribution assembly — commons path.
credit: photographer’s full name. If the API returned only organization and photographer is genuinely unavailable: “[Organization] / [License Name]” with a note.license: the human-readable license name as it appears in the Creative Commons or source archive. Not abbreviated (CC BY 2.0, not “Creative Commons”).license_url: the canonical license URL (e.g.,https://creativecommons.org/licenses/by/2.0/).disclosure: not applicable for commons images; field omitted.
-
Attribution assembly — AI generation path. Disclosure handling is tier-asymmetric per
Reference — MSI Image Style Specification.md§9. The publication discloses AI generation only for Tier 1 (consensus newsfeed); Tier 2 (Editorial Board) and Tier 3 (analytical pen names + Hector Rentier cartoons) preserve metadata internally but do not surface AI-generation to readers.Always populated for every AI-generated image regardless of tier:
ai_model: the exact model identifier string returned by the generation service (e.g., the API’s model name and version). Never generalized to “AI image model” or similar.ai_prompt: a prompt summary of ≤200 characters accurately representing the generation prompt. The summary is a digest — it records the essential subject, register, and constraints — not a truncation. It must not clean up or sanitize the prompt to obscure what the model was asked to produce.license: “CC0 (AI-generated by Main Street Independent)”.license_url:https://creativecommons.org/publicdomain/zero/1.0/.
Tier 1 —
section = newsfeed:credit: “AI-generated”.disclosure: “Image generated by [ai_model] from a prompt describing [ai_prompt]. Main Street Independent does not depict named real individuals outside their public role without documented authorization.”
Tier 2 —
pen_name = msi-editorial-board:credit: “MSI Editorial Board”.disclosure:null. The persona is the editorial signal; AI generation is not surfaced per the publication’s tier-asymmetric disclosure policy. Internalai_modelandai_promptmetadata is preserved for audit.
Tier 3 — any other non-null
pen_name(analytical pen names + Hector Rentier):credit: the article’s pen-name byline (e.g., “Hector Rentier”, “Mary Magdalena”, “Phukher Tarlson”). The persona is the responsible byline; AI generation is not surfaced.disclosure:null. Internalai_modelandai_promptmetadata is preserved for audit.
Tier-determination rule: if
section = newsfeedandpen_name = null→ Tier 1; else ifpen_name = msi-editorial-board→ Tier 2; else ifpen_nameis any other roster identifier → Tier 3. White papers and books with non-nullpen_namefollow Tier 3; with nullpen_namefollow Tier 2 (institutional voice). -
Attribution assembly — placeholder.
credit: “Main Street Independent”.source:placeholder.disclosure: “Image pending. Main Street Independent’s image-generation pipeline has queued a retry. This placeholder will be replaced when a suitable image is produced.”license: “CC0”.license_url:https://creativecommons.org/publicdomain/zero/1.0/.
-
Caption generation. Generate a brief caption (≤100 characters) situating the image in the article’s context. The caption is distinct from the alt text: it may reference the article’s subject matter and may contain journalistic context. It must not state as fact something the article only attributes or alleges. Example: “The Senate chamber, where a 51–49 vote passed the measure Tuesday.” Not: “The Senate, where lawmakers betrayed their constituents.” The caption stays inside the floor.
-
Completeness validation. All required fields for the detected
sourceenum value are present:url,alt,credit,sourcealways required;licenseandlicense_urlrequired for all except conditions where they are demonstrably unavailable and documented;ai_modelandai_promptrequired iffsource = ai_generated.
Invariant check at Layer 5 → 6 boundary: all required fields are present; credit is accurate and non-approximated; AI disclosure is present and accurate iff source = ai_generated; caption is present and stays inside the floor.
Failure-mode triggers: Attribution incompletable (no photographer credit and no acceptable stand-in) → escalate to publisher before emitting. AI prompt summary inaccurate → regenerate the summary.
Carry-forward to Layer 6: complete attribution and disclosure object, caption, alt text.
Layer 6 — Schema Validation and Output Emission
Entry condition: Complete imageSchema fields from Layer 5, or placeholder signal from earlier layers.
Operations:
- Schema validation. Validate the assembled object against the
imageSchemadefined insrc/content/config.ts. Any validation failure → identify the failing field, attempt correction, escalate to publisher if uncorrectable. - Source-enum consistency check. Confirm the
sourceenum value is consistent with the actual source path:ai_generatediff Layer 3 produced the image;stock_unsplash / stock_pexels / wikimedia_commons / public_domain / cc_licensediff Layer 2 produced the image;placeholderiff neither path produced a vetted image. Inconsistency → correct or escalate. - Article record update. Emit the imageSchema object as an update to the article record identified by
article_idandstable_url. The update replaces the placeholder that shipped with the article (or, inrefreshmode, replaces the prior non-placeholder image). - Metadata record. Write the image metadata record (generation timestamp, framework version, source path, Layer 4 screen results, style spec version, retry status) to the image log for audit.
- Retry queue management. If a placeholder was emitted:
- Create a retry-queue entry carrying:
article_id,stable_url, content_type, pen_name, section, the failure summary (which paths were tried, what failed at which layer), and anot_beforetimestamp (default: 24 hours, configurable). Thenot_beforeprevents immediate retry on transient failures. - If this invocation is itself a retry and again produced a placeholder, escalate to publisher with the failure summary rather than continuing to auto-retry.
- Create a retry-queue entry carrying:
- Build-on-server trigger. Send the image update event to the Astro build pipeline if the article has already been published (i.e., the article is live with a placeholder and the image is replacing it). If the article has not yet published, no build trigger is needed — the image will be included in the article’s first build.
Invariant check at Layer 6 termination: emitted object validates against imageSchema; source enum is consistent with actual path; article record has been updated; metadata log written; retry queue entry created iff placeholder was emitted; build trigger sent iff article was previously published with a placeholder.
Failure-mode triggers: Schema validation fails → attempt correction; if uncorrectable, emit placeholder and escalate. Build trigger rejected → log and escalate; do not silently re-attempt.
Output: schema-validated imageSchema object, image metadata log entry, retry queue entry (conditional), build-trigger event (conditional).
Quality Criteria
MUST (gates publication)
- M1.
creditfield present and non-empty for every image regardless of source. - M2.
sourceenum value is consistent with the actual source path. - M3.
ai_modelandai_promptpresent iffsource = ai_generated. - M4.
disclosurepresent for AI-generated images. - M5.
alttext present, describes what the image shows (not what the article claims), ≤125 characters. - M6. No AI-generated likeness of a named real individual without documented authorization: public figure AND public role AND publisher override on file.
- M7. No PII visible in the image (addresses, phone numbers, identification numbers, non-public individuals’ identification details).
- M8. No defamatory composite — no juxtaposition of unrelated subjects that creates a misleading impression when viewed alongside the article headline.
- M9. Commons images carry a verifiable license from the acceptance table; the license does not prohibit editorial use.
- M10. Contextual-misframing check has run for all commons images; provenance-mismatched images are not used.
- M11. Visual register matches the style-spec default (or publisher-authorized override) for the content type and section.
- M12. Output validates against
imageSchemainsrc/content/config.ts. - M13. Retry queue entry created iff a placeholder was emitted.
- M14. Image metadata log written for every invocation (including placeholder outcomes).
- M15. Caption stays inside the consensus values floor (no assertions the floor does not authorize, no unattributed evaluative framing).
SHOULD (defines quality)
- S1. Commons images: photographer’s full individual name in
credit, not agency or organization name alone. - S2. AI-generated images: prompt summary accurately represents the generation prompt; not sanitized.
- S3. Caption distinct from alt text (different text, serving different functions).
- S4. Commons license_url is a canonical license URL, not a page on the source site.
- S5. Commons image provenance verified beyond content-match (the image’s metadata supports the article’s context).
- S6. Editorial-supervisor MindSpec queried when defamatory-composite check is uncertain; response recorded.
- S7. AI generation prompt excludes text-in-image unless the register (diagrammatic) specifically requires labeled text.
- S8. Retry queue
not_beforetimestamp set appropriately for the failure type: transient API failures → 24 hours; content-policy failures → 72 hours pending publisher review; structural failures → escalate immediately.
MAY (defines preference)
- P1. Commons images from Wikimedia Commons preferred for historical or archival subjects where the photographer’s identity adds provenance weight.
- P2. AI-generated illustrations for analytical columns may be signed with the pen name’s visual style mark (if the style specification defines one).
- P3. Diagram images may carry labeled source data (e.g., “Data: Federal Reserve H.6 release”) as text within the image where the diagrammatic register requires it.
Named Failure Modes
Visual attribution failures (Layer 2 / Layer 5)
- License-Laundering. Mechanism: a commons image carrying a restrictive or no-reuse license is admitted based on the source site’s branding rather than actual license verification. Detection: license field in API response differs from assumed license. Prevention: Layer 2 license verification against the acceptance table; never assume license from source identity.
- Attribution Drift. Mechanism: the photographer credit is lost or replaced with a generic agency name during processing. Detection:
creditfield contains “Unknown” or an organization name where individual photographer was available in the API response. Prevention: Layer 5 attribution assembly extracts from API metadata; completeness validation at Layer 5. - Prompt-Summary Sanitization. Mechanism: the AI prompt summary recorded in
ai_promptis cleaned up to obscure what the model was actually instructed to produce — especially relevant when early-draft prompts contained sensitive direction that was later corrected. Detection: summary diverges materially from the actual prompt. Prevention: Layer 5 requires that the summary accurately represents the prompt; the full prompt is also stored in the image metadata log.
Visual suitability failures (Layer 3 / Layer 4)
- Indirect Likeness Instruction. Mechanism: a real individual’s name is removed from the generation prompt but their likeness is indirectly directed through circumlocutions (“the current occupant of 1600 Pennsylvania Avenue,” “the billionaire who owns the social media platform”). Detection: generated image resembles a named entity in
primary_entities. Prevention: Layer 3 removes not just the name but any circumlocution that directs the model toward a specific individual’s appearance; Layer 4 likeness check screens the output. - Contextual Misframing. Mechanism: a high-quality photograph is selected from commons because its visual content is relevant, but its provenance — when and where it was taken, of what event — is materially different from the article’s context. Detection: Layer 4 contextual-misframing check fails when provenance metadata is reviewed. Prevention: Layer 2 provenance check as a disqualifier; Layer 4 screen as confirmation gate.
- Defamatory Composite. Mechanism: an AI-generated image or a commons image places an identifiable person in proximity to headline content that implies they are connected to events they are not connected to. Detection: Layer 4 defamatory-composite screen; editorial-supervisor query when the check is uncertain. Prevention: Layer 3 pre-generation gate removes juxtaposition instructions; Layer 4 screen applies the visual-bad-faith standard from Governing Principle 3.
- Style-Register Mismatch. Mechanism: the wrong visual register is applied — most critically, a photorealistic image used for a Hector Rentier editorial-cartoon, or a heavy Nast-density cartoon used for a hard-news story or a Mary Magdalena illustrated piece. Detection: Layer 4 register-match check. Prevention: Layer 1 register determination is load-bearing; Layer 4 confirms.
- PII in Background. Mechanism: a photograph or AI-generated image contains readable PII (a street address on a building, a phone number on a vehicle, a nameplate on a desk) that was not visible in the thumbnail review. Detection: Layer 4 PII screen on the full-resolution image. Prevention: PII screen runs at full resolution, not on the thumbnail.
Alt-text failures (Layer 4)
- Alt-Text-as-Caption Failure. Mechanism: alt text describes what the article is about rather than what the image shows — the most common accessibility failure in automated image handling. Detection: alt text contains claims from the article’s lede or headline without reference to image-specific visual content. Prevention: Layer 4 alt text generation rules; verification that the alt text does not reference article claims not visible in the image.
- Alt-Text Truncation. Mechanism: the alt text is truncated mid-description, leaving the visual content partially described. Detection: alt text ends with an incomplete sentence or cuts off a description. Prevention: Layer 4 alt text completeness check; 125-character limit is a maximum, not a target — shorter complete descriptions are preferred.
Structural failures (Layer 1 / Layer 6)
- Register Ambiguity on White Papers. Mechanism: white papers vary in whether a diagram or a conceptual illustration is more appropriate; the framework defaults to
illustratedbut a diagram would better serve the content. Detection: style spec (when drafted) will encode this; until then, publisher review for white-paper image register is advisable. Prevention: Layer 1 records whendiagrammaticvs.illustratedwas uncertain; the publisher can override. - Retry Cascade. Mechanism: a systematic failure (API consistently unavailable, model consistently rejecting the category of prompt) generates repeated retry queue entries that are never resolved. Detection: retry queue entries with the same
article_idappearing more than twice. Prevention: Layer 6 escalates to publisher (rather than continuing auto-retry) when a retry itself produces a placeholder.
Failure Mode Coverage Matrix
| Failure mode | Detection layer | Prevention strategy |
|---|---|---|
| License-Laundering | Layer 2 | License verification against acceptance table |
| Attribution Drift | Layer 5 | Full-metadata extraction + completeness validation |
| Prompt-Summary Sanitization | Layer 5 | Accuracy requirement; full prompt in metadata log |
| Indirect Likeness Instruction | Layer 3 + Layer 4 | Pre-generation circumlocution removal + output likeness screen |
| Contextual Misframing | Layer 2 + Layer 4 | Provenance check at search + confirmation at suitability screen |
| Defamatory Composite | Layer 3 + Layer 4 | Pre-generation gate removes juxtapositions + output composite screen |
| Style-Register Mismatch | Layer 1 + Layer 4 | Register determination at entry + register-match check on output |
| PII in Background | Layer 4 | Full-resolution PII screen |
| Alt-Text-as-Caption | Layer 4 | Alt-text rules + description-vs-claim distinction check |
| Alt-Text Truncation | Layer 4 | Completeness check |
| Register Ambiguity (white paper) | Layer 1 | Uncertainty flag + publisher review recommendation |
| Retry Cascade | Layer 6 | Publisher escalation after second placeholder |
Pipeline Integration
Upstream — news-article-generator
The article generator emits the image-generation request alongside the article object at Layer 7. The request is a structured data object, not a real-time call — the image generator picks it up from the queue and processes it asynchronously. The article publishes without waiting for the image; the image updates the article when it is ready. The article generator sets the article’s initial image field to the section-appropriate placeholder.
Downstream — Astro static-site builder
When this framework completes and the article is already published (i.e., the article is live with a placeholder), Layer 6 sends a build trigger to the Astro static-site pipeline. The build incorporates the updated imageSchema field and the Cloudflare cache purges. If the article has not yet published, the image will be included in the article’s first build without a separate trigger.
Lateral — source-correction-monitor
If a commons image is later found to carry a license that was misrepresented at the time of selection — or if the photographer credit is corrected by the source archive — the source-correction monitor may invoke this framework in refresh mode to replace the image with a corrected-attribution version or with an AI-generated alternative. This is analogous to the text-correction monitor’s invocation of the article generator in correction mode.
Lateral — pen-name-analytical-generator
The pen-name analytical framework emits image-generation requests using the same request schema as the article generator. The pen_name field in the request determines which visual register applies. Hector Rentier (cartoonist) produces editorial-cartoon images exclusively. All other analytical pen names — Phukher Tarlson, Mary Magdalena, Malcolm Little King, Joanna Rivera Blackwell, Diklis Chump, Mark Paulson, Ashley Wagner, Big Jim Zebedee, Thomas Reynolds, MSI Editorial Board — produce illustrated images per the style-spec register §4.2.
The image style specification
The Reference — MSI Image Style Specification.md document, when drafted, is a publisher-level artifact that this framework consumes but does not author. It is to visual identity what the consensus values floor is to editorial identity: the articulation of what Main Street Independent’s images look, feel, and mean, section by section, pen-name by pen-name. Until it is drafted, the inline register defaults at Layer 1 govern. The publisher decision to draft the style specification is the equivalent of the editorial decision to articulate the values floor.
Configuration Files Required
| File | Purpose | Status |
|---|---|---|
Reference — MSI Image Style Specification.md | Per-section visual style and register constraints; authoritative over Layer 1 inline defaults | drafted v1.0 (2026-05-06) |
commons-api-config.json | API credentials, source priority order, license acceptance table, resolution floor | not started |
likeness-exclusion-list.json | Named real individuals requiring publisher override for likeness generation | not started |
Reference — MSI Consensus Values Floor.md | Floor values, for caption and suitability context | drafted |
Reference — MSI Editorial Router.md | Editorial-supervisor MindSpec; queried at Layer 4 for composite and misframing edge cases | drafted |
Complexity Assessment
Standard tier (5–8 layers), per-invocation, with one visual-suitability gate (Layer 4) that may trigger regeneration or fallback.
Why not Simple tier
A 3-layer simple-tier framework is insufficient. The input is not uniform (three source paths with different quality checks; two primary paths that may both be attempted for a single article). The output must satisfy multiple distinct quality dimensions (license, attribution, visual suitability, accessibility, register match, disclosure). The failure modes — especially indirect likeness instruction, contextual misframing, and defamatory composite — require dedicated detection passes that cannot be collapsed into a single generation or selection step.
Why not Multi-Framework Pipeline
The image-generation task, while multi-path, is bounded. Six layers handle the full decision tree: validate and route, search commons, generate AI, screen suitability, assemble attribution, emit. Splitting this into multiple frameworks would create coordination overhead without corresponding architectural benefit.
Layer count
Six layers: Request Validation and Style Routing → Commons Search and Candidate Selection → AI Image Generation → Visual Suitability Screen → Attribution, Disclosure, and Caption Assembly → Schema Validation and Output Emission.
Human-review gates
There is no mandatory human-review gate analogous to the article generator’s Gate A. The visual suitability screen at Layer 4 is an automated gate that re-generates or falls through to placeholder; it does not block on human review. Publisher escalation occurs when:
- A retry produces a second placeholder (systematic failure).
- The defamatory-composite check reaches the editorial-supervisor and the supervisor’s response is
requires_human_review. - The likeness gate cannot be resolved without publisher authorization for a public figure.
- Schema validation fails and is uncorrectable.
This reflects the architectural reality that visual journalism at publication scale cannot block on human review for every image. The combination of pre-generation quality gates (Layer 3), output suitability screening (Layer 4), and placeholder-plus-retry as a safe fallback provides the required integrity without requiring per-image human oversight.
What This Framework Is Not
- This framework does not select stories. Selection is
news-cluster-selector. - This framework does not produce article text. Article text is
news-article-generator. - This framework does not author the image style specification. That is a publisher decision, analogous to how the consensus values floor was authored upstream of the frameworks that consume it.
- This framework does not store or manage images in a media library. Image storage and CDN configuration are infrastructure concerns handled at the VPS/Cloudflare layer.
- This framework does not produce video, audio, or animated content. Still images only.
- This framework does not produce editorial illustrations for white papers or books on demand; those are one-time production tasks handled by direct invocation with a request object that matches the Input Contract.
- This framework does not perform RAG ingestion of images. The
imageSchemaobject is part of the article record, andrag-ingestionhandles the article record’s structured fields; it does not separately index image artifacts. - This framework does not perform continuous monitoring. Corrections to image attribution are handled by
source-correction-monitorinvoking this framework inrefreshmode.
Cross-References
- Parallel framework:
Framework — News Article Generator.md— the text pipeline counterpart; emits the image-generation request this framework receives. - Image schema definition:
src/content/config.ts(imageSchema) — the data contract this framework’s output must match. - Editorial foundation:
Reference — MSI Treatise.md— especially §4 (coverage), §6 (bad-faith handling, whose visual analogues this framework enforces). - Visual style specification (pending):
Reference — MSI Image Style Specification.md— the publisher-level visual identity document this framework will consume. - Editorial-supervisor MindSpec:
Reference — MSI Editorial Router.md— queried at Layer 4 for edge cases in defamatory-composite and misframing evaluation. - Floor specification:
Reference — MSI Consensus Values Floor.md— for caption and suitability context. - Bad-faith techniques catalog:
Reference — MSI Bad-Faith Techniques Catalog.json— the visual bad-faith analogues (manipulated imagery, composite-by-juxtaposition, contextual misframing) are disciplined by the same three-condition documentation threshold: triggering pattern documented, definition matched, falsification conditions not met. - Project tracker:
Reference — MSI Tracker.md— Workstream 11 (Visual Journalism). - Meta-framework:
Framework — Process Formalization.md(Mode F-Design) — produced this specification.
End of News Image Generator Framework specification. Version 1.0. F-Design output for Workstream 11 (Visual Journalism) of the Main Street Independent project.