maringetxway commited on
Commit
daefd86
·
verified ·
1 Parent(s): 1df2674

Upload 6 files

Browse files
Files changed (7) hide show
  1. .gitattributes +1 -0
  2. hf (1).png +0 -0
  3. index (3).html +187 -0
  4. main (2).js +27 -0
  5. seeedstudio.png +0 -0
  6. sponsors.png +3 -0
  7. style (2).css +20 -0
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ sponsors.png filter=lfs diff=lfs merge=lfs -text
hf (1).png ADDED
index (3).html ADDED
@@ -0,0 +1,187 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <title>LeRobot Worldwide Hackathon – Winners</title>
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <!-- Tailwind CSS -->
8
+ <script src="https://cdn.tailwindcss.com"></script>
9
+ <!-- React 18 UMD -->
10
+ <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script>
11
+ <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>
12
+ </head>
13
+ <body class="bg-[#FF9D00]">
14
+ <div id="root"></div>
15
+
16
+ <script type="text/javascript">
17
+ const { useState, useEffect } = React;
18
+
19
+ /**
20
+ * Utility: extract rank & team # from a filename "<rank>-<team>-... .mp4"
21
+ */
22
+ function parseRankTeam(filepath) {
23
+ const name = filepath.split("/").pop();
24
+ const m = name.match(/^(\d+)-(\d+)-/);
25
+ return m ? { rank: +m[1], team: +m[2] } : { rank: null, team: null };
26
+ }
27
+
28
+ function App() {
29
+ const [videos, setVideos] = useState([]);
30
+ const [teamDatasets, setTeamDatasets] = useState({});
31
+
32
+ useEffect(() => {
33
+ async function fetchAssets() {
34
+ // Fetch video files
35
+ const tree = await (
36
+ await fetch(
37
+ "https://huggingface.co/api/datasets/maringetxway/all-winners/tree/main"
38
+ )
39
+ ).json();
40
+
41
+ const videoFiles = tree
42
+ .filter((f) => f.path.endsWith(".mp4"))
43
+ .map((f) => {
44
+ const { rank, team } = parseRankTeam(f.path);
45
+ return {
46
+ url: `https://huggingface.co/datasets/maringetxway/all-winners/resolve/main/${encodeURIComponent(
47
+ f.path
48
+ )}`,
49
+ rank,
50
+ team,
51
+ };
52
+ })
53
+ .sort((a, b) => a.rank - b.rank);
54
+ setVideos(videoFiles);
55
+
56
+ // Fetch datasets by team (optional links)
57
+ const datasets = await (
58
+ await fetch(
59
+ "https://huggingface.co/api/datasets?author=maringetxway"
60
+ )
61
+ ).json();
62
+ const map = {};
63
+ datasets.forEach(({ id }) => {
64
+ const m = id.match(/maringetxway\/team[_-]?(\d+)/i);
65
+ if (m) {
66
+ const t = +m[1];
67
+ if (!map[t]) map[t] = [];
68
+ map[t].push(
69
+ `https://huggingface.co/spaces/lerobot/visualize_dataset?dataset=${id}`
70
+ );
71
+ }
72
+ });
73
+ setTeamDatasets(map);
74
+ }
75
+
76
+ fetchAssets();
77
+ }, []);
78
+
79
+ return React.createElement(
80
+ "div",
81
+ { className: "min-h-screen py-10 px-4 max-w-3xl mx-auto" },
82
+ /* Heading */
83
+ React.createElement(
84
+ "h1",
85
+ {
86
+ className:
87
+ "text-center text-4xl font-bold text-white mb-4 drop-shadow-lg",
88
+ },
89
+ "LeRobot Worldwide Hackathon – Winners"
90
+ ),
91
+ /* Description */
92
+ React.createElement(
93
+ "p",
94
+ {
95
+ className:
96
+ "font-bold text-white text-center whitespace-pre-line mb-10 leading-relaxed",
97
+ },
98
+ `🏆 €15,000 in robotics hardware prizes \n\n `
99
+ ),
100
+ React.createElement(
101
+ "p",
102
+ {
103
+ className:
104
+ "text-white text-center whitespace-pre-line mb-10 leading-relaxed",
105
+ },
106
+ `🙌 Here’s a sneak peek at the prizes up for grabs in collaboration with SeeedStudio:\n\n🥇 1st to 3rd place teams: 1 Hope Jr Arm & 1 LeKiwi per team\n\n🥈 4th and 5th place teams: 1 Hope Jr Arm per team\n\n🥉 6th to 24th place teams: 1 LeKiwi per team\n\n🥉 25th to 30th place teams: 1 SO-101 per team\n\nA huge shoutout to everyone for your hard work and passion! It was truly tough to pick the top 30 – there were so many amazing demo videos, and we’re absolutely blown away. We also had a lot of laughs along the way!`
107
+ ),
108
+ /* Logos */
109
+ React.createElement(
110
+ "div",
111
+ { className: "flex justify-center items-center gap-6 mb-4" },
112
+ React.createElement("img", {
113
+ src: "seeedstudio.png",
114
+ alt: "Seeed Studio logo",
115
+ className: "h-12 w-auto",
116
+ }),
117
+ React.createElement("img", {
118
+ src: "hf.png",
119
+ alt: "Hugging Face logo",
120
+ className: "h-12 w-auto",
121
+ })
122
+ ),
123
+ /* Videos */
124
+ ...videos.map((video, idx) =>
125
+ React.createElement(
126
+ "section",
127
+ { key: idx, className: "mb-16" },
128
+ React.createElement(
129
+ "h2",
130
+ {
131
+ className:
132
+ "text-2xl font-semibold text-white mb-4 flex items-center gap-2",
133
+ },
134
+ `#${video.rank}`,
135
+ React.createElement(
136
+ "span",
137
+ { className: "text-base font-normal text-white/80" },
138
+ `– Team ${video.team ?? "?"}`
139
+ )
140
+ ),
141
+ React.createElement("video", {
142
+ src: video.url,
143
+ controls: true,
144
+ className: "w-full rounded-xl shadow-2xl",
145
+ }),
146
+ teamDatasets[video.team] &&
147
+ React.createElement(
148
+ "div",
149
+ { className: "mt-2 space-y-1" },
150
+ teamDatasets[video.team].map((url, j) =>
151
+ React.createElement(
152
+ "a",
153
+ {
154
+ key: j,
155
+ href: url,
156
+ target: "_blank",
157
+ className:
158
+ "text-sm text-blue-200 underline hover:text-white",
159
+ },
160
+ `Dataset: ${url.split("=")[1]}`
161
+ )
162
+ )
163
+ )
164
+ )
165
+ ),
166
+ /* Sponsors section */
167
+ React.createElement(
168
+ "div",
169
+ {
170
+ className:
171
+ "bg-white rounded-xl shadow-lg p-8 mt-20 flex justify-center",
172
+ },
173
+ React.createElement("img", {
174
+ src: "sponsors.png",
175
+ alt: "Sponsors",
176
+ className: "max-w-full h-auto",
177
+ })
178
+ )
179
+ );
180
+ }
181
+
182
+ ReactDOM.createRoot(document.getElementById("root")).render(
183
+ React.createElement(App)
184
+ );
185
+ </script>
186
+ </body>
187
+ </html>
main (2).js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ async function loadVideos() {
2
+ try {
3
+ const response = await fetch("https://datasets-server.huggingface.co/rows?dataset=maringetxway/all-winners&config=default&split=train&offset=0&limit=30");
4
+ const data = await response.json();
5
+
6
+ const container = document.getElementById("videoContainer");
7
+
8
+ data.rows.forEach(row => {
9
+ const videoUrl = row.row.video; // Assumes each row has a `video` field
10
+ if (videoUrl) {
11
+ const video = document.createElement("video");
12
+ video.src = videoUrl;
13
+ video.controls = true;
14
+ video.autoplay = false;
15
+ video.muted = true;
16
+ video.loop = false;
17
+ video.playsInline = true;
18
+ video.className = "w-full mb-4 rounded-lg shadow-md"; // Optional styling
19
+ container.appendChild(video);
20
+ }
21
+ });
22
+ } catch (error) {
23
+ console.error("Error loading videos:", error);
24
+ }
25
+ }
26
+
27
+ loadVideos();
seeedstudio.png ADDED
sponsors.png ADDED

Git LFS Details

  • SHA256: 6909d1ee474cc10650f2fb00e44312703c31baf7250b4712571865dc39822fda
  • Pointer size: 132 Bytes
  • Size of remote file: 1.47 MB
style (2).css ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ body {
2
+ font-family: Arial, sans-serif;
3
+ background-color: #FF9D00;
4
+ margin: 0;
5
+ padding: 20px;
6
+ }
7
+ .video-grid {
8
+ display: flex;
9
+ flex-wrap: wrap;
10
+ gap: 20px;
11
+ justify-content: center;
12
+ }
13
+ .video-grid video {
14
+ width: 320px;
15
+ height: 180px;
16
+ object-fit: cover;
17
+ border: 2px solid #ccc;
18
+ border-radius: 8px;
19
+ }
20
+