export IMAGE_ROOT_PATH=XXXXXXXXXXXXXXXXXX
export IMAGE_OUTPUT_DIRECTORY=XXXXXXXXXXXXXX
+export VIDEO_ROOT_PATH=XXXXXXXXXXXXXXXXXX
export AWS_ACCESS_KEY_ID=XXXXXXX
export AWS_SECRET_ACCESS_KEY=XXXXXXXX
export AWS_REGION=XXXXXXX
{:exexif, "~> 0.0.5"},
{:hackney, "~> 1.18"},
{:jason, "~> 1.3"},
- {:ecto_sqlite3, "~> 0.12"}
+ {:ecto_sqlite3, "~> 0.12"},
+ {:sweet_xml, "~> 0.6"}
],
config: [
ex_aws: [
end
end
+defmodule Video do
+ use Ecto.Schema
+ import Ecto.Changeset
+
+ schema "videos" do
+ field(:datetime, :utc_datetime)
+ field(:name, :string)
+ field(:hash, :string)
+ field(:original_path, :string)
+ field(:path, :string)
+ field(:uploaded, :boolean, default: false)
+ end
+
+ def changeset(image, attrs) do
+ image
+ |> cast(
+ attrs,
+ ~w[datetime name hash original_path path uploaded]a
+ )
+ end
+end
+
defmodule Migration do
use Ecto.Migration
end
end
+defmodule Migration0 do
+ use Ecto.Migration
+
+ def change do
+ create table("videos") do
+ add(:datetime, :utc_datetime)
+ add(:name, :string)
+ add(:hash, :string)
+ add(:original_path, :string)
+ add(:path, :string)
+ add(:uploaded, :boolean, default: false)
+ end
+ end
+end
+
+defmodule Videos do
+ import Ecto.Query, warn: false
+
+ def parse_root(root_path) do
+ files =
+ root_path
+ |> File.ls!()
+
+ Enum.flat_map(files, &parse_dir(&1, Path.join(root_path, &1)))
+ end
+
+ def parse_dir(dir, path) do
+ project = Path.join(path, "project.mp4")
+ thumb = Path.join(path, "thumbnail.jpg")
+
+ if(File.dir?(path) and File.exists?(project) and File.exists?(thumb)) do
+ stat = File.stat!(project)
+ data = File.read!(project)
+ hash = :crypto.hash(:md5, data)
+ encoded = Base.encode16(hash, case: :lower)
+ file = encoded <> ".mp4"
+
+ v =
+ case Repo.one(from(v in Video, where: v.original_path == ^project)) do
+ nil -> %Video{}
+ vi -> vi
+ end
+
+ cs =
+ Video.changeset(v, %{
+ name: dir,
+ datetime: NaiveDateTime.from_erl!(stat.mtime),
+ hash: encoded,
+ original_path: project,
+ path: "videos/#{file}"
+ })
+
+ cs =
+ if Ecto.Changeset.changed?(cs, :datetime) do
+ Ecto.Changeset.put_change(cs, :uploaded, false)
+ else
+ cs
+ end
+
+ [cs]
+ else
+ []
+ end
+ end
+
+ def create_videos(videos, media_server) do
+ f =
+ EEx.eval_file("templates/videos.html.eex",
+ videos: videos,
+ media_server: media_server,
+ current_tag: "videos"
+ )
+
+ File.write!("../www/videos.html", f)
+
+ Enum.each(videos, fn v ->
+ f =
+ EEx.eval_file("templates/video.html.eex",
+ video: v,
+ media_server: media_server,
+ current_tag: v.name
+ )
+
+ File.write!("../www/videos/#{v.hash}.html", f)
+ end)
+ end
+
+ def upload_new(videos, bucket, region) do
+ new = Enum.reject(videos, & &1.uploaded)
+
+ Enum.each(new, fn %{original_path: src_path, path: dest_path, hash: hash} = record ->
+ [_ | path] =
+ src_path
+ |> String.split("/")
+ |> Enum.reverse()
+
+ thumbnail = ["thumbnail.jpg" | path] |> Enum.reverse() |> Enum.join("/")
+ thumbnail_data = File.read!(thumbnail)
+
+ bucket
+ |> ExAws.S3.put_object("videos/#{hash}.jpg", thumbnail_data,
+ content_type: "image/jpeg",
+ acl: :public_read
+ )
+ |> IO.inspect()
+ |> ExAws.request(region: region)
+ |> IO.inspect()
+
+ src_path
+ |> ExAws.S3.Upload.stream_file()
+ |> ExAws.S3.upload(bucket, dest_path,
+ timeout: :infinity,
+ content_type: "video/mp4",
+ acl: :public_read
+ )
+ |> IO.inspect()
+ |> ExAws.request(region: region)
+ |> IO.inspect()
+ |> handle_result(record)
+ end)
+ end
+
+ def handle_result({:ok, _}, video) do
+ cs = Video.changeset(video, %{uploaded: true})
+ Repo.update(cs)
+ end
+
+ def handle_result({:error, er}), do: IO.inspect(er)
+end
+
defmodule Images do
import Ecto.Query, warn: false
_ok = Repo.__adapter__().storage_up(Repo.config())
{:ok, _} = Supervisor.start_link(children, strategy: :one_for_one)
- Ecto.Migrator.run(Repo, [{0, Migration}], :up, all: true, log_migrations_sql: :debug)
+
+ Ecto.Migrator.run(Repo, [{0, Migration}, {1, Migration0}], :up,
+ all: true,
+ log_migrations_sql: :debug
+ )
end
end
root_path = System.fetch_env!("IMAGE_ROOT_PATH")
+video_root_path = System.fetch_env!("VIDEO_ROOT_PATH")
output_directory = System.fetch_env!("IMAGE_OUTPUT_DIRECTORY")
bucket = System.fetch_env!("AWS_BUCKET_NAME")
region = System.fetch_env!("AWS_REGION")
Images.create_tags(tags, tag_keys, date_keys, media_server)
Images.create_dates(dates, tag_keys, date_keys, media_server)
Images.upload_new(images, bucket, region)
+
+videos =
+ video_root_path
+ |> Videos.parse_root()
+ |> Enum.map(&Repo.insert_or_update!/1)
+ |> Enum.sort_by(& &1.datetime, {:desc, DateTime})
+
+Videos.create_videos(videos, media_server)
+Videos.upload_new(videos, bucket, region)
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag"><%= current_tag %></span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="<%= media_server %>/<%= video.path %>" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Media | </span><span id="tag">Videos</span>
+ </header>
+ <main>
+ <section id="media">
+ <%= for i <- videos do %>
+ <article class="video">
+ <a href="/videos/<%= i.hash %>">
+ <img src="<%= media_server %>/videos/<%= i.hash %>.jpg" />
+ </a>
+ <span class="datetime"><%= i.datetime |> DateTime.to_string() |> String.replace_suffix("Z", "") %></span>
+ </article>
+ <% end %>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+html,body{
+ background-color: #232323;
+ width: 100%;
+ margin: 0;
+ color: #cccccc;
+ font-family: sans-serif;
+}
+
+main {
+ max-width: 1024px;
+ margin: auto;
+}
+
+#header{
+ height: 20px;
+ width: 100%;
+ background-color: #111111;
+ margin-bottom: 30px;
+ padding-top: 10px;
+ padding-bottom: 10px;
+}
+
+#header span{
+ margin-left: 10px;
+}
+
+span#tag{
+ color: #22FF22;
+ margin: 0;
+}
+span.datetime{
+ color: #333333;
+ margin-top: 7px;
+ float: right;
+ font-size: 10px;
+}
+
+.video{
+ padding: 7px;
+ padding-bottom: 30px;
+ background-color: #EEEEEE;
+ margin-bottom: 30px;
+}
+
+img{
+ width: 100%;
+ padding-bottom: 33px;
+}
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Media | </span><span id="tag">Videos</span>
+ </header>
+ <main>
+ <section id="media">
+
+ <article class="video">
+ <a href="/videos/3e7ce3ef0b169606cdbe342928719634">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/3e7ce3ef0b169606cdbe342928719634.jpg" />
+ </a>
+ <span class="datetime">2023-10-10 17:13:37</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/096f12b38af0717d3d836dc059021a24">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/096f12b38af0717d3d836dc059021a24.jpg" />
+ </a>
+ <span class="datetime">2023-10-06 14:42:29</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/c58497d555f0886271fe42ae18a69ba9">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/c58497d555f0886271fe42ae18a69ba9.jpg" />
+ </a>
+ <span class="datetime">2023-10-06 01:45:38</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/326f1664b717ebb4a624881df2064332">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/326f1664b717ebb4a624881df2064332.jpg" />
+ </a>
+ <span class="datetime">2023-09-10 22:50:39</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/5d36ea72180a0640549445d93414eb6b">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/5d36ea72180a0640549445d93414eb6b.jpg" />
+ </a>
+ <span class="datetime">2023-09-09 18:56:58</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/a51ffdbe691059d692706ecd511eb756">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/a51ffdbe691059d692706ecd511eb756.jpg" />
+ </a>
+ <span class="datetime">2023-09-01 14:49:26</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/d1680f15b97bbe30f087cb95cc4a778c">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/d1680f15b97bbe30f087cb95cc4a778c.jpg" />
+ </a>
+ <span class="datetime">2023-08-30 18:00:21</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/ab0f82d4281c57188c9f7e335aea6a65">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/ab0f82d4281c57188c9f7e335aea6a65.jpg" />
+ </a>
+ <span class="datetime">2023-08-21 18:50:32</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/0de505a86fe73b5f7af5f15115bf789f">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/0de505a86fe73b5f7af5f15115bf789f.jpg" />
+ </a>
+ <span class="datetime">2023-08-18 00:37:40</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/871d582560962db4cbd0593000d6bf9a">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/871d582560962db4cbd0593000d6bf9a.jpg" />
+ </a>
+ <span class="datetime">2023-08-11 02:41:09</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/3a3063a44387fc9d4f052754ea802733">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/3a3063a44387fc9d4f052754ea802733.jpg" />
+ </a>
+ <span class="datetime">2023-08-10 20:31:30</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/dad6b28a1f34b2d7cb4f7af929ae7c05">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/dad6b28a1f34b2d7cb4f7af929ae7c05.jpg" />
+ </a>
+ <span class="datetime">2023-08-09 16:46:48</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/167e29dc5b7c05c05021395b4cca29e2">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/167e29dc5b7c05c05021395b4cca29e2.jpg" />
+ </a>
+ <span class="datetime">2023-08-08 15:08:29</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/64f7d344c9993bf7837bd5dbcc553207">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/64f7d344c9993bf7837bd5dbcc553207.jpg" />
+ </a>
+ <span class="datetime">2023-08-07 18:41:39</span>
+ </article>
+
+ <article class="video">
+ <a href="/videos/cfeaa8d830c1da8ecf7f8749019c9c44">
+ <img src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/cfeaa8d830c1da8ecf7f8749019c9c44.jpg" />
+ </a>
+ <span class="datetime">2023-08-03 00:14:18</span>
+ </article>
+
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Novi Bike Park | 09-02-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/096f12b38af0717d3d836dc059021a24.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Urbana | 08-12-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/0de505a86fe73b5f7af5f15115bf789f.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">River | 08-07-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/167e29dc5b7c05c05021395b4cca29e2.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">The Church | 09-10-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/326f1664b717ebb4a624881df2064332.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Buggy | 08-09-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/3a3063a44387fc9d4f052754ea802733.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">New Richmond | 10-08-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/3e7ce3ef0b169606cdbe342928719634.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Playground Rip | 08-20-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/3ea6f31ec67c8dad7bc3c20b796bda4c.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Backyard Cruise | 09-08-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/5d36ea72180a0640549445d93414eb6b.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Grand Rapids Bike Park | 08-05-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/64f7d344c9993bf7837bd5dbcc553207.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">The Hulk</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/716e81c5b84a2f691fdf0d183c4d84ea.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Crawlers | 08-10-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/871d582560962db4cbd0593000d6bf9a.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Water Park | 08-27-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/a51ffdbe691059d692706ecd511eb756.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Kanoe the Kazoo | 08-19-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/ab0f82d4281c57188c9f7e335aea6a65.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Backyard | 08-21-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/c567671795fa33a74a1e9b77d2487470.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Skatepark | 09-09-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/c58497d555f0886271fe42ae18a69ba9.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Tip of the Thumb</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/cfeaa8d830c1da8ecf7f8749019c9c44.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Triponds | 08-26-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/d1680f15b97bbe30f087cb95cc4a778c.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>
--- /dev/null
+<!DOCTYPE html>
+<html lang="en-US">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <link rel="icon" type="image/x-icon" href="/img/connected.png">
+ <link rel="stylesheet" type="text/css" href="/css/videos.css">
+ </head>
+ <body>
+ <header id="header">
+ <span>Video | </span><span id="tag">Tunnel Park | 08-08-2023</span>
+ </header>
+ <main>
+ <section id="media">
+ <article class="video">
+ <video>
+ <source src="https://entropealabs-media.s3.us-east-2.amazonaws.com/videos/dad6b28a1f34b2d7cb4f7af929ae7c05.mp4" />
+ </video>
+ </article>
+ </section>
+ </main>
+ <a rel="me" href="https://mastodon.social/@entropealabs"></a>
+ </body>
+</html>