GithubHelp home page GithubHelp logo

otter's Introduction

Otter

Import your audio notes from Otter directly into Roam!

Overview

Otter extension imports your Otter voice transcription into Roam complete with time stamps. Otter helps you capture, find, and share important moments from your meetings, interviews, and everyday conversations. Using AI, Otter listens to your voice conversations and generates “smart notes” – accurate, machine-generated text that is synchronized with audio and enriched with speakers tags and summary keywords.

Setup

Open the Roam Depot Settings and enter your email and password associated with your Otter account. If you signed up on Otter using a Google account, you will need to generate a password and use that email/password pair.

Warning: The extension will need to send your credentials to RoamJS' backend in order to import your notes. We do not store your password - instead we store an encryption key and the password stays encrypted on your device. If you are uncomfortable sharing your credentials with RoamJS' backend, do not use this extension.

This is necessary because Otter does not currently support a public-facing API.

Usage

Hit CMD+p (CTRL+p on Windows) to open the Roam command palette. Click the new Import Otter command. The command will open a dialog displaying the ten most recent recordings tied to your account. Click the one you'd like to import and hit the import button to enter the notes into Roam!

You can customize the format of the transcript into Roam by adjusting the label and/or the template.

The label is the first block that gets created when you import an Otter Note. All the transcripts will be nested under this block. You can configure what the label says on the roam/js/otter page. The label supports the following placeholders:

  • {title} - The title of the note, using Untitled if there is none.
  • {summary} - The summary given by Otter as a list of keywords.
  • {created-date} - The date the note was created.
    • You could also pass in a custom format after a colon within the placeholder. For example, {created-date:[[MMMM do, yyyy]]} will output the created date as a Roam page.
  • {link} - The link to the note on Otter

By default, the label has a value of {title} - {summary} ({created-date}).

The template is the format used for every transcript in the note, each nested under the label. You could configure what the template looks like on the roam/js/otter page. The template supports the following placeholders:

  • {start} - The start time of the transcript
  • {end} - The end time of the transcript
  • {text} - The Otter recorded text of the transcript
  • {speaker} - The speaker linked to the text of the transcript. To use speaker initials instead, add an initials argument at the end like {speaker:initials}.

By default, the transcript has a value of {start} - {end} - {text}.

Sample of default label and template:

image

Enabling the Auto Import Enabled flag will import any new conversations into Roam into the daily notes page. Be careful - the first time you enable this, it will import your latest 20 conversations since none of them have been marked as imported before.

This extension is integrated with SmartBlocks! It registers a <%OTTER%> command for importing your latest unimported conversations.

Demo

roamjs-otter-demo.mp4

View on Loom

otter's People

Contributors

dvargas92495 avatar mdroidian avatar stvad avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar

otter's Issues

Investigate issues around auto importing

"auto-import doesn't seem to work - I don't see any errors, it just doesn't seem to run" - Vlad from Discord

May want to look into stability solutions for SmartBlocks, then abstract framework into roamjs-components for reuse here

When auto-syncing speeches - write them in chronological order

It seems right now when multiple speeches are retreated - they are written to Roam in no particular order (or maybe kind of in chrono order but not consistently?).
For taking notes the order is actually important though, so it'd be nice to do it consistently!

Thoughts on storing password in cleartext in Roam

It's problematic =\

I understand why it happens rn, but it's still a problem:

  • any temp access to a database means that those passwords are compromised
  • raises the level of concern from other extensions
  • if a person has any kind of backup set up this automatically replicates the password to backup locations/etc

Can it be better?

Given how otter api is, I'm not sure if there is a great solution here, but one approach that I think makes things a bit better is to store the password in browser local storage.
It allows you to avoid the backup issue and arguably protects from casual browsing by humans a bit (or accidental sharing when you share a DB)
It has UX implications ofc of having to ask for password on each device/browser person uses, but it's arguably worth it.

Cannot import if otter email is different than roamjs email

I believe the offending code is here:

if (user.rawToken !== authToken || email !== authEmail) return undefined;

If I enter the email that is tied to my Roam Account in the Otter Roam Depot settings The email tied to your Otter account, then I had no problem importing.

Enable auto-sharing of speeches when retrieved, to be able to add an iframe with otter UI into Roam

What I want to achieve is being able to embed otter ui for the speech directly into Roam (arguably a better version of #6). If I just use the speech url now - it won't load, but if I enable sharing for the speech I get the result like:

image

So the proposal here is to allow people to opt-in to automatically enable sharing for ingested speeches, to make the iframe thing work.


example api request:

await fetch("https://otter.ai/forward/api/v1/share_speech?otid={otid}&userid={userid}", {
    "credentials": "include",
    "headers": {
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "en-US,en;q=0.5",
        "X-CLIENT-VERSION": "Otter v2.3.114",
        "Sec-Fetch-Dest": "empty",
        "Sec-Fetch-Mode": "cors",
        "Sec-Fetch-Site": "same-origin"
    },
    "method": "GET",
    "mode": "cors"
});

Add audio link as a possible template parameter

One of the things that my Otter WF does is to resolve the audio URL that you can embed directly. So an example entry would look like:

Another test of the outer input
 - Recorded at::12/27/2021, 11:29:43 PM
   - https://otter.ai/u/HlAqvZnJTCG-44uCBJOb9I_Odbo
   - {{audio: https://speech-prod.s3.us-west-2.amazonaws.com/u1368930/22OWHLGB7D7GP437.mp3?response-content-disposition=attachment%3B%20filename%3D%22Note.mp3%22&AWSAccessKeyId=AKIAIJIXVALPR766FCHA&Expires=1640874334&Signature=X5UuKPaLVvC70igiF5qLRwpPYXw%3D }}

Which allows you to listen to the audio directly inside Roam.

It's provided in API return as audio_url https://github.com/Stvad/alfred-otter/blob/master/otter.ts#L33

Grabbing conversations outside of Roam?

Hey, this repo is cool and I'd like to use it to eventually connect to Roam.

However, I'd like to simply grab the conversations directly from my machine to extract the text. Is there some way you could direct me on how to do this? I tried the otter.ai-api repo (omerdn1/otter.ai-api#22), but it isn't working and I fear it is because the website was updated so the code broke.

Your code is way more up-to-date so perhaps you've found a way around this? Honestly, this is my first day using javascript (I typically use Python) so it's hard for me to understand the codebase. Any ideas on what I can use to simply grab the conversations from otter? Thanks! :)

Encrypted Password - "Failed to fetch"

I am receiving a "Failed to fetch" error when attempting to my account in the Otter Roam Depot interface.

I have tried from my desktop Mac (with latest OS updates) & iOS using two different Roam Research accounts.

(As this is my first ever reporting of an "issue" anywhere on GitHub, I hope I am doing it correctly)

Add an ability to tag text entries with a relative date

I find it useful to tag things that need my attention with a certain date, so I can ensure that I processed the note properly. It'd be great if you could do that as one of the template substitutions.

One way to do it would be to use chrono-node to resolve natural dates (as roam-toolkit and phonetoroam do).

But I think also just having a few basic things like {today}, {tomorrow} can be a simple 80/20 solution

CORS error when trying to use the extension

When I try to use the extension - I get a loading indication for a bit and then it stops doing anything

image

When I look in the browser console I see the following errors from it:

Access to XMLHttpRequest at 'https://lambda.roamjs.com/otter' from origin 'https://roamresearch.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Btw, I'm curious - why does this extension need a backend vs doing a direct query to otter?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.