diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 4937bc51..58be19f4 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -2,8 +2,8 @@ // Note: type annotations allow type checking and IDEs autocompletion // Libraries that support mathematics in documentation -import rehypeKatex from 'rehype-katex'; -import remarkMath from 'remark-math'; +import rehypeKatex from "rehype-katex"; +import remarkMath from "remark-math"; // Options: https://github.com/FormidableLabs/prism-react-renderer/tree/master/src/themes const lightCodeTheme = require("prism-react-renderer").themes.github; @@ -54,14 +54,13 @@ const config = { // there will be a third one for real URLs. :) }, gtag: { - trackingID: 'G-WG1Q5X6F6L', + trackingID: "G-WG1Q5X6F6L", }, blog: { showReadingTime: true, remarkPlugins: [remarkMath], rehypePlugins: [rehypeKatex], - editUrl: - "https://github.com/groundlight/python-sdk/tree/main/docs/blog/", + editUrl: "https://github.com/groundlight/python-sdk/tree/main/docs/blog/", }, theme: { customCss: require.resolve("./src/css/custom.css"), @@ -72,11 +71,10 @@ const config = { stylesheets: [ { - href: 'https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css', - type: 'text/css', - integrity: - 'sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM', - crossorigin: 'anonymous', + href: "https://cdn.jsdelivr.net/npm/katex@0.13.24/dist/katex.min.css", + type: "text/css", + integrity: "sha384-odtC+0UGzzFL/6PNoE8rX/SPcQDXBJ+uRepguP4QkPCm2LBxH3FA3y+fKSiJ+AmM", + crossorigin: "anonymous", }, ], @@ -143,9 +141,9 @@ const config = { position: "right", }, { - to: 'blog', - label: 'Blog', - position: 'left', + to: "blog", + label: "Blog", + position: "left", }, ], }, @@ -242,15 +240,15 @@ const config = { }, { to: "https://www.groundlight.ai/blog/introducing-groundlights-framegrab-library", - from: "/blog/introducing-framegrab" + from: "/blog/introducing-framegrab", }, { to: "https://www.groundlight.ai/blog/best-practices-for-best-results-with-groundlight", - from: "/blog/best-practices" + from: "/blog/best-practices", }, { to: "https://www.groundlight.ai/blog/linux-os-images-for-computer-vision-on-raspberry-pi", - from: "/blog/raspberry-pi-computer-vision" + from: "/blog/raspberry-pi-computer-vision", }, ], }, @@ -258,4 +256,4 @@ const config = { ], }; -module.exports = config; \ No newline at end of file +module.exports = config; diff --git a/docs/src/css/style.module.css b/docs/src/css/style.module.css new file mode 100644 index 00000000..e59a8a20 --- /dev/null +++ b/docs/src/css/style.module.css @@ -0,0 +1,615 @@ +@import url("https://fonts.googleapis.com/css2?family=Chivo:ital,wght@0,100..900;1,100..900&display=swap"); +* { + box-sizing: border-box; +} + +.container { + width: 100%; + margin-inline: auto; + padding-inline: 12px; +} + +@media (min-width: 576px) { + .container { + max-width: 540px; + } +} +/* Small */ +@media (min-width: 768px) { + .container { + max-width: 720px; + } +} +/* Medium */ +@media (min-width: 992px) { + .container { + max-width: 960px; + } +} +/* Large */ +@media (min-width: 1200px) { + .container { + max-width: 1140px; + } +} +/* Extra large */ +@media (min-width: 1400px) { + .container { + max-width: 1254px; + } +} +/* Fluid container */ +.container-fluid { + width: 100%; + padding-right: var(--bs-gutter-x, 0.75rem); + padding-left: var(--bs-gutter-x, 0.75rem); + margin-right: auto; + margin-left: auto; +} + +.cmnButton { + display: inline-block; + padding: 4px 35px 6px; + color: #000000 !important; + background-color: #eacc8b; + border: 1px solid #eacc8b; + font-size: 20px; + text-decoration: none; + transition: all 0.3s linear; +} +.cmnButton:hover { + color: #eacc8b !important; + background-color: transparent; +} +.cmnButton.outline { + color: #eacc8b !important; + background-color: transparent; +} +.cmnButton.outline:hover { + color: #000000 !important; + background-color: #eacc8b; + border: 1px solid #eacc8b; +} + +.header { + padding: 30px 0; + border-bottom: 1px solid #4d4d4d; +} +@media (max-width: 991px) { + .header { + padding: 20px 0; + } +} +.header .headerwrapper { + display: flex; + justify-content: space-between; + align-items: center; +} +.header .headerwrapper .logo { + display: inline-block; + height: -moz-maxcontent; + height: maxcontent; +} +.header .headerwrapper .logo img { + width: 246px; +} +@media (max-width: 1399px) { + .header .headerwrapper .logo img { + width: 220px; + } +} +.header .menutoggle { + display: flex; + align-items: center; + justify-content: center; + background: #1c1c1c; + border: 1px solid #4d4d4d; + border-radius: 4px; + padding-top: 4px; + padding-bottom: 4px; +} +@media (min-width: 992px) { + .header .menutoggle { + display: none; + } +} +.header .menutoggle .closee { + display: none; +} +.header .menutoggle.active .closee { + display: block; +} +.header .menutoggle.active .toggle { + display: none; +} +.menu { + display: flex; + align-items: center; + gap: 10px 50px; + list-style: none; + margin: 0; + padding: 0; +} +@media (max-width: 1399px) { + .menu { + gap: 10px; + } +} +@media (min-width: 992px) { + .menu .containlogo { + display: none; + } +} +@media (max-width: 991px) { + .menu { + position: fixed; + top: 0; + left: 0; + height: 100dvh; + flex-direction: column; + padding: 40px; + text-align: left; + align-items: flex-start; + background-color: #1c1c1c; + min-width: 300px; + gap: 15px; + transform: translateX(-100%); + transition: all 0.3s linear; + } + .menu.active { + transform: translateX(0); + } +} +.header .menu .menuitem .menulink { + transition: all 0.3s linear; + text-decoration: none; + font-size: 24px; + padding: 5px 20px; +} +@media (max-width: 1399px) { + .header .menu .menuitem .menulink { + font-size: 22px; + } +} +@media (max-width: 1199px) { + .header .menu .menuitem .menulink { + font-size: 18px; + padding-inline: 15px; + } +} +@media (max-width: 991px) { + .header .menu .menuitem .menulink { + font-size: 16px; + padding-inline: 8px; + } +} +.header .menu .menuitem .menulink:hover { + color: #eacc8b; +} +.header .menu .menuitem .menulink.active { + color: #eacc8b; +} + +.bannersection { + padding-top: 120px; + padding-bottom: 120px; +} +@media (max-width: 991px) { + .bannersection { + padding-top: 60px; + padding-bottom: 60px; + } +} +.bannersection .bannerwrapper { + display: flex; + gap: 40px; +} +@media (max-width: 991px) { + .bannersection .bannerwrapper { + flex-direction: column; + gap: 25px; + } +} +.bannersection .bannerwrapper .title { + font-size: 64px; + font-weight: 500; + max-width: 700px; + width: 100%; + line-height: 1.3; + margin-top: 0; + margin-bottom: 0; + letter-spacing: -0.5px; +} +@media (max-width: 1199px) { + .bannersection .bannerwrapper .title { + font-size: 44px; + } +} +.bannersection .bannerwrapper .content { + max-width: 495px; +} +@media (max-width: 1199px) { + .bannersection .bannerwrapper .content { + max-width: 420px; + } +} +.bannersection .bannerwrapper .content p { + margin-top: 0; + font-size: 20px; +} +@media (max-width: 1199px) { + .bannersection .bannerwrapper .content p { + font-size: 18px; + } +} +.bannersection .bannerwrapper .buttonwrapper { + display: flex; + flex-wrap: wrap; + gap: 12px 16px; +} +@media (max-width: 991px) { + .bannersection .bannerwrapper .buttonwrapper { + margin-top: 35px; + } +} + +.featuresection { + padding-bottom: 120px; +} +@media (max-width: 575px) { + .featuresection { + padding-bottom: 60px; + } +} +.featuresection .featurewrapper { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 80px; + justify-content: center; +} +@media (max-width: 1199px) { + .featuresection .featurewrapper { + gap: 50px 30px; + } +} +@media (max-width: 991px) { + .featuresection .featurewrapper { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 575px) { + .featuresection .featurewrapper { + grid-template-columns: repeat(1, 1fr); + } +} +.featuresection .featureitem { + text-align: center; + margin-inline: auto; +} +.featuresection .featureitem .icon { + height: 246px; +} +.featuresection .featureitem .title { + font-size: 24px; + margin-top: 0; + margin-bottom: 20px; +} +.featuresection .featureitem p { + font-size: 18px; + margin-bottom: 0; +} + +.integrationcompatibility { + padding-bottom: 120px; +} +@media (max-width: 575px) { + .integrationcompatibility { + padding-bottom: 60px; + } +} + +.sectiontitle { + font-size: 64px; + margin-bottom: 30px; + margin-top: 0; +} +@media (min-width: 1200px) { + .sectiontitle { + letter-spacing: -0.3px; + } +} +@media (max-width: 1199px) { + .sectiontitle { + font-size: 48px; + } +} +@media (max-width: 575px) { + .sectiontitle { + font-size: 36px; + } +} + +.integrationcompatibilitywrapper { + display: flex; + gap: 40px; +} +@media (max-width: 991px) { + .integrationcompatibilitywrapper { + flex-direction: column; + } +} +.integrationcompatibilitywrapper .leftcontent { + max-width: 500px; + width: 100%; +} +@media (max-width: 1199px) { + .integrationcompatibilitywrapper .leftcontent { + max-width: 400px; + } +} +@media (max-width: 991px) { + .integrationcompatibilitywrapper .leftcontent { + max-width: 100%; + } +} +.integrationcompatibilitywrapper .leftcontent p { + margin-top: 0; +} +.integrationcompatibilitywrapper .pipe { + background-color: white; + width: 1px; +} +.integrationcompatibilitywrapper .rightcontent { + max-width: calc(100% - 580px); +} +@media (max-width: 1199px) { + .integrationcompatibilitywrapper .rightcontent { + max-width: calc(100% - 400px); + } +} +@media (max-width: 991px) { + .integrationcompatibilitywrapper .rightcontent { + max-width: 100%; + } +} +.integrationcompatibilitywrapper .logoswrapper { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 30px 42px; + margin-top: 45px; +} +@media (max-width: 575px) { + .integrationcompatibilitywrapper .logoswrapper { + gap: 20px 15px; + } +} +.integrationcompatibilitywrapper .logoswrapper img { + max-width: 70px; + max-height: 54px; + -o-object-fit: contain; + object-fit: contain; +} + +.integrationcompatibilitygrid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 42px; +} +@media (max-width: 575px) { + .integrationcompatibilitygrid { + grid-template-columns: repeat(1, 1fr); + } +} + +.integrationcompatibilityitem .title { + margin-top: 0; + margin-bottom: 20px; + font-size: 24px; +} +.integrationcompatibilityitem p { + margin: 0; +} +.integrationcompatibilityitem .cmnButton { + margin-top: 20px; +} + +.codesection { + padding-bottom: 120px; +} +@media (max-width: 575px) { + .codesection { + padding-bottom: 60px; + } +} + +.supportsection { + padding-bottom: 90px; +} +@media (max-width: 991px) { + .supportsection { + padding-bottom: 60px; + } +} + +.supportgrid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 28px; +} +@media (max-width: 991px) { + .supportgrid { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 767px) { + .supportgrid { + grid-template-columns: repeat(1, 1fr); + } +} + +.supportitem { + padding: 24px 24px 34px; + border-radius: 26px; + background-color: #313131; + position: relative; + display: flex; + gap: 28px; +} +@media (max-width: 1199px) { + .supportitem .icon { + max-width: 42px; + flex-shrink: 0; + } + .supportitem .icon img { + width: 100%; + } +} +.supportitem .title { + margin-top: 0; + font-size: 34px; + margin-bottom: 10px; +} +.supportitem p { + line-height: 2; +} +.supportitem .cmnButton { + align-self: flex-start; + font-size: 12px; + padding-top: 0; + padding-bottom: 2px; + padding-inline: 20px; +} +.supportitem::before { + position: absolute; + content: ""; + left: -1px; + top: -1px; + right: -1px; + bottom: -1px; + background: linear-gradient(135deg, #fff 0%, rgba(255, 255, 255, 0.1) 120%); + z-index: -1; + border-radius: 26px; +} + +.supportitem .content { + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.footer { + background-color: #1c1c1c; + border-top: 1px solid #4d4d4d; + padding-top: 50px; + padding-bottom: 40px; +} + +.footerwrapper { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 40px 0; +} +@media (max-width: 991px) { + .footerwrapper { + grid-template-columns: repeat(2, 1fr); + } +} +@media (max-width: 575px) { + .footerwrapper { + grid-template-columns: repeat(1, 1fr); + } +} + +.footerwidget { + max-width: -moz-fitcontent; + max-width: fitcontent; +} +.footerwidget:nth-child(2) { + margin-inline: auto; +} +@media (max-width: 991px) { + .footerwidget:nth-child(2) { + margin: 0; + } +} +.footerwidget:nth-child(3) { + margin-inline: auto; +} +@media (max-width: 991px) { + .footerwidget:nth-child(3) { + margin: 0; + } +} +.footerwidget .title { + font-size: 24px; + margin-top: 0; +} +.footerwidget .footerlinks { + margin: 0; + padding: 0; + list-style-type: none; + display: flex; + flex-direction: column; + gap: 24px; +} +.footerwidget .footerlinks li a { + text-decoration: none; +} + +.copyright { + text-align: center; + margin-top: 40px; +} + +.codeheader { + display: flex; + align-items: center; + justify-content: space-between; + font-size: 12px; + padding: 8px 16px; + background-color: #262626; + border-radius: 4px 4px 0 0; +} +.codeheader .title { + font-weight: 500; +} + +.codecontainer { + display: flex; + background-color: #343434; + color: #dcdcdc; + border-radius: 0 0 4px 4px; + overflow: auto; + font-family: "Courier New", monospace; + font-size: 14px; + line-height: 1.5; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); +} +.codecontainer .linenumbers { + text-align: right; + margin-right: 10px; + color: #888; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + padding-right: 10px; + padding-left: 8px; + border-right: 1px solid #444; + padding-top: 15px; +} +.codecontainer .linenumbers div { + line-height: 1.385; +} + +.code { + white-space: pre; + padding: 10px; +} + +.codecontainer .codecontent { + background-color: transparent; +} + +.codecontent .codeline { + min-height: 19.28px; +} diff --git a/docs/src/css/styles.css b/docs/src/css/styles.css new file mode 100644 index 00000000..36272b9c --- /dev/null +++ b/docs/src/css/styles.css @@ -0,0 +1,33 @@ +.remove-default-components nav.navbar.navbar--fixed-top { + display: none !important; +} + +.remove-default-components .footer.footer--dark { + display: none !important; +} + +.landing-page-container { + margin: 0; + padding: 0; + color: #ffffff; + background-color: #121212; + font-family: "Chivo", sans-serif; + line-height: 1.5; +} + +.custom-a a { + color: inherit; + display: inline-block; +} + +.custom-head h1, +.custom-head h2, +.custom-head h3 { + line-height: 1.25; + font-weight: 500; +} + +/* .custom-img img { + vertical-align: middle; + width: 100%; +} */ diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx index 77f06dad..a9205c32 100644 --- a/docs/src/pages/index.tsx +++ b/docs/src/pages/index.tsx @@ -1,28 +1,38 @@ -import Link from "@docusaurus/Link"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import HomepageFeatures from "@site/src/components/HomepageFeatures"; import Layout from "@theme/Layout"; -import clsx from "clsx"; +import { useLocation } from "react-router-dom"; // There should be a line here that says // import React from "react"; // VSCode might try to delete it, but that will break the site. -import React from "react"; -import styles from "./index.module.css"; +import { useEffect, useState } from "react"; +import baseStyles from '../css/style.module.css'; +import "../css/styles.css"; function HomepageHeader() { const { siteConfig } = useDocusaurusContext(); + const [isActive, setIsActive] = useState(false); + const toggleMenu = () => { + setIsActive((prevState) => !prevState); + }; + + return ( -
-
-

