{"id":15511079,"url":"https://github.com/notlibrary/obsidian-adamantine-pick","last_synced_at":"2026-04-04T08:01:42.638Z","repository":{"id":65518123,"uuid":"593803551","full_name":"notlibrary/obsidian-adamantine-pick","owner":"notlibrary","description":"Embeddable Pikchr(https://pikchr.org) diagrams renderer plugin for Obsidian(https://obsidian.md)","archived":false,"fork":false,"pushed_at":"2025-06-29T13:58:18.000Z","size":464,"stargazers_count":33,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-20T10:40:42.697Z","etag":null,"topics":["diagramming","obsidian-md","obsidian-plugin","pikchr"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"0bsd","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/notlibrary.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-01-26T21:46:24.000Z","updated_at":"2025-10-13T19:18:18.000Z","dependencies_parsed_at":"2025-03-21T07:27:50.774Z","dependency_job_id":"f5f02c6c-b583-470d-9fd0-8e929f7fbfbc","html_url":"https://github.com/notlibrary/obsidian-adamantine-pick","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":"obsidianmd/obsidian-sample-plugin","purl":"pkg:github/notlibrary/obsidian-adamantine-pick","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notlibrary%2Fobsidian-adamantine-pick","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notlibrary%2Fobsidian-adamantine-pick/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notlibrary%2Fobsidian-adamantine-pick/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notlibrary%2Fobsidian-adamantine-pick/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/notlibrary","download_url":"https://codeload.github.com/notlibrary/obsidian-adamantine-pick/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/notlibrary%2Fobsidian-adamantine-pick/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31392188,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T04:26:24.776Z","status":"ssl_error","status_checked_at":"2026-04-04T04:23:34.147Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["diagramming","obsidian-md","obsidian-plugin","pikchr"],"created_at":"2024-10-02T09:52:49.592Z","updated_at":"2026-04-04T08:01:42.595Z","avatar_url":"https://github.com/notlibrary.png","language":"C","funding_links":[],"categories":["C"],"sub_categories":[],"readme":"![GitHub release (latest by date including pre-releases)](https://img.shields.io/github/v/release/notlibrary/obsidian-adamantine-pick?style=for-the-badge\u0026sort=semver)\n![GitHub all releases](https://img.shields.io/github/downloads/notlibrary/obsidian-adamantine-pick/total?style=for-the-badge)\n\n# Adamantine Pick\n\nEmbeddable [Pikchr](https://pikchr.org) diagrams renderer plugin for\n[Obsidian](https://obsidian.md). Outputs end-user diagram to viewable SVG inside\nObsidian note out of the box client side offline without need to compile install \nPikchr itself\n\n## Demo\n\n![adamantine_pick_demo](https://github.com/notlibrary/obsidian-adamantine-pick/assets/40695473/b4bab068-6666-41a6-9c82-cda570ef7497)\n\nUse note with 3-backticks(tildes) fenced code block marked `pikchr` to get SVG in\n\n\t```pikchr\n\tbox \"What are we going to do today\" \"Second Brain?\" fit \n\tarrow\n\tbox \"The same thing we do everyday\" \"To take over the World!\" fit\n\t```\n\n\u003e ...quick pikchr diagram in one of this text notes maybe(or not) \n\u003e extremely useful for anyone out there\n\nUse `adamantine` class attribute selector to manipulate it from code\n\n\u003e GPT-4 parrot #39402817203 pikchr random space station map adamantine diagram note\n\u003e and fix 9000 oval in it\n\nSee? \"Absurd nerd value\" for 3 pages free wrapper script(plugin)  \n\n![adamantine_note_sample](https://github.com/notlibrary/obsidian-adamantine-pick/assets/40695473/82085fce-46fc-4bed-b14a-e8e7d9eb5cab)\n\nResistor color table calc? Sure \n\n![resistor_calculator_sample](https://github.com/notlibrary/obsidian-adamantine-pick/assets/40695473/e1acb1fe-f8bb-4884-8af3-3d0461c6d6de)\n\nAnd my favourite sample so far recursive diagram see `src/pikchr.pikchr` file\n\n![recursive_sample](https://github.com/notlibrary/obsidian-adamantine-pick/assets/40695473/111564d9-4f19-4bf4-8146-c346565222e3)\n\n\n## Installation\n\nBecause `pikchr.c` precompiled with emcc installing this plugin allows user to\nmarkup diagrams directly from client without installing compiling Pikchr\nitself.  This makes plugin embeddable usable \"out of the box\" \"client-side\"\n\"offline\"\n\nWith user interface\n\n- Ensure Safe mode is **off** \n- Settings \u003e Community plugins \u003e Turn On Community Plugins\n- Click Browse community plugins or just open install URL `obsidian://show-plugin?id=adamantine-pick`\n- Search for \"Adamantine Pick\"\n- Click Install \n- Don't forget to turn it **ON** with the purple slider\n- Settings \u003e Community Plugins \u003e Installed Plugins \u003e Adamantine Pick\n\nManually installing\n\n- Copy over `main.js`, `manifest.json`, `styles.css` to your Vault \n`VaultFolder/.obsidian/plugins/adamantine-pick/`\n\nTest installing\n\n- Paste [this plugin repo link](https://github.com/notlibrary/obsidian-adamantine-pick) into plugin for [testing other plugins](https://github.com/TfTHacker/obsidian42-brat) \n\n## Picking up and Pushing adamantine diagram notes\n\nTo pick up adamantine diagram notes use separate \"Adamantine Pick\" command \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eShift\u003c/kbd\u003e + \u003ckbd\u003eF5\u003c/kbd\u003e\nIf it has internet it will try to fetch(request) JSON `adamantine-diagram-notes.json` with entire notes \ncollection from GitHub plugin release page then check it decode and generate notes in your `VaultFolder/adamantine`\n\nOr you can pick up it manually by copying `src/*.md` files from this plugin repo to your `VaultFolder/adamantine` \nor downloading `adamantine-diagram-notes.zip` from latest [release page](https://github.com/notlibrary/obsidian-adamantine-pick/releases) \nand extracting it to your `VaultFolder/adamantine`\n\nTo push your own adamantine diagram note design into plugin collection use this checklist: \n\n- UTF-8 encoded text file in English(preferably)\n- less equal 4KB(4096 bytes) size that fits in a single HDD block\n- lowercase (a-z) less equal 8 characters unique filename len with extension .md 8 + 2\n- has one or more Pikchr diagrams in it MathJax Markdown optionally\n- fits in a single screen when picked with Obsidian\n- tagged with YAML `--- tag: adamantine ---` and `#adamantine`\n- tight cybersecure has no malicious executable code in it(i.e. Perl one-liners) \n- no ads messing with others personal data(OP self signature is OK)\n- embeddable in place does not rely on cloud internet connection or dynamic linking\n- decodable with stock computer hardware \n- does not repeat existing adamantine diagram notes in collection(also has unique filename)\n- picking it is memorable has some reusability utility cool nerd/hacker value  \n- easy human digestible readable can be shared in place has clear semantics bits of knowledge\n- not necessary a STEM/EE/ME cheatsheet use your own imagination show some effort\n- easy discardable and disposable you constantly want to asswipe with it purple toilet paper\n\nthen [fork this repo](https://github.com/obsidian/adamantine_pick) commit it into `src` folder \nthen make pull request thread and wait for approve\n\nSure requirements are hard to met adamantine diagram notes are rare it's sort of CCG or sticker \nalbum with dinosaurs operating over the popular note-taking app open source vector graphic stack \nwith hope to aid your workflow that's it basically\n\n## Remote gripping adamantine diagram notes\n\nThis is the most hilarious usage case then you virtualize decoder desktop box \n(with Obsidian and plugin installed and note collection picked in it) on the remote \nvirtualization server then share hypervisor virtual machine player over the network \nor remote framebuffer keyboard protocol with your target host screen browser \nor VNC window so you fully observe notes decoded remotely locally  \n\nI tested it with [Neverinstall](https://neverinstall.com/) boxes you can retry it anytime\nIf you are running YouTube channel you can show this trick to your subscribers\n\"Unboxing adamantine diagram notes\" lol anyway it's very hard to achieve truly \nreusable city screens\n\nAnyway you can also use native shell script to fetch decode JSON directly then \n[*preprocess* the Pikchr + Markdown input](https://github.com/zenomt/pikchr-cmd) \nthen convert it to PDF or HTML with [Pandoc](https://pandoc.org/) without touching note taking app \nGUI and plugin system at all\n\nMoreover it can replace Pikchr with some ancient logo turtle interpreter or even\ntypographical forth dialect basically anything that output vectors in computers\nGeneral interest in computer archaeology and dinosaurs is fascinating curious \ninternational paperwork affair Nonetheless it provides excellent tooling for\ndurable lightweight computer documentation Input data inconsistency is a \nfact of life (not advocating that)\n\n## How to build plugin\n\nInstall and activate [emcc](https://emscripten.org) using emsdk\n\n```\ngit clone https://github.com/emscripten-core/emsdk.git\ncd emsdk\n./emsdk install latest\nemsdk activate\n```\n\nClone [this plugin repo](https://github.com/notlibrary/obsidian-adamantine-pick)\nto your Vault into `VaultFolder/.obsidian/plugins/adamantine-pick` folder\n\n```\ncd VaultFolder/.obsidian/plugins\ngit clone https://github.com/notlibrary/obsidian-adamantine-pick adamantine-pick\ncd adamantine-pick\n```\n\nInstall Node.js dev packages\n\t\n```\nnpm install\n```\n\nBuild `pick.js` from `pick.c` wrap to `pikchr.c` artifact\n\t\n```\nnpm run pikchr\n```\n\nThe compiler one-liner is this\n\n```\nemcc src/pick.c -Wall -Wextra -lm -O3 --memory-init-file 0 --closure 1 -sWASM=0 -sMODULARIZE=1 -sEXPORT_NAME=pick -sTOTAL_STACK=131072 -sENVIRONMENT=web -sEXPORTED_FUNCTIONS=_pick,_pick_width,_pick_height,_pick_version -sEXPORTED_RUNTIME_METHODS=ccall,cwrap -o src/pick.js\n```\n\nOr standalone `pick.wasm` it needs some glue code to pass C strings anyway\n\n```\nnpm run pick\n```\n\nThe compiler invocation then\n\n```\nemcc src/pick.c -Wall -Wextra -lm -O3 --no-entry -DNDEBUG --minify=0 -sMODULARIZE=0 -sWASM=1 -sSTANDALONE_WASM=1 -sTOTAL_STACK=131072 -sENVIRONMENT=web -sEXPORTED_FUNCTIONS=_pick,_pick_width,_pick_height,_pick_version,_malloc,_free -o src/pick.wasm\n```\n\nEncode `adamantine-diagram-notes.json` database\n\n```\nnpm run notes\n```\n\nBundle build(and minify) `main.js` from `main.ts` wrapper\n\n```\nnpm run build\n```\n \t\nTo debug wrapper in loop\n\n```\nnpm run dev\n```\n\nBuild server actions workflow is also usable to automate this(and version bump)\n[See emsdk from GitHub actions](https://github.com/mymindstorm/setup-emsdk)\nAlso [read raw action runner logs](https://github.com/notlibrary/obsidian-adamantine-pick/actions) if you find this instructions inconsistent or \nhard to understand\n\n## Pikchr Official Documentation References\n\n- [Manual](https://pikchr.org/home/doc/trunk/doc/userman.md)\n- [Examples](https://pikchr.org/home/doc/trunk/doc/examples.md)\n- [Specification](https://pikchr.org/home/doc/trunk/doc/grammar.md)\n- [Source Artifact](https://pikchr.org/home/artifact/2ee4602ca6)\n\n## CSS SVG postprocessing features\n\nFeasible to further postprocess diagram processor output\nusing builtin CSS rules and SVG parser\nFor example this autogenerated CSS snippet\n\n```css\n/* default id selector for single diagram object is #postproc-diag-42 */\nsvg.adamantine {\n\tfilter: drop-shadow(0 -6mm 4mm rgb(160, 0, 210));\n\tborder-image-slice: 41 42 42 44;\n\tborder-image-width: 42px 42px 42px 42px;\n\tborder-image-outset: 42px 42px 42px 42px;\n\tborder-image-repeat: round round;\n\tborder-image-source: url(\"https://mdn.github.io/css-examples/tools/border-image-generator/border-image-6.svg\");\n\tborder-style: solid; \n}\n```\n\nMakes all diagrams drop purple shadow and borders it with \ngimmick glittering fence like this:\n\n![css_postprocessing_sample](https://github.com/notlibrary/obsidian-adamantine-pick/assets/40695473/c5cf1798-8957-4fc5-a3fc-29432b35ec8d)\n\nI am happy to leave discussion of actual utility of \naforementioned features to the users\nAs for syntax highlighter GitHub editor already has one\n\nAnother nice feature is interacting with core app plugins\nPut the note with callout that embeds named clock diagram\nblock from another note into canvas then open canvas and \npage preview note with callout\n\n![plugin_interaction_sample](https://github.com/notlibrary/obsidian-adamantine-pick/assets/40695473/434b943c-704f-46c9-b70f-e3c9282cb68d)\n\nHere it is have fun\n\n\n## Note\n\nExperimental bloated ugly wrapper but possibility to run it entirely in \njs environment outweighs security drawbacks\n\n- Do not edit `pikchr.c` it's autogenerated from original artifact and \nintended for integrator usage \n- Do not use it for CAD/CAM drawings, marketing presentations, spreadsheet \ncharts, function graphs(plots) and specialized STEM charts\n- Acknowledge original Pikchr developers\n\nDeflated binary size with wrap ~75-100KB(depends on compr algo)\nSo it fits in desktop L2 cache `arrow \u003c-\u003e from A to B chop` together \nwith encoded diagram and even leaves some more free space for others\nCommon output mime-type `image/svg+xml` makes it easy negotiable and \ndecodable anywhere by anyone\n\n*tl, dr:* for those who read it to the end \"BanKan\"\n\n\t```pikchr\n\tbox \"DONE\"; box \"IN\" ; box \"DO\" ; down; move from first box.n\n\n\tDONE: [ box \"Shit\" ] ; right \n\tIN: box \"Random\"\n\tDO: box \"Task 1\" \"Task 2\" \"Task 3\"\n\t```\n\nand clock diagrams\n \n\t```pikchr\n\tgmt = 0\n\thours =  time / 3600 + gmt\n\tmins = time / 60\n\tcircle rad 0.5\n\tcircle invis rad 0.6 at first circle.c\n\tcircle rad 0.7 at first circle.c\n\tarrow thick from first circle go 90% heading hours*30 \n\tarrow from first circle go heading mins*6\n\tarrow dashed thin from first circle go heading time*6\n\tdot at first circle\n\ttext \"XII\" at 0.1 above first circle.n\n\ttext \"VI\" at 0.1 below first circle.s\n\ttext \"III\" at 2nd circle.e\n\ttext \"IX\" at 2nd circle.w\n\t#?time\n\t```\n\n*P.S.* Although not best practice because \"Digital? Every Idiot Can Count to One\"(c) \nI pushed my lame memo test OPamp circuit diagram note into separate `src/opamp.md`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotlibrary%2Fobsidian-adamantine-pick","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnotlibrary%2Fobsidian-adamantine-pick","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotlibrary%2Fobsidian-adamantine-pick/lists"}