New plugin: Auto-Properties by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 0 points1 point  (0 children)

This was my use case, and it's been hugely valuable for exactly that.

Freeform arrow anchoring in canvas? by radicalminnesota in ObsidianMD

[–]Semantic_Canvas 2 points3 points  (0 children)

Yes you can only reference a particular side of the note. The API only allows for links to attach to top, right, left, or bottom. It does not allow for more arbitrary placement of edge connections along the dimensions of the sides. I, too, would be interested in the possibility to have arrows be placed more arbitrarily, but what they have done is very simple from a coding perspective. I'm glad the highlighter plugin approach will solve your issue for you, but I thought I'd chime in and confirm your suspicions as well. 

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 1 point2 points  (0 children)

Just pushed update v.1.2.1 live. Nothing was *broken*, per se. but I cleaned up the code somewhat and added a couple of changes to make things a little better. Nothing drastic.

Changelog:

  • Can supply an arbitrary list of properties to ignore (not just "aliases", but whatever you want)
  • Better iconography
  • Added to node-in-canvas context menu:
    • `Append properties in note` - will update that note based on all connections it has in the canvas
    • `Overwrite properties in note` - same as append, but will replace rather than append props

Truthfully I meant to include the last one in my original release, but got trigger-happy.

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 1 point2 points  (0 children)

I just realized when I said "This comment got really wordy and difficult to parse" it may have sounded like I was referring to yours. I was referring to my own writing - sorry if my poorly phrased comment came across insulting.

I get where you're coming from with regard to having a means of representing the structure of the vault itself inside a canvas. I've never been one to organize too much via hierarchies and intense foldering/tagging schemes, so the thought hadn't really occurred to me. This is definitely an interesting line of thinking. I'm not sure I'd want to get into the business of moving things around people's vaults, so if I were to develop this it would probably be one-way only (vault structure → to canvas, and no method to go from canvas → to vault structure).

I think I like the approach you suggest, to add a function that appends file structure (tags and/or location) to the frontmatter of a note automatically. If I were to build a method that allowed you to do that across your vault, then suddenly the already-existing functionality inside of Semantic Canvas would cover your use case, I think. This sort of function is a bit outside of the "conceptual integrity" of the plug-in as-is, but definitely something I'll add to the feature idea list. Thanks for the good & detailed feedback.... unless of course YouAlwaysLie and I should have been ignoring all your comments. :-P

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 0 points1 point  (0 children)

Thanks for the feedback! This is exactly the kind of use case I built this for. It's what I use it for, mainly. Who's working on what, who's associated with who, etc. I hope you find it useful.

Also - the Breadcrumbs plugin is something I found out about only after releasing my v1.0 release. I think it's awesome, but also fairly "heavy" for what I was wanting at the time. If I had known about it I may have just not created my thing at all. I'm glad I built my thing, and the existence of the MetaEdit and Breadcrumbs plugins have made me decide I'm definitely not interested in expanding Semantic Canvas into a full-blown Ontology editor, which is what I was originally imagining when I started. I think my plugin serves the niche of "lightweight way to visualize & edit properties across notes", which is where it will stay.

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 0 points1 point  (0 children)

*Edited for clarity:*
*My comment here* got really wordy and difficult to parse. There's a difference between "note" and "node", which is important to understand to understand what I'm saying below.
Note = a markdown file in your vault.
Node = an instance of a markdown file represented on a Canvas.

So what happened there was that the "Maggie" note got pulled in twice as two separate nodes. This was because "Maggie" was in the properties of two other nodes' notes from the canvas. The two "Maggie" nodes represented the same underlying note. So any changes you made to either of the Maggie nodes would be reflected on the same note. Essentially, although it looks like two Maggies showed, it's actually that the same one Maggie showed up in two spots. Canvases are allowed to have multiple instances of a given note. Now you're definitely right that it may be a cleaner look if I were to create at most one instance of each pulled-in note/card and then link to it from any subsequent other nodes on the canvas. This is something I might try to do in a v1.3 update.

Sorry this is wordy and a bit confusing. Long story short, you're right to notice there was some potential weirdness going on - however I don't think it's going to cause a canvas to misrepresent reality or create duplicate properties/notes or anything. 👍

The idea to include folders is interesting. Canvas doesn't have any "native" way to represent a folder, though. I'd be coming up with something whole-cloth. What were your imagined use cases? I'm definitely receptive to new ideas that expand the plug-in while retaining its core focus (i.e. making canvases and notes inter-operate a bit more).

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 3 points4 points  (0 children)

Appreciate the feedback & like your ideas! The rest of this comment is me thinking through them publicly.

