feat: add --3d flag for 3D HTML visualization#225
Open
pedrolbacelar wants to merge 55 commits into
Open
Conversation
* fix: git hooks fail when graphify is installed via pipx When installed via pipx, the graphify module is only available in pipx's isolated venv, not the system python3. The git hooks (post-commit, post-checkout) hardcoded `python3` which cannot import graphify in this case. Detect the correct Python interpreter from the graphify binary's shebang line, matching the approach already used in skill.md Step 1. Falls back to python3 for system installs. * fix: handle env-style shebangs and improve interpreter detection - Use POSIX `command -v` instead of non-standard `which` - Parse `#!/usr/bin/env python3` shebangs correctly (previous `tr -d ' '` would produce `/usr/bin/envpython3`) - Add import validation fallback to python3 if resolved interpreter cannot import graphify
… buffer * fix: suppress graspologic ANSI output that breaks PowerShell scrolling graspologic's leiden() emits ANSI escape sequences (progress bars, colored warnings) that corrupt PowerShell 5.1's scroll buffer on Windows, disabling vertical scrolling. Redirect stdout/stderr to StringIO during leiden() calls to prevent any escape codes from reaching the terminal. Add 2 tests verifying cluster() produces no stdout/stderr output. Fixes Graphify-Labs#19 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: add PowerShell troubleshooting section to Windows skill Document the PowerShell 5.1 scrolling issue and provide 4 workarounds: upgrade graphify, use Windows Terminal, reset terminal, or uninstall graspologic to use Louvain fallback. Fixes Graphify-Labs#19 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
- Register 'trae' and 'trae-cn' in _PLATFORM_CONFIG (skill-trae.md, ~/.trae/skills/ and ~/.trae-cn/skills/, claude_md=False) - Add CLI subcommands: graphify trae install/uninstall, graphify trae-cn install/uninstall (routes to _agents_install/uninstall) - Update help text with new platform entries - Create skill-trae.md (Agent-tool based extraction, AGENTS.md integration, no PreToolUse hook support per Trae limitations) - Update README.md and README.zh-CN.md with Trae platform docs Co-authored-by: lijinshuan <lijinshuan@bytedance.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…utput Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ean README, save-result CLI
…y-Labs#109: extension drift, click detection, skill coverage, .graphify_python persistence Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…-Labs#93 Graphify-Labs#102 Graphify-Labs#109) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ify-Labs#126) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Graphify-Labs#71) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…e relations in innerHTML (#sec) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…y-Labs#127) Tree-sitter resolves call targets directly from source — marking them INFERRED was incorrect. Cross-file class-level uses edges remain INFERRED. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…AST calls Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…Windows git hooks (Graphify-Labs#140) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…sh (Graphify-Labs#137, Graphify-Labs#148, Graphify-Labs#149) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…hify-Labs#105) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…he, graphifyignore parent discovery, MCP fixes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…sor, Gemini in CLI section
…cription Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…port Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nstall Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…attribute Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…r prompt itself Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ort.py, bound collision loop Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…aceholder Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Graphify-Labs#195: skill.md requires general-purpose subagent type for extraction dispatch Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add to_html_3d() function that generates an interactive 3D WebGL visualization as an alternative to the existing 2D vis.js output. Uses 3d-force-graph (MIT, CDN-loaded) for rendering. No new Python dependencies, no build step — produces a single self-contained HTML file like the existing to_html(). Features: - 3D force-directed layout with orbit camera controls - Nodes colored by community, sized by degree - Edge colors differentiated by direction (red=outgoing, blue=incoming) - Directional particles with matching colors on active edges - Distance-based HTML overlay labels (max 25 visible, degree-weighted) - Click to select node: highlights neighbors, dims rest, shows info - ESC to deselect, middle mouse to orbit (same as left-click drag) - Collapsible sidebar: search, node info, community checkboxes - Settings panel (bottom-left gear): hover highlight, show/hide edges, show/hide labels toggles - Help hints bar with keyboard/mouse controls Ref: Graphify-Labs#219
DDBCDVD
added a commit
to DDBCDVD/graphify
that referenced
this pull request
Jul 24, 2026
Adds a WebGL counterpart to `graphify tree`. Where the flat graph.html (vis-network) lays the graph out undirected with no arrowheads, graph3d renders it as a rotatable 3D force graph and draws edge direction (source -> target) as arrows, so calls/imports/inherits read directionally. - new graphify/graph3d_html.py: build_graph3d_data + write_graph3d_html; 3d-force-graph (MIT) loaded from CDN like tree_html loads D3; data embedded inline (opens over file://); node labels HTML-escaped at render time - new `graph3d` subcommand in cli.py mirroring `tree` (--graph/--output/--label) - shares COMMUNITY_COLORS and the graph-size cap with the existing exporters - tests/test_graph3d_html.py: data shaping, XSS escaping, CLI end-to-end A minimal, focused alternative to the stalled Graphify-Labs#225 (which spread the feature across 42 files against the older v4 branch). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a
to_html_3d()function tographify/export.pythat generates an interactive 3D WebGL visualization using 3d-force-graph (MIT license, loaded via CDN). This is an alternative to the existing 2D vis.js output — the 2Dto_html()is untouched.to_html_3d(G, communities, output_path, community_labels)mirrorsto_html()Follows up on the discussion in #219.
Features
How to use
Changes
graphify/export.py— 625 lines added (new function + CSS/JS helpers), 0 lines modified in existing codeTest plan
test_export.pytests pass