Commit Graph

402 Commits

Author SHA1 Message Date
calesthio
514d0faf37 backlot phase 0 review fixes: fail-closed gates, atomic checkpoint writes, event attribution hardening
- gate = manifest OR caller (stricter wins); unknown pipeline_type now
  raises instead of silently disabling enforcement; corrupt manifest logs
  and falls back; misleading diagnostic fixed
- write_checkpoint backfills pipeline_type from project.json marker so
  omitting the kwarg can't bypass gates
- checkpoint writes are atomic (temp + os.replace); history archiving is
  copy-based and best-effort (Windows open-file safe)
- manifest loads cached (load_pipeline_readonly); stage gate lookup moved
  to pipeline_loader.get_stage_human_approval_default; PROJECTS_DIR unified
  in lib/paths.py
- events: containment + root-normalization for explicit project dirs, no
  ghost-project mkdir, 0.0 cost preserved, nested-call depth tag,
  wrapper simplified
- documentary-montage edit-director gate footer (was missed); AGENT_GUIDE
  no longer claims edit/compose always auto-proceed
2026-07-01 23:24:11 -07:00
calesthio
722491d732 backlot phase 0: artifact contract + gate hardening
- init_project() writes project.json marker + canonical workspace layout
- write_checkpoint enforces approval gates: completed on a gated stage
  requires human_approved=True (GATE VIOLATION otherwise)
- superseded checkpoints archived to projects/<id>/history/ (stage
  versioning, gate audit trail, replay)
- BaseTool auto-instruments execute() -> projects/<id>/events.jsonl
  (start/finish/error, scene_id, cost) for the Backlot live board
- assets stage now gates (human_approval_default: true) in all manifests
- checkpoint-protocol + AGENT_GUIDE: manifest gate value is binding,
  awaiting_human + end-turn protocol, per-gate approval, canonical
  checkpoint location fixed to projects/<id>/
- gate reminder footer on all gating stage director skills
- /backlot command files for Claude Code, Codex, Cursor, Copilot
2026-07-01 23:08:51 -07:00
Calesthio
dc1cbca657 Merge pull request #256 from MoonCaves/fix-gpt-image-default
replace retired openai image models with gpt-image-2 (dall-e 3 is shut down too)
2026-07-01 23:02:07 -07:00
Remotely Human
fabc0e7088 Replace retired OpenAI image models with gpt-image-2 (DALL-E shut down 2026-05-12)
- openai_image: enum narrowed to ["gpt-image-2"]; DALL-E code path, sizes
  (1024x1792/1792x1024) and qualities (standard/hd) removed; estimate_cost
  updated to real GPT Image 2 pricing ($0.006/$0.053/$0.211 at 1024x1024)
- image_gen (deprecated but callable): default dall-e-3 -> gpt-image-2; drop
  response_format="b64_json", which GPT image models reject; update pricing
