Code Graph Mermaid Diagrams
trailofbits/skills
Generates Mermaid diagrams from Trailmark code graphs, including call graphs, class hierarchies, module dependency maps, complexity heatmaps and attack surface data flows.
Windows-first Visio diagram reconstruction workflow for flowcharts, architecture diagrams, and paper-style module figures.
$ npx skills add Rss3208/Visiomaster --skill visiomaster -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Rss3208/Visiomaster visiomaster --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
Claude Code skills documentation · loads skills from .claude/skills/
Install the "visiomaster" agent skill from https://github.com/Rss3208/Visiomaster/tree/main into .claude/skills/visiomaster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visiomaster", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Rss3208/Visiomaster --skill visiomaster -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Rss3208/Visiomaster visiomaster --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "visiomaster" agent skill from https://github.com/Rss3208/Visiomaster/tree/main into .agents/skills/visiomaster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visiomaster", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Rss3208/Visiomaster --skill visiomaster -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Rss3208/Visiomaster visiomaster --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "visiomaster" agent skill from https://github.com/Rss3208/Visiomaster/tree/main into .cursor/skills/visiomaster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visiomaster", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Rss3208/Visiomaster --skill visiomaster -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Rss3208/Visiomaster visiomaster --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "visiomaster" agent skill from https://github.com/Rss3208/Visiomaster/tree/main into .gemini/skills/visiomaster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visiomaster", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Rss3208/Visiomaster visiomasterInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Rss3208/Visiomaster --skill visiomaster -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "visiomaster" agent skill from https://github.com/Rss3208/Visiomaster/tree/main into .github/skills/visiomaster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visiomaster", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Rss3208/Visiomaster --skill visiomaster -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Rss3208/Visiomaster visiomaster --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "visiomaster" agent skill from https://github.com/Rss3208/Visiomaster/tree/main into .opencode/skills/visiomaster/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "visiomaster", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
visiomasterWindows-first Visio diagram reconstruction workflow for flowcharts, architecture diagrams, and paper-style module figures.
Visiomaster is an agent skill from Rss3208/Visiomaster. Windows-first Visio diagram reconstruction workflow for flowcharts, architecture diagrams, and paper-style module figures. Reuses ppt-master style analysis and composition discipline on the front half, but outputs editable Visio .vsdx plus exported .svg and .png through a scene.json to Visio pipeline. Use when the user wants a diagram recreated as editable Visio shapes instead of a pasted screenshot or PPT-only result.
Its SKILL.md is about 15k tokens, which your agent loads only when the skill is triggered. The skill folder holds 74 other files, including scripts and reference files (for example `README.md`, `RELEASE_NOTES.md` and `agents/openai.yaml`).
It sits in Development, covering Diagrams. It works with Python. The repository describes itself as: 参考 ppt-master 思路构建的 Visio 图形重建工具包,将流程图、架构图和论文模块图从图片重建为可编辑 .vsdx,并导出 SVG/PNG。 The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0d49002. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
pythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Visiomaster loads about 15k tokens when it runs, and up to ~48k if it reads all its reference files. Until then it costs about 109 tokens; SKILL.md has 7,923 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from Rss3208/Visiomaster at commit 0d49002, republished under its MIT licence (© Rss3208). 7,923 words, ~15,305 tokens.
.claude/skills/visiomaster/SKILL.md (or your agent's skills folder). This skill also uses 68 other files; get the full folder from GitHub.visiomaster is a standalone skill for rebuilding diagram images into editable Visio deliverables.
It is optimized for:
It is not the right tool for:
Use ppt-master ideas on the front half:
Do not reuse ppt-master's raw SVG -> PPTX output path for Visio.
For Visio, the stable path is:
image -> scene.json -> validate -> Visio COM render -> .vsdx/.svg/.png
The key rule is simple:
This skill is Windows-first and expects:
pywin32Use the active thread default Python interpreter. If the user or project provides a specific Python path, use that; otherwise use:
pythonFirst classify the source request:
If the diagram is mostly boxes, arrows, labels, and containers, stay in visiomaster.
For image-based exact replicas, always secure a local source image file before claiming strict review readiness:
metadata.source_image and all review --original inputs.source/original.<ext> before rendering the final deliverable. Do not treat a chat attachment alone as an acceptable strict-review source.When you have a source file path, stage it with the helper script so review manifests can use one stable canonical image:
python ${SKILL_DIR}\scripts\stage_source_image.py `
--input <source.png> `
--workspace <reconstruction_workspace> `
--id <figure_id>This writes source/original.<ext> and source/source_manifest.json with SHA-256 hashes. Use the staged image path as metadata.source_image and as make_review_assets.py --original.
For wide or dense figures, do not start by authoring the whole page in one pass. If the source has many modules, many arrows, tiny labels, or a very wide canvas, first create a region plan:
group_containeraudit_regioncontainer_idFor exact replicas, do not write scene.json until you have a source-faithful visual inventory for that specific image. This inventory is produced by visual LLM inspection of the source image, not by OCR, filename clues, warning logs, prior scenes, or a batch scene generator. It must preserve visible source language and notation exactly; do not translate Chinese labels to English, normalize formulas, invent unreadable text, or replace source modules with generic neural-network blocks unless the source visibly shows them.
Record the inventory in metadata.source_visual_inventory before the first render. At minimum it should include:
analysis_basis: a short note such as visual_llm_source_image.language_profile and do_not_translate.unknown_text_policy: use mark_unreadable_do_not_invent for unclear tiny text.source_bbox_px, required visible labels/formulas, component motifs, edge motifs, port/boundary/dashed-frame notes, uncertainty notes, and text layout facts.Before authoring the first edges array for an exact replica, run a separate arrow-inventory pass from the source image. The goal is to lock topology before any Visio PNG exists. For arrow-dense local structures, this pass is not optional bookkeeping; it is the scene driver:
metadata.arrow_planarrow_plan_id; do not describe a whole local subgraph or multi-hop chain with one plan entryid, from_visual_object, from_anchor_description, to_visual_object, to_anchor_description, route_shape, line_style, arrowhead, semantic_intent, source_bbox_px, must_not_cross, relative_position_facts, direction, endpoint/boundary facts, and certaintysemantic_intent: "data_flow" for normal flow, "feedback"/"loss_backprop" for dashed return paths, "boundary_handoff"/"frame_output" for frame-edge arrows, "merge"/"fan_in" for many-to-one joins, "fork"/"fan_out" for one-to-many branches, and "loop_update" for outer cyclesstraight_horizontal, straight_vertical, orthogonal, rounded_orthogonal, smooth_curve, or loop; do not leave major arrows as vague autoarrow_plan_idarrow_plan_id may bind to only one scene edge by default. If one source arrow truly needs multiple scene segments, every segment edge must declare same_source_arrow: true, segment_index, and segment_countcertainty: "uncertain" and do not invent its destinationTreat metadata.arrow_plan as the source-truth checklist for later visual review: the reviewer should be able to say whether A001, A002, etc. match the original, rather than writing broad comments like "arrows are wrong".
For attention-like motifs, decompose the visual grammar before drawing scene edges. A source crop that looks like K/Q -> multiply -> score matrix -> value multiply -> value matrix -> Concat is not one edge. Record the local motif, then inventory each visible connector separately, for example:
A101: K_w right edge -> qk_mul left edge, horizontal, no arrowheadA102: Q_a right/top edge -> qk_mul lower-left edge, short diagonal/curved, no arrowheadA103: qk_mul right edge -> score matrix left edge, horizontal, arrowhead endA104: V_w right edge -> value multiply left edge, horizontal, no arrowheadA105: score matrix upper-right corner -> value multiply lower-left edge, diagonal, no arrowheadA106: value multiply right edge -> value matrix left edge, horizontal, arrowhead endA107: value matrix top edge -> Concat bottom edge, vertical, arrowhead endWhen a local diagram matches a known motif such as attention_score_motif, value_weighting_motif, residual_add_norm_motif, or concat_merge_motif, generate the local scene from that motif grammar first. For attention_score_motif, Q/K feed the left-side multiply, Softmax is a floating label rather than an edge endpoint, the multiply output enters the score matrix, the score matrix connects diagonally to value multiplication, value multiplication enters the value matrix, and the value matrix outputs vertically to Concat.
For paper-style exact replicas, source_visual_inventory should record precise layout facts, not only module names:
Fig. 6. plus regular bodycaption, small_text, or arrow_denseFor strict replica work, also mark:
metadata.replica_review_mode: "strict_replica"metadata.replica_stage: "layout_topology" before the first rendermetadata.replica_stage: "detail_polish" only after layout/topology is already visually correctFresh capability evaluation means a fresh scene from the source inventory. Do not validate a skill change by patching an old scene and checking whether that old scene looks better. Old scenes and old reviews may explain failure modes, but after changing skill workflow, schema, renderer, or components, rebuild each test scene from the source image inventory. Batch exporting finished scenes is fine; batch-generating several scenes from one Python script is not valid proof that the skill works for normal users.
scene.jsonscene.json is the contract between the visual analysis step and Visio rendering.
When authoring or editing it:
references/scene-schema.mdtemplates/visio_components.json as the supported component vocabularytemplates/style_profiles.json to select paper_white or clean_whitereferences/visio-component-map.md if you need mapping guidanceStarter generation:
python ${SKILL_DIR}\scripts\image_to_scene.py --image <source.png> --output <scene.json>This script does not infer the real diagram structure from pixels. It only writes a blank or template starter scene. The actual first-pass scene.json for exact work must still be authored by the LLM from the source image.
For exact large-figure reconstruction, start in source pixels and record the region strategy:
python ${SKILL_DIR}\scripts\image_to_scene.py --image <source.png> --pixel-page --region-strategy region_first --output <scene.json>If the layout is close to a standard process flow, you can seed from the built-in example:
python ${SKILL_DIR}\scripts\image_to_scene.py --image <source.png> --template basic-flow --output <scene.json>Treat this as draft/bootstrap authoring only. It is not valid strict-replica proof.
For GAN/TFR training-cycle figures, AI-generated paper diagrams, or images with Real/Generated TFR panels, you may seed a draft/bootstrap pass from the canonical module template:
python ${SKILL_DIR}\scripts\image_to_scene.py --image <source.png> --template gan-tfr --output <scene.json>Do not use template-seeded scenes as final evidence for strict capability evaluation. For strict replica work, rebuild the scene from a blank source-driven authoring pass before judging the skill.
Before the first Visio render of a draft/bootstrap or legacy GAN/TFR scene, you may run the deterministic recipe pass explicitly:
python ${SKILL_DIR}\scripts\scene_autofix.py <scene.json> --recipe gan-tfr --output <fixed.scene.json>This recipe upgrades fragile local grammar before visual tuning: split Real/Generated boxes become tfr_panel, empty dashed loss frames become loss_region, raw L_adv/L_rec text becomes math_text, detached/broken outer loops become smooth loop_arrow, reversed GAN arrows are corrected, and crowded backprop arrows are bundled.
scene_to_visio.py no longer runs this autofix implicitly for strict/exact scenes. Use --autofix-gan-tfr only when you intentionally want an explicit bootstrap/render helper path, and treat the written <basename>.autofixed.scene.json as a non-final rewritten scene until you re-author a fresh strict-replica scene from source inventory.
Before touching Visio, validate structure and references:
python ${SKILL_DIR}\scripts\scene_validate.py <scene.json>If validation fails, fix the scene first. Do not guess around broken ids or unsupported types inside the renderer.
For large or complex figures, run a complexity preflight before full rendering:
python ${SKILL_DIR}\scripts\scene_complexity.py <scene.json>Use the complexity report to catch the large-image failure modes before Visio render: too few regions, uncovered nodes, over-dense modules, inconsistent font scale, text-fit risks, and likely overlaps.
For exact replicas, run a typography preflight when the source uses more than one visible font style:
python ${SKILL_DIR}\scripts\font_inventory.py --check "Times New Roman" --check "Cambria Math" --check "Calibri" --check "Microsoft YaHei UI"Do not treat all labels as one font. Classify visible text by role before rendering:
font_role: "paper_serif" with Times/Cambria-like candidatesfont_role: "ui_sans" with Calibri/Arial/Segoe-like candidatesfont_role: "math" or symbol_font_role: "math"font_role: "cjk_sans" or cjk_serifWhen the source font is known or strongly inferred, store source_font_family in the node style. If that font is installed but the effective render font differs, scene_audit.py reports it as a rebuild issue.
For complex paper figures with many modules, also generate a module-level audit report:
python ${SKILL_DIR}\scripts\scene_audit.py <scene.json>Use the audit report to review every group_container as a separate region: child count, labels, colors, internal arrows, incoming arrows, outgoing arrows, and whether cross-module arrows start from a boundary or from an internal component. Treat unchecked audit items as real defects before final export.
For exact replicas, run the rebuild gate after each rendered iteration:
python ${SKILL_DIR}\scripts\scene_validate.py <scene.json> --strict
python ${SKILL_DIR}\scripts\scene_audit.py <scene.json> --fail-on-rebuildIn strict mode, missing source_visual_inventory, missing region_plan, template-seeded starts, and recipe-rewritten exact scenes are treated as gate failures, not informal warnings. If validate/audit prints a blocking contract failure or [REBUILD] item, stop coordinate nudging. Rebuild that local subsystem with the correct semantic component (loop_arrow, dashed_region, dashed_feedback_path, boundary_port, etc.) before doing any more visual polishing.
In strict mode, missing metadata.arrow_plan, missing arrow_plan_id bindings, or route-shape violations are also gate failures. Do not render a strict replica whose long arrows still rely on center-to-center auto routing when the source shows fixed horizontal, vertical, boundary, merge, fork, feedback, or loop grammar.
For exact replica work, validation passing is necessary but not sufficient. Render a PNG and compare it with the source for:
Exact mode should run as a two-stage production loop, not one rushed render:
If a higher-level component stays visually wrong after two strict reviews, rebuild that local subsystem with smaller components or primitives. Do not keep nudging the whole page around one stubborn panel or text cluster.
For arrow-dense local structures, review the local crop before merging it into the full scene:
attention_core.scene.json from the local source crop and motif/arrow planDo not ship after a first-pass exact render unless the second review round is already represented and visually clean.
Render the scene into a Visio drawing and export deliverables:
python ${SKILL_DIR}\scripts\scene_to_visio.py <scene.json> --output-dir <exports>Default outputs:
.vsdx.svg.pngUse --style-profile clean_white when the user wants a polished white product/process style. Use the default paper_white for paper figures and academic module diagrams.
Read references/visio-export-flow.md when debugging Visio automation or export behavior.
After rendering complex replicas, compare the exported PNG module-by-module against the source. Do not rely on whole-image visual similarity; small topology errors often hide inside large figures.
For exact replicas, the first render is allowed to be a fast editable reconstruction pass, but the first render must be followed by at least one local-source review round before final delivery:
make_review_assets.py --write-review-bundle.attention_core, arrow_dense, right_output, small_text, or caption. Do not generate or review every crop by habit. If you generate a crop but neither a human nor the reviewer inspects it, it is only a stored debug artifact, not review evidence.review_findings.json: a topology checklist and a visual-layout checklist.S3 -> vertical trunk -> S1/common path, S2/S3 -> hollow circle -> minus, Linear -> f̂ -> [] -> fused feature.For high-fidelity work, the reviewer should compare only two images:
Do not give the reviewer pair/overlay images as the prompt when the original and replica are already available. A pair image is redundant with the two full images and often hides small connector or text defects through downscaling.
Targeted crops are allowed as secondary reviewer inputs only when the current task is explicitly local and the full images are too small to judge the detail. In that case, send the original full image, the replica full image, and the smallest useful number of local source-vs-replica crop pairs. Record which crop(s) were actually inspected. The review contract is still anchored by the two full images.
For exact/strict review packaging, call make_review_assets.py --write-review-bundle to write the manifest/templates. By default it does not generate global pairs, local crops, or overlays. Use:
--include-global-pair only for human navigation/audit records.--crops core arrow_dense caption for hand-picked named crops.--region-crops all only when you intentionally want every metadata.region_plan crop pair.--include-overlays only for alignment-drift debugging.The reviewer should receive the two images and a concrete issue format. It should report specific visual differences, source appearance, replica appearance, impact on fidelity, focus regions, and the expected visible change after regeneration. Use script output only to package round evidence and to validate/export; the quality decision remains visual.
If using a separate reviewer agent, give it only the source image, the replica image, and the issue format. Do not give it intended fixes, prior conclusions, pair/crop packs, script warnings, similarity scores, or old scene JSON. The reviewer validates visual fidelity; the main agent turns that into a fresh scene rebuild.
Use the fixed reviewer prompt in references/reviewer-two-image-prompt.md.
Do not stop at natural-language review notes. In strict work, the review loop must produce:
review_manifest.json from make_review_assets.py --write-review-bundlereview_findings.json from the visual reviewerscene_rebuild_brief.json from review_findings_to_repair_plan.pyprepare_regeneration_packet.pyround_noop_gate.pyreview_findings.json should contain both defect findings and the review checklists used to find them. At minimum, include:
topology_checklist: visible source topology facts, each with an id, focus region, source fact, replica status, and pass/fail/uncertain status.visual_checklist: local layout/style facts, each with an id, focus region, source expectation, replica status, and pass/fail/uncertain status.checklist_refs for failed checklist items when applicable.Use uncertain instead of inventing facts when a source crop is unclear. Ask for a higher-resolution source or user confirmation only when the uncertain item affects topology or final fidelity.
After writing review_findings.json, run the checklist gate before generating the rebuild brief:
python ${SKILL_DIR}\scripts\review_checklist_gate.py `
<review_findings.json> `
--manifest <review_manifest.json> `
--require-failed-refs `
--output-report <review_checklist_gate.json>Then generate the rebuild brief with checklist enforcement:
python ${SKILL_DIR}\scripts\review_findings_to_repair_plan.py `
<review_findings.json> `
--scene <prior.scene.json> `
--manifest <review_manifest.json> `
--require-checklists `
--output <scene_rebuild_brief.json>If either command fails, fix the review findings/checklists instead of continuing with regeneration.
For arrow-dense regions, the review checklist must be per-arrow, not only per-region. Include one checklist item per arrow_plan_id, such as:
[ ] A101 K_w -> qk_mul matches source[ ] A102 Q_a -> qk_mul matches source[ ] A103 qk_mul -> score grid matches source[ ] A104 V_w -> value_mul matches source[ ] A105 score grid -> value_mul matches source[ ] A106 value_mul -> value grid matches source[ ] A107 value grid -> Concat matches sourceBlocking review findings should name the exact arrow id and mismatch class: unbound_source_arrows, multi_edge_plan_misuse, source_anchor_mismatch, route_shape_mismatch, or motif_rule_violation.
The no-op gate is mandatory when claiming a new round improved the scene. It fails when:
If you have a scene_rebuild_brief.json, pass it into round_noop_gate.py --rebuild-brief ... so the report keeps the focus-region and likely-scene-id evidence for that round.
Use references/review-contract.md for the structured review format and references/renderer-effective-fields.json for the current renderer-effective-field whitelist. During reauthoring, do not claim progress from notes, region-plan edits, review assets, or metadata changes alone.
Use the fixed regeneration prompt in references/full-scene-regeneration-prompt.md when authoring the next full scene after a failed review.
Use scripts/prepare_regeneration_packet.py to turn scene_rebuild_brief.json into a round-specific handoff packet and prompt file before the next LLM full-scene regeneration pass.
If the packet step cannot recover both reviewer image paths, stop and fix the review bundle instead of continuing with an incomplete rebuild handoff.
When several visual reviews say the replica looks like a semantic redraw instead of a source-faithful figure, stop component-level polishing and recalibrate the scene:
metadata.region_plan and on region nodes with source_bbox_px / source_aspect_ratioDo not replace this loop with a student/expert mode, whole-image template selector, or automatic template matching system. Reusable templates and examples are syntax references or first-pass seeds only; every high-fidelity result must still come from source-image visual analysis, source-pixel scene authoring, rendered PNG review, and visual reviewer findings.
For repeated internal layer modules, choose the visual grammar from the source crop before rendering:
layer_sequence with block_style_mode: "colored_paper_strip" and source-matched block_fills.block_fill_policy: "preserve" or preserve_block_fills: true; never leave ignore_block_fills: true on a colored sequence.Keep scene authoring and scene reauthoring separate:
After review, do not patch the prior scene when the finding says the region is semantically wrong or the topology/component grammar changed; rebuild that scene or local subsystem from the source and findings. For narrow checklist failures after the topology is already correct, a small targeted repair is acceptable, but it still must be backed by the same local source crop, updated review findings/checklist status, and a no-op gate. The prior scene may be read as failure evidence, but it must not override source-image facts.
block_style_mode: "paper_vertical_strip" and set block_fill_policy: "white" if old block_fills remain in the scene.block_style_mode: "paper_vertical_cuboid" or white_3d; do not convert them to colored strips just because block_fills exists.density_mode: "source_dense" (or dense: true) after the region bbox is locked; do not enlarge the whole module to hide text/arrow problems.layer_sequence.frame_visible: false instead of drawing a second inner frame.draw_internal_arrows: true rather than scattering loose edge fragments.If visual review reports text wrapping in operators, formulas, CJK labels, or rotated layer labels, treat it as a renderer/schema or scene-box defect. Do not enlarge the whole module to hide the wrap; fix the text box policy, math/operator component, local font scale, or source-coordinate label box.
Use math_text for hat variables such as f̂, concat_operator for visible [] concat brackets, and brace_merge for curly many-to-one merge braces. Do not model these as loose text glyphs or generic rectangles when the source shows a semantic operator/merge mark.
For compact math labels with word-like subscripts such as a_RGB, P_SAR, q_hrrp, f_fused, or S_i, prefer math_text / math_vector with fragment subscript rendering when the subscript contains uppercase or multi-letter tokens. Compact Unicode is only safe for digits and true Unicode subscript letters; do not render RGB, SAR, IR, or fused with superscript-looking fallback glyphs. If visual review reports letters scattered vertically, split into fuse d, or raised like superscripts, treat that as renderer/schema debt and fix the component or local text box before coordinate polishing.
For tensor-like feature maps, decide from the crop whether the source is a thick 3D cuboid stack, thin front-sheet stack, slanted-sheet stack, or oblique slab stack. Use tensor_stack.stack_render_mode: "thin_feature_slabs" for source crops with many narrow feature sheets and light perspective; use feature_cuboids only when the crop clearly shows thick black-edged cuboid blocks. A repeated review complaint that tensors look flat or too blocky is a component-mode error, not a coordinate issue.
For final concat marks, use concat_operator with glyph_mode: "source_bracket" when the source shows a compact heavy [] bracket. Use operator_node only for circular or text operators; a small bracket-like fusion symbol should not become a white rectangle or oversized Concat box.
For Top-k/probability panels, use probability_bar_list with bar_value_label and bar_value_anchor: "bar_area", "row", or "after_bar" based on the source crop. If bars run through the row text, reduce bar_max_fraction or move labels to after_bar; do not position row text as loose overlays or push it into bars with offsets unless the source visibly does that.
In strict replica mode, do not leave panel internals on defaults. Record padding, axis position, bar start, row alignments, baseline offsets, and explicit shadow presence or null.
When a defect is reported, classify it before editing:
Use one repair order for exact replicas:
If a local subsystem is still wrong after two micro-adjustment rounds, stop nudging coordinates and rebuild that local subsystem with the correct component or renderer rule.
Treat these as blocking defects in strict replica mode:
For cross-module flow, do not connect large modules center-to-center by default. Use boundary ports, buses, trunks, junctions, or explicit side anchors. For math-like text, do not keep it on plain text_block just because the font looks close enough; use math_text, formula_text_block, or run-based math fragments.
For environment encoders and other tapered paper modules, use dual_wing_encoder with shape_mode: "opposing_trapezoids" or custom_polygon when the source is pinched/notched rather than a full-height three-part block. For brace aggregation near plus/sum nodes, use brace_merge with brace_shape: "tight_curly" and waist_width_in instead of a generic wavy brace when the source has a tight waist.
Version 1 intentionally uses a small controlled vocabulary instead of trying to expose all Visio masters.
Supported node families:
page_backgroundprocess_boxrounded_processstacked_processstacked_tokennotched_blockfeature_map_bandedfeature_map_gridmerge_busdecision_diamondterminatorgroup_containerdashed_regionloss_regionaudit_regiontext_pillellipse_nodepolygon_nodetrapezoid_nodecuboid_nodetensor_stackmodality_spinemath_vectormath_textfeature_vector_stacktfr_paneloperator_nodemulti_port_junctionconcat_operatorbrace_mergeboundary_portboundary_fanoutwave_signalclassifier_headlayer_sequencetext_blockcaption_blockgrid_matrixtoken_gridbracketjunction_pointimage_tilelegend_blockSupported edge families:
arrow_connectordynamic_connectorlane_arrowcurved_arrowloop_arrowdashed_feedback_pathline_segmentjoin_connectorfork_connectorboundary_arrowresidual_connectorresidual_loopWhy this matters:
scene.json stablescene.json in top-left page space; let the renderer convert to Visio coordinates.route and explicit points; do not rely on diagonal lines unless the source really uses diagonals.text_block with angle_deg instead of rotating text inside a process shape.grid_matrix; do not manually author each square.], [, U, and inverted U, use bracket; do not fake them with ultra-thin process boxes.junction_point at the merge/fan location, connect sources to the junction, then connect the junction to the destination.group_container. Containers frame regions only; use a nearby junction_point or explicit node on the border when a callout line is needed.tick_positions: [0, 0.5, 1]; a plain two-arm bracket is not enough for modality merge symbols.junction_point nodes with role: boundary_anchor; set allow_cross_container: true only on the short bridge between anchors.hv, vh, or explicit aligned points. A connector must not cross through a non-endpoint node.
15a. When an exact paper-flow route has explicit points but still renders slightly diagonal, set orthogonalize_points: true or add the missing elbow point. Do not use allow_diagonal: true unless the source visibly has a diagonal callout/fan line.scene_validate.py after authoring. Treat route-quality warnings as defects, not cosmetic suggestions, before rendering through Visio.stacked_process; do not author each visible layer as an independent process node unless each layer is a real semantic node.align_to_container or align_group; do not rely on eyeballed y values.line_segment with from_point/to_point. Do not force those lines to terminate on a component just because Visio can connect to shapes.metadata.fidelity: "exact" and include metadata.source_image or metadata.source_aspect_ratio. Do not deliver only because validation passes; compare the rendered PNG against the source and revise until proportions, module positions, special shapes, and connector semantics match.grid_matrix, line_segment, point endpoints, or isolated small raster assets when editability is less important than faithful local appearance.page.units: "px", page.width, page.height, and page.target_width_in; the renderer will normalize nodes and edge points to inches.notched_block for CNN or cutout modules, feature_map_banded for simple striped/columnar feature maps, feature_map_grid for AM-ResNet/heatmap-like feature maps with colored rows and shaded columns, merge_bus for visible bus/spine merges, and residual_connector for residual or skip loops.scripts/enumerate_visio_masters.py only to research local Visio master names. Do not hard-code a large master catalog into scenes; local Office language and stencil availability vary.operator_node for +/x/tensor operators, boundary_port for frame entry/exit anchors, boundary_fanout for arrows emitted from a dashed frame boundary, wave_signal for waveform inputs, classifier_head for AvgPool/Linear blocks, join_connector for source-to-merge legs, and fork_connector for fan-out branches.boundary_port on the frame boundary, connect internal flow to that port, then use a short bridge segment or connector to the next module.classifier_head internal fan-out when the source shows output arrows starting on the container boundary. Set classifier_head.output_mode: "boundary" or omit fanout_count, then draw those branches with boundary_fanout.AvgPool -> Linear, use classifier_head.orientation: "vertical" with internal_arrow_size: "tiny", or set arrow_size: "small" on a normal edge. A default Visio arrowhead can consume very short line segments and appear as a head-only triangle.operator_node with symbol instead of an ellipse_node plus separate text. The renderer centers +, ×, and ⊗ inside the circle.feature_map:left@0.58 to preserve a horizontal lane. Do not accept a diagonal center-to-center edge unless the source truly shows a diagonal.boundary_arrow from a boundary_port and do not draw an internal line_segment from the last component to the frame. Component-to-frame-to-component long lines are usually wrong unless visibly present in the source.route: "horizontal" or route: "vertical" when the source line is straight. Reserve diagonal arrows for fan-in/fan-out, callouts, or explicit source diagonals.scripts/scene_audit.py and review the generated checklist by module before delivery. The goal is to catch plausible-looking but wrong details: missing dashed frames, wrong child counts, hidden cross-frame arrows, misplaced operators, and incorrect boundary outputs.audit_region nodes around logical areas such as residual block, attention block, classifier head, and feature extraction chain. These regions do not render but make scene_audit.py review the figure module-by-module.image_tile input, text_pill or process_box availability flag, modality_spine shared vertical bus, and explicit horizontal connectors into the fusion module.modality_spine for vertical gray shared-response or availability-mask bars with repeated P_RGB/P_IR/P_SAR side ports. Do not model the bar as a plain rectangle plus unrelated tiny boxes unless each port has separate topology.cuboid_node for editable 3D paper blocks such as modality-related impact factors, stacked feature tensors, and small blue/orange depth blocks. Use feature_map_grid only when the visible face is a grid or heatmap.trapezoid_node for quality heads, extractor heads, aggregation modules, and other wedge/trapezoid paper blocks. Set orientation and pointed so the narrow side or tip matches the source direction.polygon_node only when the shape cannot be expressed by trapezoid_node, cuboid_node, notched_block, or another semantic primitive. Include normalized points when authoring in source-pixel scenes.q = [q_RGB, q_IR, q_SAR]^T, use math_vector instead of a plain multi-line text_block. This keeps brackets, entries, and the optional prefix aligned as editable shapes/text. Do not make formula labels connector endpoints.
40a. For small variables and formula labels such as g_tf, g_hrrp, f_fused, P_RGB, q_IR, s1, f1, or L_adv, use math_text with math_render_mode: "fragments" and text_fit: "math_label" when the subscript has uppercase or word-like tokens. compact_unicode is allowed only for digit or true-subscript lowercase labels that visually match the source. Never leave them as raw text that Visio can wrap into g_ / tf, f_fu / sed, or superscript-like RGB.audit_region nodes for every titled panel even when the visible frame is drawn with group_container; this lets scene_audit.py review inputs, outputs, and cross-panel arrows panel by panel.metadata.region_strategy: "region_first" or "tiled_subscenes" before rendering. Also add metadata.region_plan entries for global/input/core/output/arrow-dense/small-text/boundary areas, each with source_bbox_px and a target bbox/container. If the figure is too complex to reason about at full-page scale, author each region as a local subscene, validate it, then copy the region nodes into the full scene with the same style tokens.scene_validate.py reports same-type font spread, normalize the style before rendering.scene_complexity.py before full-page Visio output whenever the scene has roughly 30+ visible nodes, 35+ edges, or a very wide aspect ratio. Treat text-fit, overlap, uncovered-node, and dense-region warnings as actionable defects.audit_region areas such as input stack, feature extractor, fusion, classifier, and output head.align_group, align_to_container, explicit container_id, and side-ratio endpoints; then tune final positions.lane_arrow with route: "horizontal" or "vertical". Do not use arrow_connector with route: "straight" and allow_diagonal: true to hide small endpoint y/x mismatches.straight edges whose endpoints are almost but not exactly aligned. Convert them to lane_arrow, force the route axis, or align from_point/to_point exactly.
50a. When the source connector is axis-aligned but its 90-degree bends are visibly rounded, use rounded_orthogonal_connector with route: "rounded_orthogonal", orthogonalize_points: true, and an explicit corner_radius_px/corner_radius_in. Do not use smooth/Catmull-Rom curves for this case; smooth curves change the straight lane geometry and often create waves or endpoint drift.Quality Head, Environment Response extractor, and Aggregation Quality-aware, prefer editable trapezoid_node/polygon_node unless the user explicitly accepts a small raster tile for speed. Raster tiles should be recorded as a fidelity/speed tradeoff.loop_arrow or curved_arrow with sampled points and an explicit end_tangent_point near the arrowhead. Do not split the loop into several line_segment arcs plus detached short arrowheads; that causes visible breaks and wrong tangent direction.Forward Reconstruction -> Discriminator Evaluation, use dashed_region with separate text_block labels. Do not use an empty dashed process_box as a fake frame.dashed_feedback_path with explicit orthogonal points. Do not set allow_diagonal: true on loss/backprop arrows just to suppress warnings.allow_cross_container: true and explicit points. If the source arrow starts at the frame edge, add a boundary_port instead of connecting from the region center.scene_audit.py --fail-on-rebuild reports [REBUILD], do not spend another iteration moving boxes or text. Replace the wrong local grammar first; only after the rebuild gate passes should you tune positions.[REBUILD] item appears after one attempted fix, discard that local subsystem and redraw it from a minimal local scene. This is mandatory for outer loops, dashed feedback paths, and dashed annotation frames.page_background as the bottom node. Do not use a fake process_box background, because it pollutes route intersection checks and audit output.arrow_connector, and no dashed feedback path crossing text labels.Discriminator -> Generated, treat it as reversed unless the source explicitly marks it as discriminator output.loop_arrow with curve_mode: "smooth", enough sampled points, semantic_role: "outer_update_loop", and a label_id/loop_label_id tied to the update label. Otherwise the loop reads like a decorative border.dashed_feedback_path should leave a dashed_region/loss_region from a boundary point or boundary_port; do not draw extra horizontal/vertical stubs through the region interior.merge_bus/junction_point and bundle_id rather than several unrelated vertical arrows.L_adv and L_rec, use math_text instead of raw underscore text_block strings. Raw underscores are a rebuild defect in exact paper-figure replicas.tfr_panel as the first-pass component. Do not split the panel into a rounded box, title labels, grid, input label, and a separate internal arrow unless there is a source-specific reason.scene_audit.py --fail-on-rebuild and fix every [REBUILD] item before visual tuning.--template gan-tfr only for draft/bootstrap authoring. Do not treat a template-seeded scene as valid strict-replica capability evidence.scene_autofix.py --recipe gan-tfr once. If the recipe rewrites local grammar, validate and audit the fixed scene instead of continuing from the old file. For strict/exact work, do not rely on implicit render-time autofix; use --autofix-gan-tfr only as an explicit helper path and then re-author a fresh strict scene from source inventory.loss_region for the dashed adversarial/evaluation area when the title and formulas belong to one local subsystem. Use dashed_region only when the frame has no formula semantics or the source requires separate child nodes.loss_region and its target block overlap horizontally, route feedback as short vertical boundary stubs into target:top@ratio or target:bottom@ratio. Do not connect from loss-frame corners to target:left/right; that usually creates the false "dashed box plus extra arrow" artifact.end_tangent_point, sampled points, or local loop subsystem) before nudging unrelated nodes. The arrowhead tangent is part of the component grammar, not a final polish detail.Ladv, Lrec, L adv, and L rec should be converted to L_adv / L_rec or explicit math_text fragments before export.loss_region titles, prefer title_position: "inside" or a header-cutout layout. Do not let the dashed frame cross a long title; split the title line or widen the region first.scene_to_visio.py as a blind final step. Run the rebuild gate first, or let the renderer's built-in gate stop the export when [REBUILD] items remain.dashed_feedback_path or a bus/port route instead of preserving the fragment.metadata.arrow_plan from source-image visual inspection. Then bind each source-visible edge with arrow_plan_id; run scene_validate.py --strict before rendering so missing arrows, diagonal drift, wrong boundary endpoints, fragmented feedback paths, and broken loop arrows fail early.
76a. Do a typography pass for exact replicas. Identify whether the source uses serif, sans, math, mono, CJK, or mixed typography before finalizing nodes; do not let every text node inherit a generic default by accident.font_family_candidates and font_role instead of a single fragile font name when exact family matching is uncertain. The renderer resolves to the first installed close match.source_font_family as well as font_family/font_family_candidates. This lets audit catch the case where the font exists locally but the scene still renders with the wrong family.scripts/font_inventory.py when a figure appears to use Calibri/Aptos/Arial/Times/Cambria/Chinese fonts. A missing source font should lead to a candidate list; an installed source font should be used directly.Cambria Math, Cambria, or Times New Roman depending on source style. Do not render +, ×, ⊗, or subscript formulas with a random UI font unless the source visibly does.font_role: "cjk_sans" or cjk_serif; otherwise Visio may silently substitute glyphs and shift text metrics.Typography Review section in scene_audit.py output before coordinate polishing. Font fallbacks can change text width and make a previously aligned layout look wrong.tensor_stack instead of many separate cuboid_node shapes. Use stack_render_mode: "slanted_sheets"/paper_sheets for thin parallelogram station/output features, oblique_slabs for heavier 3D slabs, and thin_sheets for flat front-face stacks. Tune layers, layer_dx_in, layer_dy_in, depth_x_in, depth_y_in, and skew_x_in to match the visual stack while keeping it one semantic tensor node.token_grid. If the source cells are square, set square_cells: true and anchor with grid_align_x/grid_align_y instead of stretching cells to fill the bbox. Use grid_matrix only for contiguous shared-line matrices without per-cell text. Do not model padded prefix batches or top-k probability rows as dozens of unrelated process_box nodes.layer_sequence with orientation: "horizontal" or "horizontal_bars". If the source layer bars are tall 2D rounded white strips, use block_style_mode: "paper_vertical_strip"; use 3D/cuboid modes only when the source visibly has top/side faces. Use classifier_head only when the source shows classifier-specific internal arrows or fan-out; otherwise layer_sequence preserves the visual layer grammar with less scene drift.
85a. For containers whose internals are stacked horizontal rounded rows, such as LocalEchoGRU or shallow backbone layers, use layer_sequence with orientation: "vertical_stack" and block_text_angle_deg: 0. Do not represent these as side-by-side vertical bars.
85b. For compact source vectors, availability flags, small modality rows, and thin token stacks, use feature_vector_stack or token_grid with source-bound cell count and spacing. Do not approximate these as one large process box if individual cells or ports are visible in the crop.
85c. For many-to-one or one-to-many paper junctions where several arrows share a visible spine, use multi_port_junction, merge_bus, or explicit junction_point ports. Use explicit dict ports with length_in: 0 when the source has no visible ticks; this prevents stray short stubs at fusion/brace boundaries. Do not let long sparse arrows jump across modules without a bus, junction, boundary port, or region-plan justification.
85d. For probability panels, keep probability_bar_list as the semantic unit and tune bar_max_fraction, bar_value_anchor, and row widths after crop review. A pass where the blue bars visibly cross the text is not visually acceptable.
85e. For figure captions, page headers, and labels with mixed bold/regular text, use caption_block with ordered runs. Do not collapse them into one untyped text block when the source styling is visually important.tensor_stack, token_grid, and layer_sequence local dimensions in source-pixel units as well. The renderer scales these fields with the page; mixing pixel node positions with inch-sized internal gaps causes visible local distortion.GELU, LayerNorm, CJK labels, or subscript variables are blocking/important visual defects even if validate/audit passes. Fix with role-specific fonts, text_fit, smaller local font scales, or math_text; do not hide the problem by enlarging the whole module.f_tf, g_hrrp, f_fused, and S_i, use math_text or math_label_box so only the visible variable is the base and the rest is subscript. If visual review reports f_t^f-like rendering, split letters, or fuse d spacing, classify it as formula rendering failure.references/scene-schema.md: scene.json fields and coordinate rulesreferences/visio-component-map.md: supported components and renderer intentreferences/visio-export-flow.md: Windows + Visio export path and current limitationstemplates/style_profiles.json: paper_white and clean_white rendering profilestemplates/examples/basic_flow.scene.json: starter exampletemplates/examples/multimodal_paper_components.scene.json: smoke example for multimodal spines, cuboids, trapezoids, and polygonstemplates/examples/gan_loop_feedback.scene.json: smoke example for smooth loop arrows, dashed regions, and dashed feedback pathstemplates/examples/gan_tfr_full.scene.json: canonical first-pass GAN/TFR template using tfr_panel, loss_region, math_text, smooth loop_arrow, and bundled backprop arrowsscripts/scene_complexity.py: preflight report for large/dense figures before Visio renderingscripts/font_inventory.py: local Windows font inventory and preferred role fallback checkscripts/stage_source_image.py: copies a source image into source/original.<ext> and records hashes for stable strict review manifestsscripts/review_checklist_gate.py: validates topology_checklist, visual_checklist, local source-image paths, and checklist_refs before rebuild planningscripts/scene_autofix.py: deterministic GAN/TFR local grammar upgrade pass before Visio renderingdocs/updates/2026-05-19-multimodal-paper-figure.md: detailed analysis of a complex multimodal paper figure and the related component upgradeVersion 1 is deliberately conservative:
That is the right tradeoff for a reusable first release.
© Rss3208, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 68 other files (scripts, references) in the repository root of Rss3208/Visiomaster.
Open the folder on GitHubat commit 0d49002
Visiomaster next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Visiomaster this skillRss3208/Visiomaster | 819 | — | ~15k | Automated safety check: Pass | MIT | |
| Code Graph Mermaid Diagramstrailofbits/skills | 7.4k | 1 repos | ~1.7k | Automated safety check: Pass | CC-BY-SA-4.0 | |
| Senior Architect Toolkitmaslennikov-ig/claude-code-orchestrator-kit | 260 | 8 repos | ~1.2k | Automated safety check: Notes | Custom licence | |
| Code To Diagramzebbern/claude-code-guide | 4.7k | 1 repos | ~972 | Automated safety check: Pass | MIT | |
| Design Doc MermaidSpillwaveSolutions/design-doc-mermaid | 175 | 1 repos | ~5.6k | Automated safety check: Pass | None | |
| Archscribelazypay/Archscribe | 358 | — | ~1.9k | Automated safety check: Pass | MIT |
trailofbits/skills
Generates Mermaid diagrams from Trailmark code graphs, including call graphs, class hierarchies, module dependency maps, complexity heatmaps and attack surface data flows.
maslennikov-ig/claude-code-orchestrator-kit
Comprehensive software architecture skill for designing scalable, maintainable systems using ReactJS, NextJS, NodeJS, Express, React Native, Swift, Kotlin…
zebbern/claude-code-guide
Analyze codebases and automatically generate architecture diagrams, flowcharts, and org charts.
SpillwaveSolutions/design-doc-mermaid
Create Mermaid diagrams (flowchart, sequence, class, ER, state, C4, architecture) from text or source code.
lazypay/Archscribe
Create premium hand-drawn architecture, workflow, and swimlane diagrams in a dark neon or light paper style, with editable Excalidraw sources, PNG/SVG previews, animated GIF/MP4 output, and…
Will-hxw/drawio-diagram-builder
Create, edit, replicate, and iteratively refine editable research and technical diagrams in diagrams.net/draw.io (.drawio XML) from prompts, papers, repositories, screenshots, or existing diagrams.
Works with
Categories
Windows-first Visio diagram reconstruction workflow for flowcharts, architecture diagrams, and paper-style module figures. Visiomaster is an agent skill from Rss3208/Visiomaster. Windows-first Visio diagram reconstruction workflow for flowcharts, architecture diagrams, and paper-style module figures.
Visiomaster fits situations like: the user wants a diagram recreated as editable Visio shapes instead of a pasted screenshot; PPT-only result.
Run `npx skills add Rss3208/Visiomaster --skill visiomaster -a claude-code`. Or copy the skill folder (the Rss3208/Visiomaster repository) into .claude/skills/visiomaster in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Rss3208/Visiomaster --skill visiomaster -a codex`. Or copy the skill folder (the Rss3208/Visiomaster repository) into .agents/skills/visiomaster in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Rss3208/Visiomaster --skill visiomaster -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/visiomaster, .gemini/skills/visiomaster, .github/skills/visiomaster and .opencode/skills/visiomaster in your project.
Going by SKILL.md and its folder, Visiomaster needs the command-line tools its instructions call (python). Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Visiomaster is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.
About 15k tokens (SKILL.md is roughly 61k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 33k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Visiomaster: Code Graph Mermaid Diagrams (trailofbits/skills, 7.4k stars), Senior Architect Toolkit (maslennikov-ig/claude-code-orchestrator-kit, 260 stars), Code To Diagram (zebbern/claude-code-guide, 4.7k stars) and Design Doc Mermaid (SpillwaveSolutions/design-doc-mermaid, 175 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Rss3208 (a GitHub user) maintains it in Rss3208/Visiomaster, which has 819 GitHub stars. The repository was last updated on September 14, 2026.
Source: Rss3208/Visiomaster on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.