Integrate within 30 minutes

Video Collaboration

Video Collaboration

with

with

Sync Players

Sync Players

Richard

München, Germany

Eva Ash

Miami, USA

Trusted by

Trusted by

Trusted by

Trusted by

Connected to scalable realtime backend infrastructure.

Embed fully customizable powerful experiences with a few lines of code.

Embed fully customizable powerful experiences with a few lines of code.

Embed fully customizable powerful experiences with a few lines of code.

Code Snippet

import { useEffect } from "react";
import { useVeltClient } from '@veltdev/react';
import { generateUserData } from './util/user';
import styles from './App.module.css';

import Layout from './components/layout/Layout';
import Breadcrumbs from './components/breadcrumbs/Breadcrumbs';
import Explorer from './components/explorer/Explorer';
import Preview from './components/preview/Preview';
import SplitPane from './components/split-pane/SplitPane';
import Timeline from "./components/timeline/Timeline";
import Controls from "./components/controls/Controls";
import FileExplorer from "./components/file-explorer/FileExplorer";
import Stage from "./components/stage/Stage";

import { VeltPresence } from "@veltdev/react";


const App = () => {

  /**
   * Velt Code Example
   * Initializes the Velt SDK.
   */
  const { client } = useVeltClient();

  useEffect(() => {

    if (!client) return;

    const user = generateUserData();
    client.identify(user);
    client.setDocumentId('video_project_id');

  }, [client]);

  useEffect(() => {

    if (!client) return;

    client.getPresenceElement().getOnlineUsersOnCurrentDocument().subscribe((users: any) => {
      if (users === null) return;
      if (users.length === 0) {
        const isDataReset = window.sessionStorage.getItem('_snippyly_demo_reset');

        if (isDataReset === null) {
          console.log('reset data!!');
          fetch(
            "https://us-central1-snippyly-sdk-prod.cloudfunctions.net/resetDemoData",
            {
              headers: { "Content-Type": "application/json" },
              method: "POST",
              body: JSON.stringify({ documentId: 'video_project_id' }),
            }
          );
          window.sessionStorage.setItem('_snippyly_demo_reset', 'true');
        }
      }
    });

  }, [client]);

  return (
    <div className={styles['app-container']}>
      <Layout
        topbar={
          <div className={styles['topbar']}>
            <Breadcrumbs />
            {/**
             * Velt Code Example
             * Feature: Presence
             */}
            <div className={styles['presence-container']}>
              <VeltPresence />
            </div>
          </div>
        }
        mainWindow={
          <SplitPane
            left={<Explorer />}
            right={<Preview />}
          />
        }
        bottomPane={
          <div className={styles['bottom-container']}>
            <div className={styles['control-bar']}>
              <Controls />
              <Timeline />
            </div>
            <div className={styles['interact-bar']}>
              <FileExplorer />
              <Stage />
            </div>
          </div>
        }
      />
    </div>
  );
};

export default App;

Code Snippet

import { useEffect } from "react";
import { useVeltClient } from '@veltdev/react';
import { generateUserData } from './util/user';
import styles from './App.module.css';

import Layout from './components/layout/Layout';
import Breadcrumbs from './components/breadcrumbs/Breadcrumbs';
import Explorer from './components/explorer/Explorer';
import Preview from './components/preview/Preview';
import SplitPane from './components/split-pane/SplitPane';
import Timeline from "./components/timeline/Timeline";
import Controls from "./components/controls/Controls";
import FileExplorer from "./components/file-explorer/FileExplorer";
import Stage from "./components/stage/Stage";

import { VeltPresence } from "@veltdev/react";


const App = () => {

  /**
   * Velt Code Example
   * Initializes the Velt SDK.
   */
  const { client } = useVeltClient();

  useEffect(() => {

    if (!client) return;

    const user = generateUserData();
    client.identify(user);
    client.setDocumentId('video_project_id');

  }, [client]);

  useEffect(() => {

    if (!client) return;

    client.getPresenceElement().getOnlineUsersOnCurrentDocument().subscribe((users: any) => {
      if (users === null) return;
      if (users.length === 0) {
        const isDataReset = window.sessionStorage.getItem('_snippyly_demo_reset');

        if (isDataReset === null) {
          console.log('reset data!!');
          fetch(
            "https://us-central1-snippyly-sdk-prod.cloudfunctions.net/resetDemoData",
            {
              headers: { "Content-Type": "application/json" },
              method: "POST",
              body: JSON.stringify({ documentId: 'video_project_id' }),
            }
          );
          window.sessionStorage.setItem('_snippyly_demo_reset', 'true');
        }
      }
    });

  }, [client]);

  return (
    <div className={styles['app-container']}>
      <Layout
        topbar={
          <div className={styles['topbar']}>
            <Breadcrumbs />
            {/**
             * Velt Code Example
             * Feature: Presence
             */}
            <div className={styles['presence-container']}>
              <VeltPresence />
            </div>
          </div>
        }
        mainWindow={
          <SplitPane
            left={<Explorer />}
            right={<Preview />}
          />
        }
        bottomPane={
          <div className={styles['bottom-container']}>
            <div className={styles['control-bar']}>
              <Controls />
              <Timeline />
            </div>
            <div className={styles['interact-bar']}>
              <FileExplorer />
              <Stage />
            </div>
          </div>
        }
      />
    </div>
  );
};