{siteConfig.title}

-

{siteConfig.tagline}

-
- - Tutorial - ⏱️ 5 min - +
+
+
+ logo + +
@@ -32,6 +42,42 @@ function HomepageHeader() { export default function Home(): JSX.Element { const { siteConfig } = useDocusaurusContext(); + const location = useLocation(); + const isBasePath = location.pathname === "/python-sdk/"; + + useEffect(() => { + // Add or remove the class on the tag + const mainWrapper = document.querySelector('#__docusaurus') + + if (isBasePath) { + mainWrapper.classList.add("remove-default-components", "landing-page-container", "custom-head", "custom-a", "custom-img"); + } else { + mainWrapper.classList.remove("remove-default-components", "landing-page-container", "custom-head", "custom-a", "custom-img"); + } + + // Cleanup on component unmount + return () => { + mainWrapper.classList.remove("remove-default-components", "landing-page-container", "custom-head", "custom-a", "custom-img"); + }; + }, [isBasePath]); + +const code = `import groundlight +from framegrab import FrameGrabber + +# Initialize Groundlight client and create a Detector +gl = groundlight.Groundlight() +detector = gl.get_or_create_detector(name="doorway", query="Is the doorway open?") + +# Grab an image from a camera or video stream +grabber = list(FrameGrabber.autodiscover().values())[0] +image = grabber.grab() + +# Process image and get a confident answer to the Detector's query +image_query = gl.ask_confident(detector, image) +print(image_query)`; +// Split the code into lines + const codeLines = code.split("\n"); + return (
- +
+
+
+

Build custom computer vision apps - faster & more reliably

+
+

With Groundlight’s Python SDK, you don’t need to be a machine learning scientist to develop your own + computer vision application. Groundlight’s fully managed computer vision solution takes care of the ML so + you can focus on building.

+ +
+
+
+
+ +
+
+
+
+
+ img +
+
+

AutoML

+

Aspects such as selecting the model architecture, choosing hyperparameters, determining the training + dataset, or managing dataset labels are automated

+
+
+
+
+ img +
+
+

24/7 Human Annotation

+

No need to label all your images yourself, Groundlight system provides annotation by humans, 24/7

+
+
+
+
+ img +
+
+

Fast Edge Inference

+

On-premises deployment, so you can have real-time predictions without having to rely on the cloud

+
+
+
+
+
+ +
+
+

Groundlight integrations and compatibility

+
+
+

Groundlight is compatible across major development platforms and available through a REST API or Python + SDK. Enjoy easy deployments using Arduino, Raspberry Pi, or any number of hardware kits.

+
+ icon + icon + icon + icon + icon + icon + icon + icon +
+
+ +
+
+
+

Python SDK

+

With only a few lines of code, you can have custom computer vision inside your application.

+ Learn More +
+
+

API

+

API to let you access your models in the cloud - no need to run your own models or hardware.

+ Learn More +
+
+

Fast Edge Inference

+

We offer specialized hardware for local inference. Reduce latency, cost, network bandwidth, and energy. +

+ Learn More +
+
+

ROS

+

Seamlessly integrate AI-driven perception into ROS2 projects, enabling natural language queries and + real-time decision-making for smarter, more adaptable robotic systems.

+ Learn More +
+
+
+
+
+
+ +
+
+

Build a working computer vision application in just + a few lines of code:

+
+
Code Block
+
PYTHON
+
+
+ {/* Line numbers container */} +
+ {codeLines.map((_, index) => ( +
{index + 1}
+ ))} +
+ {/* Code container */} +
+        {codeLines.map((line, index) => (
+          
{line === "" ? "" : line}
+ ))} +
+
+
+
+ +
+
+

Connect with us, we’re here to support you:

+
+
+
+ youtube +
+
+
+

YouTube

+

Watch our tutorials and learn how computer vision can be applied to various industries. 

+
+ Go to YouTube +
+
+
+
+ x +
+
+
+

X

+

Follow us at @GroundlightAI - we post about the latest in machine learning and more.

+
+ Follow us on X +
+
+
+
+ support +
+
+
+

Support

+

Reach out to us for questions and get an answer from a real human being.

+
+ Contact us +
+
+
+
+
+ +
); -} +} \ No newline at end of file diff --git a/docs/static/img/brain1.png b/docs/static/img/brain1.png new file mode 100644 index 00000000..cb94fe8b Binary files /dev/null and b/docs/static/img/brain1.png differ diff --git a/docs/static/img/brain2.png b/docs/static/img/brain2.png new file mode 100644 index 00000000..08ce6fc7 Binary files /dev/null and b/docs/static/img/brain2.png differ diff --git a/docs/static/img/brain3.png b/docs/static/img/brain3.png new file mode 100644 index 00000000..d9b792bd Binary files /dev/null and b/docs/static/img/brain3.png differ diff --git a/docs/static/img/burger-menu-right-svgrepo-com.svg b/docs/static/img/burger-menu-right-svgrepo-com.svg new file mode 100644 index 00000000..1decc3a2 --- /dev/null +++ b/docs/static/img/burger-menu-right-svgrepo-com.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/docs/static/img/close-svgrepo-com.svg b/docs/static/img/close-svgrepo-com.svg new file mode 100644 index 00000000..14f528a1 --- /dev/null +++ b/docs/static/img/close-svgrepo-com.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/docs/static/img/dev_logo_dark.svg b/docs/static/img/dev_logo_dark.svg new file mode 100644 index 00000000..a28b2b00 --- /dev/null +++ b/docs/static/img/dev_logo_dark.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/static/img/logo-arduino.png b/docs/static/img/logo-arduino.png new file mode 100644 index 00000000..8f1f56a5 Binary files /dev/null and b/docs/static/img/logo-arduino.png differ diff --git a/docs/static/img/logo-aws.png b/docs/static/img/logo-aws.png new file mode 100644 index 00000000..e06cc5f1 Binary files /dev/null and b/docs/static/img/logo-aws.png differ diff --git a/docs/static/img/logo-boston-dynamics.png b/docs/static/img/logo-boston-dynamics.png new file mode 100644 index 00000000..0cb6db72 Binary files /dev/null and b/docs/static/img/logo-boston-dynamics.png differ diff --git a/docs/static/img/logo-github.png b/docs/static/img/logo-github.png new file mode 100644 index 00000000..e67a8796 Binary files /dev/null and b/docs/static/img/logo-github.png differ diff --git a/docs/static/img/logo-nvidia.png b/docs/static/img/logo-nvidia.png new file mode 100644 index 00000000..4096267b Binary files /dev/null and b/docs/static/img/logo-nvidia.png differ diff --git a/docs/static/img/logo-python.png b/docs/static/img/logo-python.png new file mode 100644 index 00000000..ef8bb47c Binary files /dev/null and b/docs/static/img/logo-python.png differ diff --git a/docs/static/img/logo-ras.png b/docs/static/img/logo-ras.png new file mode 100644 index 00000000..81b905d6 Binary files /dev/null and b/docs/static/img/logo-ras.png differ diff --git a/docs/static/img/logo.png b/docs/static/img/logo.png new file mode 100644 index 00000000..eafa9220 Binary files /dev/null and b/docs/static/img/logo.png differ diff --git a/docs/static/img/support.png b/docs/static/img/support.png new file mode 100644 index 00000000..ab631b76 Binary files /dev/null and b/docs/static/img/support.png differ diff --git a/docs/static/img/universal-robotics-logo.png b/docs/static/img/universal-robotics-logo.png new file mode 100644 index 00000000..d1beb361 Binary files /dev/null and b/docs/static/img/universal-robotics-logo.png differ diff --git a/docs/static/img/x.png b/docs/static/img/x.png new file mode 100644 index 00000000..866eac9a Binary files /dev/null and b/docs/static/img/x.png differ diff --git a/docs/static/img/youtube.png b/docs/static/img/youtube.png new file mode 100644 index 00000000..d9943c53 Binary files /dev/null and b/docs/static/img/youtube.png differ