DEV Community

Cover image for Video Annotator
Javel Rowe
Javel Rowe

Posted on

4 1

Video Annotator

This is a submission for the Netlify Dynamic Site Challenge: Build with Blobs.

What I Built

VNote is a video annotation tool.

By adding a Youtube video URL to the input field on the landing page, users can access a note-taking interface integrated with the video player. This enables users to create timestamped notes directly linked to specific moments in the video, aiding in comprehension, retention, and collaboration through a shareable link.

Target Users

  • Educators: Create interactive video lessons with embedded notes, questions, or links to supplementary materials.

  • Students: Collaborate on study guides by annotating lecture videos or documentaries.

  • Researchers: Analyze and code qualitative video data with precise timestamps and linked resources.

  • Content Creators: Include additional context, behind-the-scenes details, or interactive elements to videos.

Demo

Demo Link

VNote Pro

Annotate, share, and learn from videos.

favicon vnote.pro

Video Demo

Github Repo

GitHub logo perplexedyawdie / video-annotator

Annotate, share, and learn from videos.

Welcome to VNote Pro πŸ‘‹

Version License: MIT

Capture and share key moments from any video with time-stamped notes, links, etc. Easily collaborate and learn by sharing your annotated videos.

🏠 Homepage

Install

Make a copy of the .env.example file and rename it to .env.local then add the required env vars.

npm install
Enter fullscreen mode Exit fullscreen mode

Usage

You can run the command below or use the provided Dockerfile.

npm run dev
Enter fullscreen mode Exit fullscreen mode

Author

πŸ‘€ Javel Rowe

Show your support

Give a ⭐️ if this project helped you!


This README was generated with ❀️ by readme-md-generator






Landing Page
Landing Page

Taking Notes
Taking notes!

Platform Primitives

Netlify Blobs made it super easy to quickly store/retrieve notes data.

Specifically, I was able to interact with Netlify Blobs by using the Typescript client. First, I initialized the client like so:

import { getStore } from '@netlify/blobs';

const store = getStore({
    name: 'note-store',
    siteID: process.env.NETLIFY_SITE_ID,
    token: process.env.NETLIFY_API_TOKEN,
})
Enter fullscreen mode Exit fullscreen mode

then I was able to easily save data like so:

export async function saveNote(noteData: VNote): Promise<boolean> {
    try {
        await store.setJSON(noteData.id, noteData)
        return true
    } catch (error) {
        console.error(error)
        return false
    }
}
Enter fullscreen mode Exit fullscreen mode

and retrieving was just as simple:

export async function getNoteData(noteId: string): Promise<VNote | null> {
    try {
        const noteData = await store.get(noteId, {
            type: "json"
        });
        if (noteData) {
            return {
                id: noteData.id,
                url: noteData.url,
                noteDetails: noteData.noteDetails ?? null
            }
        } else {
            throw new Error("Unable to retrieve note!");

        }
    } catch (error) {
        console.error(error)
        return null
    }
}
Enter fullscreen mode Exit fullscreen mode

This site was hosted on Netlify & I added a custom domain.

SurveyJS custom survey software

Simplify data collection in your JS app with a fully integrated form management platform. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more. Integrates with any backend system, giving you full control over your data and no user limits.

Learn more

Top comments (1)

Collapse
 
masteing_the_code profile image
Joel Jose β€’

ohh NiceπŸ‘

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

πŸ‘‹ Kindness is contagious

Please leave a ❀️ or a friendly comment on this post if you found it helpful!

Okay