export default App;

Code Snippet

import { useEffect } from "react";
import { useVeltClient } from '@veltdev/react';
import { generateUserData } from './util/user';
import styles from './App.module.css';

import Layout from './components/layout/Layout';
import Breadcrumbs from './components/breadcrumbs/Breadcrumbs';
import Explorer from './components/explorer/Explorer';
import Preview from './components/preview/Preview';
import SplitPane from './components/split-pane/SplitPane';
import Timeline from "./components/timeline/Timeline";
import Controls from "./components/controls/Controls";
import FileExplorer from "./components/file-explorer/FileExplorer";
import Stage from "./components/stage/Stage";

import { VeltPresence } from "@veltdev/react";


const App = () => {

  /**
   * Velt Code Example
   * Initializes the Velt SDK.
   */
  const { client } = useVeltClient();

  useEffect(() => {

    if (!client) return;

    const user = generateUserData();
    client.identify(user);
    client.setDocumentId('video_project_id');

  }, [client]);

  useEffect(() => {

    if (!client) return;

    client.getPresenceElement().getOnlineUsersOnCurrentDocument().subscribe((users: any) => {
      if (users === null) return;
      if (users.length === 0) {
        const isDataReset = window.sessionStorage.getItem('_snippyly_demo_reset');

        if (isDataReset === null) {
          console.log('reset data!!');
          fetch(
            "https://us-central1-snippyly-sdk-prod.cloudfunctions.net/resetDemoData",
            {
              headers: { "Content-Type": "application/json" },
              method: "POST",
              body: JSON.stringify({ documentId: 'video_project_id' }),
            }
          );
          window.sessionStorage.setItem('_snippyly_demo_reset', 'true');
        }
      }
    });

  }, [client]);

  return (
    <div className={styles['app-container']}>
      <Layout
        topbar={
          <div className={styles['topbar']}>
            <Breadcrumbs />
            {/**
             * Velt Code Example
             * Feature: Presence
             */}
            <div className={styles['presence-container']}>
              <VeltPresence />
            </div>
          </div>
        }
        mainWindow={
          <SplitPane
            left={<Explorer />}
            right={<Preview />}
          />
        }
        bottomPane={
          <div className={styles['bottom-container']}>
            <div className={styles['control-bar']}>
              <Controls />
              <Timeline />
            </div>
            <div className={styles['interact-bar']}>
              <FileExplorer />
              <Stage />
            </div>
          </div>
        }
      />
    </div>
  );
};

export default App;

Playback

Playback

Playback

Editing

Editing

Editing

Analyzing

Analyzing

Analyzing

Playback

Playback

Playback

Playback

Editing

Editing

Editing

Editing

Analyzing

Analyzing

Analyzing

Analyzing

Playback

Playback

Playback

Editing

Editing

Editing

Analyzing

Analyzing

Analyzing

Playback

Watch Together

Watch Together

Sync your video player with others in the same document for a shared and immersive viewing experience

Video Players

view all use cases

Example 1
Example 1
Example 1

1

Example 2
Example 2
Example 2

Editing

Coordinated Understanding

Coordinated Understanding

Ensure everyone is on the same page by synchronizing video playback, fostering shared insights and discussions

Video Editors

view all use cases

2

Analyzing

Analyze moments together

Analyze moments together

Point out iterations frame by frame together on the same frame

Session Replay Tool

view all use cases

Example 3
Example 3
Example 3

3

“We were able to add it into our codebase within 10 minutes and were live in next 20”

Brendon Small

CPO @Typeform

“We were able to add it into our codebase within 10 minutes and were live in next 20”

Brendon Small

CPO @Typeform

Integrates deeply within your tech stack.

Integrates deeply within your tech stack.

Integrates deeply within your tech stack.

Works across all major web frameworks.

Works across all major web frameworks.

Works across all major web frameworks.

Frequently Asked Questions

Frequently Asked Questions

How long does it take to integrate with Velt SDK?

How long does it take to integrate with Velt SDK?

Which frameworks do you support?

Which frameworks do you support?

Do you offer any volume discounts?

Do you offer any volume discounts?

Do you offer any discounts for startups?

Do you offer any discounts for startups?

How secure is Velt SDK?

How secure is Velt SDK?

How reliable and scalable is Velt SDK?

How reliable and scalable is Velt SDK?