- docs/skills sweep: scrub retired-model references from README (en/zh),
  .env.example, docs/PROVIDERS.md (incl. pricing table + deprecation note),
  docs/ARCHITECTURE.md, AGENT_GUIDE.md, skills/creative/*, 14 pipeline
  director skills, and tests/qa/QA_PLAN.md

Source: https://developers.openai.com/api/docs/deprecations

proofread by fable 5 + codex
2026-07-02 11:36:31 +08:00
MoonCaves
07739952a8 fix openai_image default (gpt-image-1 is retired, 400s now) 2026-07-02 02:07:29 +08:00
calesthio
b3ff734b5a Add first-class Sora video provider 2026-07-01 10:51:48 -07:00
Yiyabo
b4bed5735a dashscope: fix multi-image download and complete idempotency keys
Address PR #240 review feedback from @calesthio:

1. dashscope_image: save EVERY returned image URL, not just the first.
   The tool advertised multiple_outputs and accepted n>1 but only read
   content[0], silently dropping paid outputs. Now collects all image
   URLs across choices/content and downloads each to a distinct indexed
   path (foo.png -> foo_1.png, foo_2.png, ...). images_generated now
   reflects the actual count downloaded.

   Per Qwen Cloud docs, a multi-output task is SUCCEEDED if at least one
   image is generated; choices with finish_reason != "stop" are skipped
   to avoid downloading partial/failed results.

2. Complete idempotency_key_fields so different requests no longer
   collide and reuse stale artifacts:
   - image: + negative_prompt, seed, prompt_extend, watermark
   - tts:   + instructions
   - asr:   + enable_words, language_hints

Adds 19 regression tests (114 total, all pass, no API keys needed):
- TestDashscopeImageMultiOutput: URL extraction across choices / within
  one choice / failed-choice skipping, path resolution for
  single/multi/no-extension, end-to-end multi-image download with a
  mocked 3-URL DashScope response verifying all 3 files land on disk,
  single-image legacy path behavior
- TestDashscopeIdempotencyKeys: field presence + key-differs-on-value
  for every newly added field across all three tools
2026-07-02 00:37:51 +08:00
Calesthio
169124d0fd Merge pull request #246 from calesthio/feat/ink-theater
feat: Ink Theater — hand-drawn doodle animation engine + mocap puppet + cross-agent commands
2026-07-01 06:36:11 -07:00
calesthio
7837bfee4a ink-theater: clear code-review findings — license-clean mocap + font, fix stale clip refs
Licensing (finding 1):
- Mocap library is now 100% CMU-sourced (free for any use). Replaced the 3
  Meta/FAIR clips with CMU equivalents: wave=141_16, shuffle=77_29 (creep);
  dropped the un-CMU "dab", added twist=141_12. Deleted the 4 committed FAIR
  BVHs (dab/jumping/wave_hello/zombie).
- Ship Patrick Hand's SIL OFL license (assets/OFL.txt) beside the bundled font
  — OFL permits embedding/redistribution; this is the required attribution.
- Add THIRD_PARTY_NOTICES.md (Patrick Hand OFL + CMU) and rewrite mocap/NOTE.md
  to drop the "verify before commercial use" caveat (no longer applicable).

Stale clip names (finding 2):
- Update the /ink-art command files (.claude/.github/.cursor/.codex),
  character-design-director, and the creative skills to the current catalog
  (wave/twist/…), and point to add-motion.mjs.
- ink-puppet.js: console.warn on an unknown clip name instead of silent dead-time.

Examples (finding 3):
- Remove broken standalone reel.html/momentum.html (they referenced a missing
  ink-theater.js and momentum shipped the subset font the fix warns against).
- Keep mocap-figure/ as the canonical self-contained, lintable example; refresh
  its bundled clips.js/ink-puppet.js; add examples/README.md with the lint path.
2026-07-01 04:03:19 -07:00
Calesthio
19ebce4b6b Merge pull request #225 from xucailiang/fix/makefile-virtualenv-setup
Use virtualenv-aware Python commands in Makefile
2026-07-01 03:02:07 -07:00
calesthio
a80bb6e7e1 feat: /animated-drawing character-source chooser (ask first; generate/upload/stock/doodle-ify)
Adds an explicit 'choose a character source' step so the agent never silently
reuses a bundled character (the 'same mascot every video' problem). Options:
user uploads a drawing; user uploads a photo -> doodle-ify (img2img) -> rig;
generate a fresh doodle (FLUX/Imagen, recommended default); or stock
(pixabay/pexels, hit-or-miss). Bundled chars are demo-only.
2026-07-01 02:52:44 -07:00
Justin
caf1c96fe1 Merge branch 'main' of https://github.com/calesthio/OpenMontage into fix/makefile-virtualenv-setup 2026-07-01 13:50:04 +08:00
Justin
fc91ee760d Use virtualenv-aware Python commands in Makefile 2026-07-01 13:48:26 +08:00
calesthio
0b9cde8458 feat: complete Ink Theater motion system — action library + self-extending converter + balloon primitive + audit doc fixes
Ships Phases 1-3 so the feature isn't left hanging:
- Phase 1: 12-action mocap library (walk/run/jump/climb/march/kick/sit/wave/dab/
  shuffle/dance_spin/dance_glide) from CMU + fair1, with mocap/catalog.json.
  Fixes the '4 repeated moves' repetition problem.
- Phase 2: bvh2clip.mjs is skeleton-agnostic (fair1/CMU/Mixamo joint aliases) +
  frame cap + --name; add-motion.mjs fetches/converts/rebundles any BVH by CMU
  id / URL / path — self-extending, no code changes.
- Phase 3: skill guidance to read catalog.json + choreograph variedly (never
  loop a clip), add-motion, and the balloon primitive.
- Engine: InkTheater.balloon() speech-balloon primitive (both audit videos
  hand-built it).
- Audit fixes: /animated-drawing skill gains a motion->retarget mapping table
  (2 motions crashed on the wrong config) + a 'Compositing into HyperFrames'
  section (transparent output, GIF-freezes->VP9-alpha, the linter video
  contract) + character-variety guidance (animate the user's/a generated
  drawing, not a bundled char) + pipeline-exempt notes.
Example refreshed to the new library + full Patrick Hand TTF.
2026-06-30 21:13:38 -07:00
Calesthio
1188e1bee9 Merge pull request #199 from An-idd/fix/video-compose-vertical-resolution
fix(video_compose): honor target resolution in FFmpeg compose (vertical/9:16)
2026-06-30 20:45:49 -07:00
Calesthio
1242f8459e Merge pull request #227 from kapil971390/fix/character-reviewer-success-contract
fix(reviewer): success=False when CharacterAnimationReviewer finds QA issues
2026-06-30 20:40:30 -07:00
Calesthio
7b8d59186d Merge pull request #223 from 0xDevNinja/feat/issue-168-music-library-preflight
feat(audio): add music_library tool so user tracks surface at preflight
2026-06-30 20:40:14 -07:00
calesthio
2a7f130bee fix: correct the font gotcha — subset trap, not SVG-vs-HTML; bundle Patrick Hand TTF
Audit finding from video production: handwriting rendered as serif everywhere
because the woff2 we downloaded was a Google-Fonts css2 subset MISSING basic-latin
(ASCII) glyphs — not because 'SVG text can't use webfonts' (the old README claim
was a misdiagnosis; prior demos were silently serif). Fix: embed the FULL font.
Bundles ink-theater/assets/patrickhand.ttf and corrects README + skill guidance
(HTML overlay divs + full TTF).
2026-06-30 20:40:12 -07:00
calesthio
ccbce8bb1e feat: discoverability + cross-agent slash commands for Ink Theater / Animated Drawing
Makes the doodle-animation capability findable instead of hidden.

Routing (OpenMontage-internal):
- AGENT_GUIDE: Style Playbooks gets an ink-sketch row + a 'hand-drawn doodle'
  routing note (it's a style + engine on the animation / character-animation
  pipelines, NOT a new pipeline).
- animation/idea-director + character-animation/character-design-director point
  to the Ink Theater / Ink Puppet skills for hand-drawn character briefs.

Cross-agent slash commands (/ink-art, /animated-drawing) for Claude Code,
Copilot, Cursor, and Codex — thin pointers to the canonical skills so they stay
in sync. /ink-art = create a vector doodle from scratch (Ink Theater + Ink
Puppet mocap); /animated-drawing = animate a SUPPLIED drawing via Meta
AnimatedDrawings (raster). New skills/creative/animated-drawing.md documents the
Path A setup/run/limits. Codex prompts are user-home only — .codex/prompts/README
explains the copy/symlink step.

  .claude/commands/*.md            (Claude Code)
  .github/prompts/*.prompt.md      (Copilot)
  .cursor/commands/*.md            (Cursor)
  .codex/prompts/*.md + README     (Codex; copy to ~/.codex/prompts)
2026-06-30 20:13:48 -07:00
calesthio
389534af4a feat: Ink Puppet — real mocap (BVH) retargeted onto a hand-drawn figure
The agent-seamless character system: motion comes from a LIBRARY of real
motion-capture clips, never hand-tuned per video. Two parts:

- mocap/bvh2clip.mjs: offline BVH(3D) -> compact 2D clip converter (FK +
  projection + skeleton-rest scaling), run once per motion; bundled via clips.js.
- ink-puppet.js: runtime that draws a stick figure limb-by-limb (draw-on reveal)
  and plays named clips via a declarative choreograph() API. Deterministic /
  seek-safe (pose = pure fn of segment local time).

Example (examples/mocap-figure): the pencil figure draws itself, then waves /
dabs / jumps / walks from real mocap. Keeps vector white-ink + draw-on reveal
that Meta AnimatedDrawings (raster, humanoid-only, no reveal) cannot do.
Provenance/licensing: mocap/NOTE.md (prefer free CMU mocap for production).
2026-06-30 19:49:57 -07:00
calesthio
0aa986e61b feat: Ink Theater — deterministic hand-drawn moving-art engine + creative skill
Reusable engine (ink-theater/ink-theater.js, global InkTheater) for hand-drawn
ink-on-white animated 'moving art', authored for HyperFrames (atelier). Five
seek-safe primitives: variable-width brush strokes (inkPath/inkRibbon),
timeline-driven boil, closed-form damped-spring eases, FABRIK 2D IK + riggable
mascot, and a parametric contraption grammar (crank/gauge/hopper/slot/lever/box).

Adds skills/creative/ink-theater.md (metaphor method + mined archetypes + color
grammar) and README with the HyperFrames font gotcha (webfonts apply to HTML
divs, not SVG <text>). Two reference builds under ink-theater/examples/.

Grounded in deep-research on vector/physics/metaphor foundations (FABRIK,
bounded-biharmonic/ARAP, closed-form springs, LLM metaphor+layout planning).
2026-06-30 17:03:20 -07:00
kapil971390
5782f704b3 fix(character-reviewer): align success contract with visual_qa pattern
Per maintainer feedback on PR #227:
- Revert success=not issues back to success=True — tool execution
  succeeded even when QA finds issues; verdict lives in status/issues
- Update test to assert the real contract: success=True + status='revise'
  + issues non-empty, matching how compose-director actually gates
- Consistent with visual_qa.py: success=True, verdict in validation_passed
2026-06-30 22:23:52 +05:30
Yiyabo
05494030be dashscope: add provider documentation to docs/PROVIDERS.md 2026-06-30 15:24:06 +08:00
Yiyabo
7473d0d1bb dashscope: add contract tests (95 tests, no API calls needed) 2026-06-30 14:35:34 +08:00
Yiyabo
f5cbe1011f dashscope: add Layer 3 skill documentation 2026-06-30 14:35:34 +08:00
Yiyabo
75c641ac44 dashscope: add ASR provider with word-level timestamps (qwen3-asr-flash-filetrans) 2026-06-30 14:35:34 +08:00
Yiyabo
b836416ac2 dashscope: add TTS provider (qwen3-tts-flash) 2026-06-30 14:35:34 +08:00
Yiyabo
4528a0f6eb dashscope: add image generation provider (qwen-image-2.0-pro) 2026-06-30 14:35:34 +08:00
Yiyabo
c8f30c2cf3 dashscope: add DASHSCOPE_API_KEY to .env.example 2026-06-30 14:35:33 +08:00
0xDevNinja
a41f7fb404 docs(explainer): fix invalid publish_log example in publish-director
Step 6 still showed a legacy publish_log entry with 'metadata' and 'video_path'
fields, which the publish_log schema rejects (entries set additionalProperties:
false). Replace it with the actual schema-valid shape export_bundle returns in
data['publish_log'] (status 'exported', export_path, metadata_used) and note
that it should be persisted directly without extra entry fields.
2026-06-30 12:05:23 +05:30
0xDevNinja
9bcccce2db fix(publish): validate optional assets and default export inside project
Addresses review feedback on export_bundle:

- If subtitles_path or thumbnail_path is provided but the file is missing, the
  tool now fails with an explicit error instead of silently producing a package
  without that asset (which could ship an approved deliverable missing part of
  its content).
- Default export location now stays inside the project workspace: when the
  render lives at projects/<name>/renders/..., the bundle defaults to
  projects/<name>/exports/ (alongside artifacts/, assets/, renders/) rather than
  a repo-root exports/<name>/. export_dir remains an explicit override.

Tests cover both: missing optional asset errors, and the project-workspace
default path.
2026-06-30 12:05:23 +05:30
Calesthio
299dd4f5fd Merge pull request #236 from calesthio/fix/skill-blob-hardlink-divergence
fix: reconcile hardlinked .claude/skills ↔ .agents/skills blobs (clean dirty tree)
2026-06-29 23:05:46 -07:00
Calesthio
46ed550883 Merge pull request #229 from calesthio/codex/expressive-tts-governance
[codex] Add expressive TTS governance
2026-06-29 23:04:56 -07:00
calesthio
1918be6526 fix: reconcile .claude/skills blobs with hardlinked .agents/skills
The skill SKILL.md files are hardlinked across .agents/skills/ and
.claude/skills/ (same inode, two paths), but git had committed divergent
blobs: the .agents/ copies carried an "Extended reference: AGENTS.md"
note that the .claude/ copies lacked. Because one physical file cannot
match two different blobs, the working tree was permanently dirty on the
three .claude/skills paths.

Stage the .claude copies so both paths commit identical content (with the
AGENTS.md reference note, the fuller intended version). Restores a clean
git status and keeps it clean across checkouts.

Affected skills: flux-best-practices, vercel-composition-patterns,
vercel-react-best-practices.
2026-06-29 22:58:56 -07:00
Calesthio
5ae4439105 Merge pull request #230 from Alcb4/comfyui-bridge
Add native ComfyUI provider (rebase of #29, conflicts resolved)
2026-06-29 14:55:03 -07:00
Alastair Beal
85cf047c93 comfyui: route custom workflows through image/video selectors
The selector path previously hid the custom-workflow feature: video_selector
filtered tools on per-operation readiness (bundled WAN models) and both
selectors only chose ToolStatus.AVAILABLE providers, so comfyui_image/
comfyui_video — DEGRADED when bundled model metadata is missing — were
dropped even when the ComfyUI server was up and the caller supplied a full
workflow_json/workflow_path plus output_node.

- Add a custom-workflow readiness path to both selectors: when a custom
  workflow is supplied, eligibility is based on server availability (status
  != UNAVAILABLE) for any provider advertising supports.custom_workflow,
  not on bundled-model readiness. A custom workflow also restricts routing
  to custom-workflow-capable providers, since the graph JSON is ComfyUI
  specific.
- Expose workflow_json, workflow_path, output_node, workflow_name,
  workflow_model, and workflow_model_stack in both selector schemas so
  agents can discover the feature without bypassing the selectors.
- image_selector only forwards the workflow inputs to providers that
  declare them.
- Add contract tests for the new eligibility path and schema exposure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 22:38:18 +01:00
calesthio
5e4943a41b Add expressive TTS governance 2026-06-29 12:16:07 -07:00
calesthio
7c4bb08890 comfyui: satisfy provider contract review items 2026-06-29 19:09:22 +01:00
martimramos
4c62186c95 comfyui: drop music tool — ACE-Step node interface not standardized
Removed comfyui_music and its workflow. The ACE-Step model runs in
ComfyUI but the node class names differ across custom node packs
(AceStepModelLoader vs native TextEncodeAceStepAudio, etc.), so a
bundled workflow would break for most users.

Documented the reasoning in the plan doc and listed it as an open
question for future work. Users with ACE-Step working can still use
the workflow_json override on any tool.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-29 19:09:22 +01:00
martimramos
e3947e1f11 comfyui: add model discovery and actionable error messages
- Client queries ComfyUI /object_info to discover installed models
  (checkpoints, diffusion models, VAE, CLIP, LoRAs)
- Each tool declares its required models and checks them on execute()
- get_status() returns DEGRADED when server is up but models are missing
- Clear error messages tell the user exactly which models to download
- When COMFYUI_SERVER_URL is not set, error message tells the user to
  configure it in .env instead of silently failing on localhost:8188
- 8 new tests covering URL config, error messages, and model requirements

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-29 19:08:49 +01:00
martimramos
6ec2bbb090 comfyui: add native ComfyUI provider for image, video, and music generation
Adds three new BaseTool providers that delegate GPU work to a running
ComfyUI server via its REST API.  This avoids the need to install
PyTorch/diffusers directly, which is critical on hardware where the
ecosystem hasn't caught up (e.g. NVIDIA Blackwell / DGX Spark, aarch64
+ CUDA 13.0).

New files:
- tools/_comfyui/client.py — shared REST client (submit/poll/download)
- tools/_comfyui/workflows/ — 4 bundled workflow templates
- tools/graphics/comfyui_image.py — FLUX 2 Dev NVFP4 text-to-image
- tools/video/comfyui_video.py — WAN 2.2 14B t2v + i2v (4-step LightX2V)
- tools/audio/comfyui_music.py — ACE-Step 3.5B music generation
- tests/contracts/test_comfyui_tools.py — 41 contract tests
- docs/comfyui-adapter-plan.md — design document

Zero changes to existing tools, selectors, registry, or pipelines.
Tools are auto-discovered and selectors pick them up via capability match.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-06-29 19:08:49 +01:00
kapil971390
7cd7199986 fix(reviewer): success=False when CharacterAnimationReviewer finds issues
The contract test in test_character_animation_pipeline.py asserts
result.success after the QA run, implying success should reflect
whether QA passed. But CharacterAnimationReviewer always returned
success=True even when issues were found and status was 'revise'.

This creates a silent failure path: callers that gate on result.success
(the standard ToolResult contract) would treat a broken rig as a clean
pass without ever reading report['status'].

Fix: return success=not issues so result.success is False when QA finds
problems, consistent with the test contract and with how execution errors
are already handled (success=False on exception paths).

Also adds test_character_reviewer_success_false_when_qa_finds_issues to
explicitly assert this contract — a broken rig with missing joints must
produce status='revise', non-empty issues[], and success=False.
2026-06-29 19:15:29 +05:30
0xDevNinja
6dc01d4e67 feat(explainer): wire export_bundle into the publish stage
Make the new PUBLISH-tier tool usable rather than dead code: add export_bundle
to the animated-explainer publish stage's tools_available, and update the
explainer publish-director skill Step 5 to call export_bundle for packaging
(passing the prepared metadata) instead of hand-creating the export tree. The
documented export layout and the no-upload caveat are kept in sync with the
tool. Other pipelines' publish stages can adopt it the same way.
2026-06-29 15:40:59 +05:30
0xDevNinja
7b1eef49f2 feat(publish): add export_bundle, the first PUBLISH-tier tool
Every pipeline ends in a publish stage that produces a publish_log artifact,
but tools/publishers/ shipped empty (only __init__.py) — no tool backed the
PUBLISH tier, so the mechanical packaging (copy the render, write metadata
files, lay out the export directory, emit a schema-valid publish_log) had to be
hand-rolled by the agent every run.

Add a local, offline export bundler:
- capability 'publish', provider 'local', runtime 'local', deterministic, no cost
- takes the final video_path plus the SEO metadata the publish-director prepares
  (title, description, tags, hashtags, chapters, optional subtitles/thumbnail)
- writes exports/<project>/{video,metadata,thumbnails}/ matching the
  publish-director skill's documented layout
- returns a schema-valid publish_log (status: 'exported') in data, validated
  against schemas/artifacts/publish_log before returning so a bad entry fails
  here rather than at checkpoint

It does not upload — a networked publisher (e.g. YouTube) can be added later as
a separate provider under the same 'publish' capability.

Tests cover the contract, registry discovery, the export layout, chapter-time
formatting, the schema-valid publish_log, and the missing-video error path.
2026-06-29 15:40:59 +05:30
0xDevNinja
add955696d feat(audio): add music_library tool so user tracks surface at preflight
AGENT_GUIDE.md requires the music decision to be made at the proposal stage,
but the only check for the user's music_library/ folder lived in the
asset-director skills, which run later. A user could approve a creative
direction without ever being told a free, intentional music option was sitting
on disk (issue #168).

music_library/ was already referenced as a source_tool in asset artifacts but
had no backing tool. Add a small read-only tool that scans the library folder
(default <project root>/music_library, override via MUSIC_LIBRARY_DIR or a
library_dir input) and lists the audio tracks it finds, with best-effort
durations via ffprobe when present.

Because it inherits BaseTool, the registry auto-discovers it and it appears in
the preflight provider menu alongside music_gen and the stock music sources:
- AVAILABLE when the folder holds at least one audio track
- UNAVAILABLE otherwise, with install_instructions telling the user how to add
  tracks

So the user sees their music options before approving creative direction, with
no orchestration code changes. Read-only: no side effects, no cost.

Closes #168
2026-06-29 13:24:48 +05:30
Calesthio
80e51fd618 Merge pull request #211 from calesthio/docs/readme-star-history-and-trending-badge
docs(readme): add Star History chart + polish Repository of the Day badge
2026-06-27 17:21:35 -07:00
calesthio
5eb996681d docs(readme): replace stretched shields.io badge with bordered SVG card
The previous attempt at matching the deer-flow Repository-of-the-Day
design used `style=for-the-badge` shields.io rendered as two wide
black/orange rectangles spanning the README width — nothing like the
small bordered pill deer-flow actually ships (a Trendshift-served badge
with a laurel-wreath "1" emblem and two lines of restrained text).

OpenMontage isn't on Trendshift, so a real Trendshift badge isn't
available. Built a custom inline SVG matching the design intent:

- Small (340x68) bordered card with rounded corners
- Laurel-wreath emblem with serif "1" inside on the left
- Two-line text on the right: "GITHUB TRENDING" (small, dimmed gray)
  and "#1 Repository Of The Day" (bold, accent)
- Light + dark variants served via prefers-color-scheme picture/source
  - Light: white bg, #7C3AED purple stroke/text
  - Dark:  #0D1117 bg, #A78BFA lavender stroke, #C4B5FD headline

Files added:
- .github/assets/repo-of-the-day-light.svg
- .github/assets/repo-of-the-day-dark.svg
2026-06-27 17:16:25 -07:00
calesthio
de2323393f docs(readme): add Star History chart + polish Repository of the Day badge
- Add Star History section before License (dark-mode-aware picture/source
  pattern matching calesthio/Crucix). Links to star-history.com.
- Repository of the Day badge restyled to match the deer-flow aesthetic:
  dark labelColor (#0D1117 — GitHub background), gold accent (#F6B543
  dark / #D9892A light), prefers-color-scheme picture variants, 48px
  height for a more pill-like proportion. The current bright-purple
  shields.io block was less distinctive than the surrounding YouTube/X
  badges.

OpenMontage isn't currently listed on Trendshift (deer-flow's badge
provider), so the badge stays shields.io-based; design matches the
intent. If we want a real Trendshift badge later, register the repo
at trendshift.io and swap in the api/badge/repositories/<id> URL.
2026-06-27 17:11:40 -07:00
Calesthio
91ad909bd1 Merge pull request #209 from calesthio/docs/readme-add-alexandria-remove-abyss
docs(readme): swap 'Into the Abyss' for 'The Library at Alexandria'
2026-06-27 14:53:08 -07:00
Calesthio
3065bb91ef Merge pull request #208 from calesthio/chore/version-bumps-and-hf-resync
Version bumps + HyperFrames re-vendor (v0.7.17) + atelier doctrine HF-aware
2026-06-27 14:52:37 -07:00