blog-vt2EXAMPLE.md2 matches
40- Item 3
4142### Images
4344Images can be included using markdown syntax.
4546## Conclusion
17<meta charSet="UTF-8" />
18<meta name="viewport" content="width=device-width, initial-scale=1.0" />
19<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
2021<title>{title}</title>
28<meta property="og:description" content={description} />
29{/*
30<meta property="og:image" content={socialImage} />
31*/}
3233{/* Twitter */}
34<meta property="twitter:card" content="summary_large_image" />
35<meta property="twitter:url" content={BLOG_URL} />
36<meta property="twitter:title" content={title} />
37<meta property="twitter:description" content={description} />
38{/*
39<meta property="twitter:image" content={socialImage} />
40*/}
41
blogfavicon.svg.ts1 match
13{
14headers: {
15"Content-Type": "image/svg+xml",
16},
17},
1Eventually we should host all our images properly, but for now, drag and drop them here 👇
23* https://imagedelivery.net/iHX6Ovru0O7AjmyT5yZRoA/4d90a6f7-247c-4df4-3de6-928364e10000/public
4* https://imagedelivery.net/iHX6Ovru0O7AjmyT5yZRoA/f175100b-a190-4772-7056-04c09f273a00/public
spagindex.html30 matches
17<br />
1819Replace <code>name</code> with the name you gave the image.
20</p>
2199<audio controls style="display: none" id="preview-audio"></audio>
100</div>
101<input type="file" id="file" accept="audio/*, image/*" required />
102</label>
103<label for="singing">
138const nameInput = document.getElementById("name");
139const fileInput = document.getElementById("file");
140const previewImage = document.getElementById("preview");
141const previewAudio = document.getElementById("preview-audio");
142const uploadButton = document.getElementById("upload-button");
153reader.onload = () => {
154const dataUrl = reader.result;
155previewImage.src = dataUrl; // the form just grabs whatever is here and uploads this, which may even be audio
156previewAudio.src = dataUrl;
157};
166});
167168previewImage.addEventListener("load", () => {
169previewImage.style.display = "block";
170});
171174});
175176previewImage.addEventListener("error", () => {
177previewImage.style.display = "none";
178});
179226event.preventDefault();
227const name = encodeURIComponent(nameInput.value);
228const dataUrl = previewImage.src;
229const body = JSON.stringify({ name, dataUrl });
230uploadButton.disabled = true;
238nameInput.value = "";
239fileInput.value = "";
240previewImage.src = "";
241previewAudio.src = "";
242} else {
320321const contentType = response.headers.get("content-type");
322if (contentType.startsWith("image")) {
323const imageElement = document.createElement("img");
324imageElement.loading = "lazy";
325imageElement.style.width = "100%";
326imageElement.style.objectFit = "contain";
327imageElement.style.height = "300px";
328// src the response
329const blob = await response.blob();
330imageElement.src = URL.createObjectURL(blob);
331imageElement.onerror = () => {
332imageElement.remove();
333};
334previewContainer.appendChild(imageElement);
335} else if (contentType.startsWith("audio")) {
336const audioElement = document.createElement("audio");
368});
369370// const imageElement = document.createElement("img");
371// imageElement.loading = "lazy";
372// imageElement.src = `https://tode.party?${upload.name}`;
373// imageElement.style.width = "100%";
374// imageElement.style.objectFit = "contain";
375// imageElement.style.border = "1px solid rgb(159, 174, 238)";
376// imageElement.style.backgroundColor = "rgb(55, 67, 98)";
377// imageElement.style.height = "300px";
378// imageElement.onerror = () => {
379// imageElement.remove();
380// };
381
blob_adminREADME.md1 match
3This is a lightweight Blob Admin interface to view and debug your Blob data.
45
67Versions 0-17 of this val were done with Hono and server-rendering.
blob_adminmain.tsx5 matches
440{profile && (
441<div className="flex items-center space-x-4">
442<img src={profile.profileImageUrl} alt="Profile" className="w-8 h-8 rounded-full" />
443<span>{profile.username}</span>
444<a href="/auth/logout" className="text-blue-400 hover:text-blue-300">Logout</a>
583alt="Blob content"
584className="max-w-full h-auto"
585onError={() => console.error("Error loading image")}
586/>
587</div>
635<li>Create public shareable links for blobs</li>
636<li>View and manage public folder</li>
637<li>Preview images directly in the interface</li>
638</ul>
639</div>
706const { ValTown } = await import("npm:@valtown/sdk");
707const vt = new ValTown();
708const { email: authorEmail, profileImageUrl, username } = await vt.me.profile.retrieve();
709// const authorEmail = me.email;
710774775c.set("email", email);
776c.set("profile", { profileImageUrl, username });
777await next();
778};
Open-ToownieuseChatLogic.ts4 matches
9bearerToken: string;
10selectedFiles: string[];
11images: (string | null)[];
12soundEnabled: boolean;
13}
19bearerToken,
20selectedFiles,
21images,
22soundEnabled,
23}: UseChatLogicProps) {
41anthropicApiKey,
42selectedFiles,
43images: images
44.filter((img): img is string => {
45const isValid = typeof img === "string" && img.startsWith("data:");
46if (!isValid && img !== null) {
47console.warn("Invalid image format:", img?.substring(0, 50) + "...");
48}
49return isValid;
Open-ToownieTODOs.md1 match
30- [x] File write as a code embed
31- [x] str_replace as a diff view
32- [x] make image drop area invisible and bigger
33- [x] Give it all the code (except maybe .txt files) as initial context (like cursor sonnet max)
34- [x] I seem to have lost the delete file tool and instructions, try to find them back in history or re-create?
Open-Toowniesystem_prompt.txt10 matches
12- If a section of code that you're working on is getting too complex, consider refactoring it into subcomponents
1314## Image Handling
1516- When users upload images, carefully analyze them to understand their content
17- Reference specific details from the images in your responses
18- If multiple images are uploaded, consider their relationship to each other
19- For code-related images (screenshots, diagrams), extract relevant information and incorporate it into your solutions
20- For UI mockups or design images, use them as reference for layout and design, use the colors from the image
21- When images contain text or code, transcribe relevant portions as needed
22- If image content is unclear, ask clarifying questions about what the user wants you to focus on
2324## Technical Requirements
95## Val Town Platform Specifics
96- **Redirects:** Use `return new Response(null, { status: 302, headers: { Location: "/place/to/redirect" }})` instead of `Response.redirect` which is broken
97- **Images:** Avoid external images or base64 images. Use emojis, unicode symbols, or icon fonts/libraries instead
98- For AI-generated images, use: `https://maxm-imggenurl.web.val.run/the-description-of-your-image`
99- **Storage:** DO NOT use the Deno KV module for storage
100- **Browser APIs:** DO NOT use the `alert()`, `prompt()`, or `confirm()` methods