I am very happy to share with you a new plugin that I’ve created for Obsidian called - “Kindle Highlights”.
This plugin removes the middleman, and connects you with your Kindle data directly into Obsidian. You can either (a) simply login to your online Amazon account and sync, or (b) upload your My Clippings.txt from your physical Kindle device.
Your highlights will be parsed and rendered in a template that you have total control over its configuration.
If you are syncing a book that you’ve purchased from Amazon via the online Amazon sync method, you are also able to “enrich” your highlights by having the plugin download extra metadata information about your book for you. Metadata like ISBN, print length, publisher and publishing date.
The developer console doesnt show anything but the pop up shows some books syncing but I cannot see the highlighted texts in notes. Only I get the last highlighted book note
I am using the last version, I have downloaded this morning.
@hadynz you’ve knocked it out of the park for me with this plugin! As a researcher and writer I have hundreds of books and dozens of books in play at any given time and project. Having the highlights and my notes inserted the way you have implemented solves so many problems. Don’t need no Diigo, Readwise, or GoSnippet anymore. YES! Dude, you’ve saved me money $$$. I am going to experiment this week on using links to and from these notes to see if they persist with re-syncing and what, if any, challenges this presents for us in the long run. Kudos and Many Thank Yous.
I don’t feel the plugin right now has a good story for re-syncing. The plugin currently will skip modifying any book that was already sycned at least once before, even if there are new highlights.
I’ve gone with this simplistic approach as I am sure what is the desired behaviours that users would want. Should the plugin:
(a) auto-replace a book that has been previously synced before and had new highlights? this could result in data loss if that file has been modified
(b) should the plugin skip any books that have synced at least once before? that is the current behaviour. But it means you will not get your latest highlights without deleting your last file.
(c) should the plugin attempt to concatenate any new highlights at the end of the file? This could result in highlights being unordered
Keen to know your thoughts or anyone else’s for that matter on how you think re-sync should work?
I can still see that you are not using the latest version of the plugin.
You have two options:
Download the latest version. Anything >= v0.2.4
Disable fetching of metadata from the plugin settings
In versions before 0.2.4, there was a bug were the plugin would silently fail when it is unable to fetch extra metadata for a book from Amazon. This has now been fixed.
@hadynz this is wonderful. A great contribution to the community. Thank you!.
Some thoughts
I have many many books, so doing the whole sync to get the notes and highlights for one or two books is a lengthy process. I don’t have a suggestion on how to selectively grab the data for speicific books, but it would be useful if someone came up with an idea.
Would it be possible to define a prefix or suffix to append to the note created for a given book? E.g., if I already have a note named “War and Peace”, I don’t want a highlight note with the same name as it might interfere with references. So if I could tell the plugin to suffix a string to the notes it creates then I would have “War and Peace_kindle” or something like that.
My preference is to figure out a way to identify books with newer highlights and flag them somehow on import so Ic an manually manage the additional info.
Reason is that I will be adding additional info in Obsidian to my book highlights and then I may go back and re-read the book again and change things so I want to be sure I don’t lose my additions but also pick up the changes. Getting a second note that shows I have a new version to manually reconcile would be fine.
I want a way to set what folder the highlight notes come into in Obsidian.
All my unprocessed notes come into my 02_Inbox folder in my Obsidian Vault. I’d like all new notes to go there.
I also want a quick way to define the naming of the notes.
I have a naming structure I use and I want to be able to set that up for the incoming notes.
For me for books it would be authorlastname_title_kindle.md
Possible Bug
I also have discovered that I am getting errors in the links when the books were borrowed via Kindle unlimited. I get the highlights but I can’t get to the Amazon link Here is an example
This is a book I borrowed under the Kindle Unlimited program and while I get the highlight the link is undefined as is the one later for the location of the highlight.
We have YAML header fields and Dataview uses inline meta data fields now (the key:: value syntax). This would allow leaving a breadcrumb trail for this plugin, but it doesn’t leave us much in the way of figuring out if some body has messed with the note in the interim.
Maybe some way of persisted versioning of each note.
The concatenation thought has merit and we should think thru it - i.e. what if a previously uploaded highlight or note had changed since last update?
I’m just spewing raw stuff here … trying to recall if any other plugins I use have this “state” challenge in a note.
Above all, you’ve established the link to Amazon to get this data, then next steps require more in depth work inside of Obsidian. Don’t give up hope! I bet some of those excellent minds on discord can guide us.
@writtenfool – can you expand on what you are referring to here? If I understand you correctly, you are saying that a plugin can store metadata about any note in a separate datastore that Obsidian keeps track off. Is that the case? It’s the first I learn about this, and it would be a very helpful method to have the plugin persist important state.
I posted a question about this late last night and got an informed response for us to followup. Here’s the response and the link below. I looked at the various importer type plugins and interfaces, there is value in a solution to the state change and persistence challenge. Wouldn’t it be great if we all read books completely, one at a time, and never changed the highlights again:)
Here’s my inquiry:
I see several examples of plugins that import annotations and highlights from sources like books or pdfs (i.e. zotfile, readwise, kindle). They all automate the load, a book for example, into a note. But what if the source changes? Say an annotation or highlight is deleted or added to on the source side. What can a plugin do to an existing note to manage this state change? And, furthermore, what if there are links to and from Obsidian notes that need to be dealt with in this process?
And response from Koala:
If you keep separate source notes you could just overwrite, but then you’d lose potential block references from other notes. Unless you hash the highlights of your imports and will always know that if the hash is the same, the highlight is the same. And if you don’t want to store these hashes in a database, you could use them as block refs. Then you could still overwrite the files each time, so you’d get everything updated but wouldn’t lose the links from other notes. I suppose the hashes could also be limited to the first ten characters depending on how big the source files are/how many highlights go into a file. I think @argentum (she/her) does it that way in the new version of her mdnotes plugin (for zotero), the source notes are a concept from @bri (they/m), at least I got that idea from them.
Interesting observation: I just created a bookmark and note in Audible. It shows up on my kindle for that book. Caveat, in this case, I have both the book and the audible recording.
i’ve noticed the same, but also only when i own both Audible/Kindle versions for a book, but haven’t really any standalone Audible note/highlight import utilities or plug-ins…
Until your post, I was unaware you could add notes to bookmarks on Audible. And they do not appear to offer an interface to extract the notes, at least in the UI. And it is a tenuous thing to rely upon screen scrapes for interfaces. Gonna keep eyeballs on this thread. Cheers!