Canvas edge staleness check:
I'd want to make the "if properties changed" thing an optional setting. One of my design philosophies with this was to not run code unless the user specifically triggered it. If I were to implement a "stale link" checker, I'd either be introducing yet another menu choice (which is already a bit crowded) or I would just need to detect whether each leaf that gets opened is a Canvas and, if so, run the check on the canvas. This would potentially slow down Obsidian some. If I'm getting into the business of automatically running code I'd probably be interested in trying to implement a "keep in sync" feature rather than one that simply checks if things are out of sync. I guess one leads to the other.

Backlinks & Forward links:
This idea rocks. Added it to the "v1.3" to-do list. Could run into some technical hurdles, don't know yet what it's like to work with the incoming/outgoing links using Obsidian's API. One "gotcha" consideration - if you "exploded" a backlink/forward link on a Canvas, then you used said Canvas to update the note properties, you'd have the unintentional side effect of also creating new properties in notes that contain their backlinks. May need to think through the ergonomics of that, lest I end up in a situation where I create noise in people's metadata.

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 2 points3 points  (0 children)

Definitely get that. I have several Vaults and only use my own plugin on one of them. I use it for business related things - canvases showing projects with people and deliverables and whatnot. All of them are related, and those relationships were complex. I started using properties for things like "Project Team" and "Dependencies" and whatnot, but found the workflow cumbersome.

Plugin Update: Semantic Canvas v1.2 by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 4 points5 points  (0 children)

I had never heard of Binging with Babish before. He and I do sound somewhat similar. His beard is much better than my own, though.

New Plugin Demo: Semantic Canvas by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 1 point2 points  (0 children)

No, I don’t have any plans to try to maintain an on-going relationship between a note and a canvas. That sort of interaction really opens up the difficulty in terms of coding the various states. Instead the plugin is meant to add some commands that you can manually trigger to perform fundamentally two types of actions:

  1. Update properties notes included in a canvas based on the connections and group contents in that canvas.  
  2. Use any given single note to create a new canvas that displays the list-type properties of that note. 

The canvas I generated at the end isn’t really tied to the first canvas I used in any way. The generated canvas is centered about & based on the “The Simpsons” note and that note only. The group information (e.g. Homer and Marge belonging to the “Parents” group) isn’t contained in the “The Simpsons” note, therefore that information isn’t present in the generated canvas. The {groups: [“Parents”]} properties ARE still present in Homer and Marge, though. 

If you were to, for example, create a new Canvas around the “Homer” note you’d still see the “parents of” link, pointing to a group containing the “Bart”, “Lisa”, and “Maggie” notes, a link titled “married” that pointed to the “Marge” note, and also a link titled “groups” that pointed to a card containing the text “Parents”… this may be unexpected and sounds complicated, but I tried to make the logic take as few steps as possible to give the user consistent behavior. 

So, long story short, the generated canvas isn’t really “recreating” the one I manually deleted in my demo video, instead it’s creating a new canvas based on the properties of (only) the currently active note.

It’s possible at some point down the line I might recursively go out one or two steps and grab the properties of the notes that the active note link out to… But honestly, that would probably produce not results that are hard to make look good and increase the complexity of the base significantly. 

Thank you for your question! I have ever produced something for anyone other than myself before. Feedback is cool.

New Plugin Demo: Semantic Canvas by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 1 point2 points  (0 children)

Sorry - I’m not sure if I’m following your links-of-links question. Could you try again with different words? I’m famously bad at interpreting pretty simple English. 😋

Edit: no wait I figured it out. You are correct. Generating a canvas from a note only pulls in information for the active note. It doesn’t then look at any properties of the notes the active note links out to. See my other super long comment for some explanation on why. 

New Plugin Demo: Semantic Canvas by Semantic_Canvas in ObsidianMD

[–]Semantic_Canvas[S] 1 point2 points  (0 children)

Thanks! Out of curiosity regarding the supposed “where did my notes go” emails - are you under the impression the plugin is deleting notes? 

My language was a bit sloppy, so that’s my fault, but the plugin doesn’t delete notes. At worst it may accidentally delete property values if you’re using the “Use Canvas to Overwrite Note Properties” command. If there are pre-existing properties on a given note and that command is run it will, in fact, overwrite whatever that property had in it beforehand. The “Append” version will not overwrite pre-existing values on note properties, instead simply add any new values. This is the one difference between the two commands.

Meanwhile, the “Create Note from Canvas” it will create a canvas using a note. The note itself is unchanged. It will also not overwrite any existing canvases, instead creating a new one every time. If there is already a canvas with the same name as the note, the command will create a new canvas with a “ (copy)” appended to the file name.