<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Reka</title>
    <description>The latest articles on Forem by Reka (@reka).</description>
    <link>https://forem.com/reka</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F11538%2F74de3ace-aa9d-486c-9e4d-c5b5d4f28224.png</url>
      <title>Forem: Reka</title>
      <link>https://forem.com/reka</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/reka"/>
    <language>en</language>
    <item>
      <title>Apps That See: Bringing Vision AI to Your Projects</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Tue, 05 May 2026 20:12:58 +0000</pubDate>
      <link>https://forem.com/reka/apps-that-see-bringing-vision-ai-to-your-projects-7l1</link>
      <guid>https://forem.com/reka/apps-that-see-bringing-vision-ai-to-your-projects-7l1</guid>
      <description>&lt;p&gt;I was wearing a t-shirt with a partial Reka logo at the edge of the frame. I never said the word "Reka" in that segment. The model caught the logo, connected it to the topic I was discussing, and mentioned it unprompted in the output it generated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Folevzfnpfervpl4egld0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Folevzfnpfervpl4egld0.jpg" alt="Frank in a video with a Reka t-shirt" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is not a transcript trick. The model was watching.&lt;/p&gt;

&lt;p&gt;At the AI Agents Conference 2026, I gave a talk called "Apps That See" — six live demos showing how to build applications that understand images and video. Every project is open source and ready to clone. This post walks through each one so you have enough context to pick it up, run it, and adapt it to something useful in your own work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vision AI Is Accessible Now
&lt;/h2&gt;

&lt;p&gt;Not long ago, working with visual AI meant GPU clusters, specialized teams, and weeks of training. Today a compressed 4B model like Qwen or Gemini 3 runs on a regular laptop and handles image description well enough to prototype. Step up to a 7B model like Reka Edge and the quality improves meaningfully. It also runs locally: a gaming PC with a decent GPU is enough. No server required.&lt;/p&gt;

&lt;p&gt;For tasks that need more power, cloud APIs give you faster results without local hardware requirements. The tradeoff is that your images and video go to a third-party provider. For corridor cameras or stock photos that is usually acceptable. For private or sensitive content, local is the better default.&lt;/p&gt;

&lt;p&gt;The practical pattern: start local to build and test, then decide whether the task actually requires cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Build With This
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt;: Describe a scene in real time for visually impaired users, or identify objects on demand. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content creation&lt;/strong&gt;: Extract structure from a video and turn it into a blog post, caption set, or highlight reel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Productivity&lt;/strong&gt;: Search through thousands of videos for a specific object or topic, even when the title gives no indication of the content.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation&lt;/strong&gt;: Trigger actions only when specific visual conditions are met, such as an unrecognized person entering a room.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fun&lt;/strong&gt;: Most developers' first contact with AI is building something for themselves, and that is a perfectly valid starting point.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Demo 1: Caption This — Generate a Prompt from Any Image
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/fboucher/caption-this" rel="noopener noreferrer"&gt;fboucher/caption-this&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you work with image generation models, you end up with a lot of images to test and compare. Writing the text prompt that would reproduce a specific image is tedious. This tool does it for you: give it an image, get back a prompt you can use to regenerate something similar.&lt;/p&gt;

&lt;p&gt;The demo uses an HTTP client extension in VS Code to call the API directly, no SDK. Pass an image, ask for a plain-text prompt that would recreate it. One prompt detail that improved results noticeably: add &lt;code&gt;no markdown&lt;/code&gt; to the instruction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.reka.ai/v1/chat
Content-Type: application/json

{
  "model": "reka-flash",
  "messages": [{
    "role": "user",
    "content": [
      { "type": "image_url", "image_url": { "url": "https://..." } },
      { "type": "text", "text": "Write a prompt in plain text, no markdown, that would generate the exact same image." }
    ]
  }]
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing to know when testing this across different models: some accept an image URL directly, others require the image as a base64-encoded string. Same task, same prompt, different input contract. If you plan to swap models in your app, account for this difference from the start.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo 2: Media Library — Compare Vision Models Side by Side
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/fboucher/media-library" rel="noopener noreferrer"&gt;fboucher/media-library&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a web app that connects to multiple vision backends and lets you switch between them at runtime. The motivation: benchmark Reka Edge running locally — via OpenRouter or directly through the Reka API — against other models on real tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6k8vq7i9rh3ntb1ti9m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx6k8vq7i9rh3ntb1ti9m.jpg" alt="Media Library App interface" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Object detection surfaces the biggest portability problem. Some models return bounding boxes in an HTML-style bracket format with pixel coordinates. Others use a 2D box structure with a different coordinate scheme. If you code against one format and then swap models, your rendering breaks. There is no standard here — handle the differences at the application layer, not the model layer.&lt;/p&gt;

&lt;p&gt;The app uses the OpenAI API format as the common interface across all backends. Any model with a compatible endpoint can be swapped in with minimal changes. It does not eliminate the per-model quirks, but it reduces the friction of switching to a configuration change rather than a rewrite.&lt;/p&gt;

&lt;p&gt;Video input is supported too, though far fewer models handle it than images. Of the models tested, Reka Edge is the standout for video — the others either reject it or behave inconsistently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo 3: Video2Blog — Turn a Video into a Structured Post
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/fboucher/video2blog" rel="noopener noreferrer"&gt;fboucher/video2blog&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I built this for myself. I do a lot of tutorial videos and I wanted a tool that would turn a recording into a structured blog post without me having to write one from scratch.&lt;/p&gt;

&lt;p&gt;The tool sends the video to a vision model with a detailed prompt: target structure, tone, format, and an instruction to flag moments where a screenshot would add value. The model returns timestamps — it cannot extract frames itself, but it tells you exactly where to look, and you pull them locally with ffmpeg.&lt;/p&gt;

&lt;p&gt;That creates one architectural quirk worth knowing: the video lives in two places. ffmpeg needs it locally to extract frames. The hosted model needs it uploaded to analyze content. For a one-evening project it works well enough, and I use it often enough that it has paid for itself many times over.&lt;/p&gt;

&lt;p&gt;After the first draft, you stay in a conversation loop: change the tone, translate to French, swap a timestamp, restructure a section. The model holds context and iterates with you until the result is what you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo 4: Video Analyzer — Search and Query Your Video Library
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/reka-ai/api-examples-dotnet" rel="noopener noreferrer"&gt;reka-ai/api-examples-dotnet&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most video search runs on titles, descriptions, and transcribed audio. This demo searches by what is actually visible on screen.&lt;/p&gt;

&lt;p&gt;The app pre-indexes a video library by sending each video through a vision model ahead of time. When a query arrives, the heavy work is already done. A search for "robot arm" returns the right video — a clip of a robotic arm animation. It also returns a false positive: fast-moving hands apparently looked close enough to fool the model. Useful, not perfect, and worth designing around in your UX.&lt;/p&gt;

&lt;p&gt;The Q&amp;amp;A feature goes further. You pick a video and ask a specific question. "What database was used?" returned MySQL — and noted it was running in a Docker container. The model identified that from watching the screen, not from audio. No transcript needed.&lt;/p&gt;

&lt;p&gt;From there, you can generate study materials from any recorded session. The demo produces a multiple-choice quiz with answer options, correct answers, and explanations. The model is doing comprehension, not transcription.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo 5: Roast My Life — What the Model Actually Sees
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Source: &lt;a href="https://github.com/reka-ai/api-examples-python" rel="noopener noreferrer"&gt;reka-ai/api-examples-python&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I never mentioned the pictures on my wall. The model did.&lt;/p&gt;

&lt;p&gt;In a video about Python and AI, the model's generated blog post made a remark about the artwork hanging behind me. I had said nothing about it. The model noticed, mentioned it, and moved on as if it were obvious.&lt;/p&gt;

&lt;p&gt;Then there was the t-shirt moment described at the top of this post. A partial logo, half out of frame, no mention of it anywhere in the audio — and the model connected it to the topic anyway.&lt;/p&gt;

&lt;p&gt;This demo is named Roast My Life because the model ends up commenting on things you never intended to share. But the real point is what it reveals: a vision model is not a smarter transcript. It is watching. The larger models do this particularly well, and once you see it, it changes how you think about what these tools can do — and what they will pick up without you asking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo 6: N8N Automation — No-Code Video Clipping Pipeline
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Sources: &lt;a href="https://github.com/reka-ai/clip-api-examples" rel="noopener noreferrer"&gt;reka-ai/clip-api-examples&lt;/a&gt; · &lt;a href="https://github.com/reka-ai/n8n-nodes-reka" rel="noopener noreferrer"&gt;reka-ai/n8n-nodes-reka&lt;/a&gt; · &lt;a href="https://n8n.io/integrations/reka-vision" rel="noopener noreferrer"&gt;N8N Reka Vision integration&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vision AI does not always need custom code. This demo wires everything together in N8N, a visual workflow tool, with no programming required.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5r9ncg456hkqgbytrz3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5r9ncg456hkqgbytrz3.png" alt="N8N workflow template for clipping YouTube videos" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The trigger is a new video published to YouTube. The workflow finds an engaging clip, reformats it from horizontal to vertical, adds captions in a specific style (all lowercase, specific colors — chosen to be obviously distinct from any default), and sends an email with the finished clip attached. The whole thing runs automatically.&lt;/p&gt;

&lt;p&gt;For developers, this pattern is worth knowing even if you code everything else. Many real business workflows have a vision AI step that fits cleanly into a larger automation, and a no-code tool is often the fastest way to ship it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Watch the Full Talk
&lt;/h2&gt;

&lt;p&gt;The demos above are the written version. The live version, with the actual code running, models responding in real time, and a few things going sideways in interesting ways, is on YouTube.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/Qe8iWkbhJnM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=Qe8iWkbhJnM" rel="noopener noreferrer"&gt;Watch "Apps That See" from the AI Agents Conference 2026&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  All the Code
&lt;/h2&gt;

&lt;p&gt;The demos span Python, C#, raw HTTP, Go, and N8N. Vision AI is not tied to a specific stack — if your environment can make an HTTP request, it can call a vision model.&lt;/p&gt;

&lt;p&gt;All projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/fboucher/caption-this" rel="noopener noreferrer"&gt;Caption This&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fboucher/media-library" rel="noopener noreferrer"&gt;Media Library&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/fboucher/video2blog" rel="noopener noreferrer"&gt;Video2Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/reka-ai/api-examples-dotnet" rel="noopener noreferrer"&gt;Video Analyzer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/reka-ai/api-examples-python" rel="noopener noreferrer"&gt;Roast My Life&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/reka-ai/clip-api-examples" rel="noopener noreferrer"&gt;Reka Clip API Examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/reka-ai/n8n-nodes-reka" rel="noopener noreferrer"&gt;N8N Nodes for Reka&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://n8n.io/integrations/reka-vision" rel="noopener noreferrer"&gt;N8N Reka Vision Integration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Bringing Reka Edge to Your Workflow via OpenRouter</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Tue, 14 Apr 2026 13:22:11 +0000</pubDate>
      <link>https://forem.com/reka/bringing-reka-edge-to-your-workflow-via-openrouter-2bgh</link>
      <guid>https://forem.com/reka/bringing-reka-edge-to-your-workflow-via-openrouter-2bgh</guid>
      <description>&lt;p&gt;Reka Edge, Reka's latest multimodal model, is now available on OpenRouter. In a previous post we ran the model locally using vLLM. This time, we connect the same app to OpenRouter so we can switch between models by changing a connection string and a model ID.&lt;/p&gt;

&lt;p&gt;More of a visual learner? Grab some popcorn and watch the video. Prefer to read? Skip right past it, the full walkthrough continues below.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/0SZhcPe7ljQ"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The full source code is available at &lt;a href="https://github.com/fboucher/media-library" rel="noopener noreferrer"&gt;github.com/fboucher/media-library&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why Use OpenRouter?
&lt;/h2&gt;

&lt;p&gt;OpenRouter is the largest AI gateway for developers. It gives you a single, unified API to access all major models. The OpenAI SDK works out of the box, so there is nothing new to learn.&lt;/p&gt;

&lt;p&gt;Beyond convenience, OpenRouter provides higher availability through distributed infrastructure with automatic fallback when a provider goes down. It runs at the edge for minimal latency, offers better prices with no subscriptions, and lets you set custom data policies so prompts only go to models and providers you trust.&lt;/p&gt;

&lt;p&gt;Reka Edge and Reka Flash are both available on OpenRouter. Search for "Reka" or visit the &lt;a href="https://openrouter.ai/provider/reka" rel="noopener noreferrer"&gt;Reka provider page&lt;/a&gt; to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2lksl96j8d6ay4avr42c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2lksl96j8d6ay4avr42c.png" alt="The OpenRouter interface showing available Reka models" width="800" height="900"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Need from OpenRouter
&lt;/h2&gt;

&lt;p&gt;The Quick Start guide on OpenRouter provides examples for Python, TypeScript, and other SDKs. To connect any app, you need three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;An API Key&lt;/strong&gt; to authenticate your requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The endpoint URL&lt;/strong&gt;: &lt;code&gt;https://openrouter.ai/api/v1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model ID&lt;/strong&gt; for the model you want to use. In our case, &lt;code&gt;rekaai/reka-edge&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Seeing It in Action
&lt;/h2&gt;

&lt;p&gt;In the previous &lt;a href="https://dev.to/reka/how-to-serve-a-vision-ai-model-locally-with-vllm-and-reka-edge-5h2i"&gt;post&lt;/a&gt;, we used a media-library app to run Reka Edge locally with vLLM. Let's use the same app and add a new OpenRouter connection to it. All we need to do is pass the three pieces of information collected above: the URL, the API key, and the model ID.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32ei5d15o1zm00p6ukwk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32ei5d15o1zm00p6ukwk.jpg" alt="Configuring a new connection named OpenRouter with the API key and model ID rekaai/reka-edge" width="640" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once saved, switch to the OpenRouter connection from the dropdown, upload an image, and click "Fill with AI." Reka Edge processes the image through OpenRouter and returns a detailed description. No changes to the application code were needed.&lt;/p&gt;

&lt;p&gt;The beauty of OpenRouter is exactly this: you just change the connection string and the model. Both Reka Edge and Reka Flash are available, and you could have all your models centralized in one place.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Serve a Vision AI Model Locally with vLLM and Reka Edge</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:16:10 +0000</pubDate>
      <link>https://forem.com/reka/how-to-serve-a-vision-ai-model-locally-with-vllm-and-reka-edge-5h2i</link>
      <guid>https://forem.com/reka/how-to-serve-a-vision-ai-model-locally-with-vllm-and-reka-edge-5h2i</guid>
      <description>&lt;p&gt;Running an AI model as a one-shot script is useful, but it forces you to restart the model every time you need a result. Setting it up as a service lets any application send requests to it continuously, without reloading the model. This guide shows how to serve &lt;strong&gt;Reka Edge&lt;/strong&gt; using &lt;strong&gt;vLLM&lt;/strong&gt; and an open-source plugin, then connect a web app to it for image description and object detection.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The vLLM plugin is available at &lt;a href="https://github.com/reka-ai/vllm-reka" rel="noopener noreferrer"&gt;github.com/reka-ai/vllm-reka&lt;/a&gt;. The demo Media Library app is at &lt;a href="https://github.com/fboucher/media-library" rel="noopener noreferrer"&gt;github.com/fboucher/media-library&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;You need a machine with a GPU and either Linux, macOS, or Windows (with WSL). I use &lt;a href="https://astral.sh/uv" rel="noopener noreferrer"&gt;UV&lt;/a&gt;, a fast Python package and project manager, or &lt;code&gt;pip&lt;/code&gt; + &lt;code&gt;venv&lt;/code&gt; if you prefer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Clone the vLLM Reka Plugin
&lt;/h2&gt;

&lt;p&gt;Reka models require a dedicated plugin to run under vLLM, not all models need this extra step, but Reka's architecture requires it. Clone the plugin repository and enter the directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/reka-ai/vllm-reka
&lt;span class="nb"&gt;cd &lt;/span&gt;vllm-reka
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The repository contains the plugin code and a &lt;code&gt;serve.sh&lt;/code&gt; script you will use to start the service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download the Reka Edge Model
&lt;/h2&gt;

&lt;p&gt;Before starting the service, you need the model weights locally. Install the Hugging Face Hub CLI and use it to pull the &lt;code&gt;reka-edge-2603&lt;/code&gt; model into your project directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv &lt;span class="nb"&gt;sync
&lt;/span&gt;uv pip &lt;span class="nb"&gt;install &lt;/span&gt;huggingface_hub
uvx hf download RekaAI/reka-edge-2603 &lt;span class="nt"&gt;--local-dir&lt;/span&gt; ./models/reka-edge-2603
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a large model, so make sure you have enough disk space and a stable connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start the Service
&lt;/h2&gt;

&lt;p&gt;Once the model is downloaded, start the vLLM service using the &lt;code&gt;serve.sh&lt;/code&gt; script included in the plugin:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run bash serve.sh ./models/reka-edge-2603
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script accepts environment variables to configure which model to load and how much GPU memory to allocate. If your GPU cannot fit the model at default settings, open &lt;code&gt;serve.sh&lt;/code&gt; and adjust the variables at the top. The repository README lists the available options. The service takes a few seconds to load the model weights, then starts listening for HTTP requests.&lt;/p&gt;

&lt;p&gt;As an example with an &lt;em&gt;NVIDIA GeForce RTX 5070&lt;/em&gt;, here are the settings I used to run the model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;GPU_MEM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.80
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MAX_LEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4096
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MAX_BATCH_TOKENS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4096
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MAX_IMAGES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;MAX_VIDEOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;VIDEO_NUM_FRAMES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4
uv run bash serve.sh ./models/reka-edge-2603
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Connect the Media Library App
&lt;/h2&gt;

&lt;p&gt;With the backend running, time to start the Media Library app. Clone the repository, jump into the directory, and run it with Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/fboucher/media-library
&lt;span class="nb"&gt;cd &lt;/span&gt;media-library
docker compose up &lt;span class="nt"&gt;--build&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:8080&lt;/code&gt; in your browser, then add a new connection with these settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: local (or any label you want)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP address&lt;/strong&gt;: your machine's local network IP (e.g. &lt;code&gt;192.168.x.x&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API key&lt;/strong&gt;: leave blank or enter anything — no key is required for a local connection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model&lt;/strong&gt;: &lt;code&gt;reka-edge-2603&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Test&lt;/strong&gt; to confirm the connection, then save it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It: Image Description and Object Detection
&lt;/h2&gt;

&lt;p&gt;Select an image in the app and choose your local connection, then click &lt;strong&gt;Fill with AI&lt;/strong&gt;. The app sends the image to your vLLM service, and the model returns a natural language description. You can watch the request hit your backend in the terminal where the service is running.&lt;/p&gt;

&lt;p&gt;Reka Edge also supports object detection. Type a prompt asking the model to locate a specific feature (ex: "face") and the model returns bounding-box coordinates. The app renders these as red boxes overlaid on the image. This works for any region you can describe in a prompt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkkjo2ghk0y67nvn5vxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhkkjo2ghk0y67nvn5vxt.png" alt="face detected" width="479" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Switch to the Reka Cloud API
&lt;/h2&gt;

&lt;p&gt;If your local GPU is too slow for production use, you can point the app at the Reka APIs instead. Add a new connection in the app and set the base URL to the Reka API endpoint. Get your API key from &lt;a href="https://platform.reka.ai" rel="noopener noreferrer"&gt;platform.reka.ai&lt;/a&gt;. &lt;a href="https://openrouter.ai" rel="noopener noreferrer"&gt;OpenRouter&lt;/a&gt; is another option if you prefer a unified API across providers.&lt;/p&gt;

&lt;p&gt;The model name stays the same (&lt;code&gt;reka-edge-2603&lt;/code&gt;), so switching between local and cloud is just a matter of selecting a different connection in the app. The cloud API is noticeably faster because Reka's servers are more powerful than a local GPU (at least mine :) ). During development, use the local service to avoid burning credits; switch to the API for speed when you need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You Can Build
&lt;/h2&gt;

&lt;p&gt;The service you just set up accepts any image, or video via HTTP — point a script at a folder and you have a batch pipeline for descriptions, tags, or bounding boxes. Swap the prompt and you change what it extracts. The workflow is the same whether you are running locally or through the API.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/eyS_GWw-p54"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Reka Edge model: &lt;a href="https://huggingface.co/RekaAI/reka-edge-2603" rel="noopener noreferrer"&gt;huggingface.co/RekaAI/reka-edge-2603&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;vLLM Reka plugin: &lt;a href="https://github.com/reka-ai/vllm-reka" rel="noopener noreferrer"&gt;github.com/reka-ai/vllm-reka&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Media Library app: &lt;a href="https://github.com/fboucher/media-library" rel="noopener noreferrer"&gt;github.com/fboucher/media-library&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Reka API platform: &lt;a href="https://platform.reka.ai" rel="noopener noreferrer"&gt;platform.reka.ai&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>vision</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Generating Short Clips from Long Videos with Python</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Tue, 24 Mar 2026 20:15:17 +0000</pubDate>
      <link>https://forem.com/reka/generating-short-clips-from-long-videos-with-python-33bj</link>
      <guid>https://forem.com/reka/generating-short-clips-from-long-videos-with-python-33bj</guid>
      <description>&lt;p&gt;This guide walks through &lt;code&gt;clip_generator.py&lt;/code&gt;, a script in the &lt;a href="https://github.com/reka-ai/clip-api-examples" rel="noopener noreferrer"&gt;clip-api-examples&lt;/a&gt; repo that uses the Clip API to extract short, captioned segments from a longer video. You provide a video source, either a YouTube URL or a local MP4 file, and the script handles the rest: downloading or uploading the video, analyzing it, and rendering a new clip based on your instructions. The example in this guide uses a YouTube URL to keep the setup simple.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The full source code is available at &lt;a href="https://github.com/reka-ai/clip-api-examples" rel="noopener noreferrer"&gt;github.com/reka-ai/clip-api-examples&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/bhq7Ws-w9Gk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Clone the repository and install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/reka-ai/clip-api-examples
&lt;span class="nb"&gt;cd &lt;/span&gt;clip-api-examples/python
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then export your API key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;REKA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your_key_here
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you don't have a key yet, &lt;a href="https://link.reka.ai/free" rel="noopener noreferrer"&gt;get one here&lt;/a&gt;. Free credits renew every month.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwircrjxkdwkui0h4qbg8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwircrjxkdwkui0h4qbg8.jpg" alt="The README file showing installation instructions and environmental variable setup"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Running the Script
&lt;/h2&gt;

&lt;p&gt;From the &lt;code&gt;python/&lt;/code&gt; folder, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python clip_generator.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script prompts you for a YouTube URL. Paste it in, and the job starts immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Job Lifecycle
&lt;/h2&gt;

&lt;p&gt;Once submitted, the job moves through several statuses printed to your terminal: &lt;code&gt;queued&lt;/code&gt;, &lt;code&gt;processing&lt;/code&gt;, then &lt;code&gt;completed&lt;/code&gt;. This works because the script uses &lt;code&gt;stream=True&lt;/code&gt; in its HTTP request, which keeps the connection open and lets the script poll in a loop until the job finishes. If you prefer, you can remove &lt;code&gt;stream=True&lt;/code&gt; and instead make one call to create the job, then a separate polling call to check its status.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62q1mh8aw30e1vc8qhdt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62q1mh8aw30e1vc8qhdt.jpg" alt="Terminal output showing the job status moving through various stages of processing"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizing the Payload
&lt;/h2&gt;

&lt;p&gt;The heart of the script is the &lt;code&gt;create_clip&lt;/code&gt; function, which builds a payload for the API:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;video_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;create an engaging video clip highlighting the best moments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;template&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;moment&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;num_generations&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;generation_config&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;aspect_ratio&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;9:16&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;subtitles&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_duration_seconds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;max_duration_seconds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each field is customizable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;prompt&lt;/code&gt;&lt;/strong&gt;: Plain-language instruction. Examples: "the funniest moments", "the part where I did the demo". Treat it like a brief to an editor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;template&lt;/code&gt;&lt;/strong&gt;: Controls the overall clip style. &lt;code&gt;"moment"&lt;/code&gt; is one option; the repo includes others.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;num_generations&lt;/code&gt;&lt;/strong&gt;: Request multiple clip variations in one job, useful for comparing different cuts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;min_duration_seconds&lt;/code&gt; / &lt;code&gt;max_duration_seconds&lt;/code&gt;&lt;/strong&gt;: Keep these short during development for faster turnaround.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;subtitles&lt;/code&gt;&lt;/strong&gt;: Set to &lt;code&gt;True&lt;/code&gt; to burn captions into the video, &lt;code&gt;False&lt;/code&gt; to skip them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;aspect_ratio&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;"9:16"&lt;/code&gt; for TikTok/Reels, &lt;code&gt;"1:1"&lt;/code&gt; for square, or keep the original.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmunvlaif0l9o2n0ijqn5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmunvlaif0l9o2n0ijqn5.jpg" alt="A look at the Python code payload where aspect ratio and prompts are defined"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Output
&lt;/h2&gt;

&lt;p&gt;When the job completes, the API returns a generated title, a description of the clip, and suggested hashtags. The video itself is already trimmed and has captions burned in. The demo in the video processed an 18-minute horizontal talk (no captions) into a 25-second vertical clip with orange subtitles.&lt;/p&gt;

&lt;p&gt;Clone the repo, adjust the payload to fit your content, and happy clipping.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>vision</category>
      <category>python</category>
    </item>
    <item>
      <title>Private Vision AI: Run Reka Edge Entirely on Your Machine</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Thu, 19 Mar 2026 13:17:39 +0000</pubDate>
      <link>https://forem.com/reka/private-vision-ai-run-reka-edge-entirely-on-your-machine-277b</link>
      <guid>https://forem.com/reka/private-vision-ai-run-reka-edge-entirely-on-your-machine-277b</guid>
      <description>&lt;p&gt;Reka just &lt;a href="https://reka.ai/news/reka-edge-frontier-level-edge-intelligence-for-physical-ai" rel="noopener noreferrer"&gt;released Reka Edge&lt;/a&gt;, a compact but powerful vision-language model that runs &lt;strong&gt;entirely on your own machine&lt;/strong&gt;. No API keys, no cloud, no data, leaving your computer. I work at Reka, and putting together this tutorial was genuinely fun; I hope you enjoy running it as much as I did.&lt;/p&gt;

&lt;p&gt;In three steps, you'll go from zero to asking an AI what's in any image or video.&lt;/p&gt;

&lt;h2&gt;
  
  
  What You'll Need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A machine with enough RAM to run a 7B parameter model (~16 GB recommended)&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.astral.sh/uv/" rel="noopener noreferrer"&gt;&lt;code&gt;uv&lt;/code&gt;&lt;/a&gt;, a fast Python package manager. Install it with: &lt;code&gt;curl -LsSf https://astral.sh/uv/install.sh | sh&lt;/code&gt;. This works on macOS, Linux, and Windows (WSL). If you're on Windows without WSL, grab the &lt;a href="https://docs.astral.sh/uv/getting-started/installation/" rel="noopener noreferrer"&gt;Windows installer&lt;/a&gt; instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Get the Model and Inference Code
&lt;/h2&gt;

&lt;p&gt;Clone the Reka Edge repository from &lt;a href="https://huggingface.co" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt;. This includes both the model weights and the inference code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://huggingface.co/RekaAI/reka-edge-2603
&lt;span class="nb"&gt;cd &lt;/span&gt;reka-edge-2603
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grab a coffee while it downloads, the model weights are several GB.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Fetch the Large Files
&lt;/h2&gt;

&lt;p&gt;Hugging Face stores large files (model weights and images) using Git LFS. After cloning, these files exist on disk but contain only small pointer files, not the actual content.&lt;/p&gt;

&lt;p&gt;First, make sure Git LFS is installed. The command varies by platform:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# macOS&lt;/span&gt;
brew &lt;span class="nb"&gt;install &lt;/span&gt;git-lfs

&lt;span class="c"&gt;# Linux / WSL (Ubuntu/Debian)&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git-lfs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then initialize it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git lfs &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then pull all large files, including model weights and media samples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git lfs pull
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 3: Ask the Model About an Image or Video
&lt;/h2&gt;

&lt;p&gt;To analyze an image, use the sample included in the &lt;code&gt;media/&lt;/code&gt; folder:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run example.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--image&lt;/span&gt; ./media/hamburger.jpg &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--prompt&lt;/span&gt; &lt;span class="s2"&gt;"What is in this image?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or pass a video with &lt;code&gt;--video&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run example.py &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--video&lt;/span&gt; ./media/many_penguins.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--prompt&lt;/span&gt; &lt;span class="s2"&gt;"What is in this?"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model will load, process your input, and print a description, all locally, all private.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try different prompts to unlock more:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;"Describe this scene in detail."&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"What text is visible in this image?"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;"Is there anything unusual or unexpected here?"&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Actually Happening? &lt;em&gt;(optional reading)&lt;/em&gt;
&lt;/h2&gt;

&lt;p&gt;You don't need this to use the model, but if you're anything like me and can't help wondering what's going on under the hood, here's the magic behind &lt;code&gt;example.py&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. It picks the best hardware available.&lt;/strong&gt;&lt;br&gt;
The script checks whether your machine has a GPU (CUDA for Nvidia, Metal for Apple Silicon) and uses it automatically. If neither is available, it falls back to the CPU. This affects speed, not quality.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cuda&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_available&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;device&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cuda&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="n"&gt;mps_ok&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;device&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;device&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;device&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cpu&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. It loads the model into memory.&lt;/strong&gt;&lt;br&gt;
The 7 billion parameter model is read from the folder you cloned. This is the "weights": billions of numbers that encode everything the model has learned. Loading takes ~30 seconds depending on your hardware.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;processor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoProcessor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;trust_remote_code&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoModelForImageTextToText&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...).&lt;/span&gt;&lt;span class="nf"&gt;eval&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. It packages your input into a structured message.&lt;/strong&gt;&lt;br&gt;
Your image (or video) and your text prompt are wrapped together into a conversation-style format, the same way a chat message works, except one part is visual instead of text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;image&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. It converts everything into numbers.&lt;/strong&gt;&lt;br&gt;
The processor translates your image into a grid of numerical patches and your prompt into tokens (small chunks of text, each mapped to a number). The model only understands numbers, so this step bridges the gap.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;inputs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply_chat_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;return_tensors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;return_dict&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. The model generates a response, token by token.&lt;/strong&gt;&lt;br&gt;
Starting from your input, the model predicts the most likely next word, then the next, up to 256 tokens. It stops when it hits a natural end-of-response marker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;output_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;inputs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;max_new_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;do_sample&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftz4ujni9y0hssgkmc45j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftz4ujni9y0hssgkmc45j.png" alt="The prompt and the burger image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. It converts the numbers back into text and prints it.&lt;/strong&gt;&lt;br&gt;
The token IDs are decoded back into human-readable words and printed to your terminal. No internet involved at any point.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;output_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;processor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;decode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;new_tokens&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;skip_special_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Here the video
&lt;/h2&gt;

&lt;p&gt;If you prefer watching and reading, here is the video version: &lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/QVYa4jBwH-s"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;h2&gt;
  
  
  That's Pretty Cool, Right?
&lt;/h2&gt;

&lt;p&gt;A single script. No API key. No cloud. You just ran a 7 billion parameter vision-language model entirely on your own machine, and it works whether you're on a Mac, Linux, or Windows with WSL, which is what I was using when I wrote this.&lt;/p&gt;

&lt;p&gt;This works great as a one-off script: drop in a file, ask a question, get an answer. But what if you wanted to build something on top of it? A web app, a tool that watches a folder, or anything that needs to talk to the model repeatedly?&lt;/p&gt;

&lt;p&gt;That's exactly what the next post is about. I'll show you how to wrap Edge as a local API, so instead of running a script, you have a service running on your machine that any app can plug into. Same model, same privacy, but now it's a proper building block.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>python</category>
      <category>vision</category>
    </item>
    <item>
      <title>Automatically Create AI Clips with This n8n Template</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Thu, 29 Jan 2026 21:10:41 +0000</pubDate>
      <link>https://forem.com/reka/automatically-create-ai-clips-with-this-n8n-template-6c1</link>
      <guid>https://forem.com/reka/automatically-create-ai-clips-with-this-n8n-template-6c1</guid>
      <description>&lt;p&gt;I'm excited to share that my new n8n template has been approved and is now available for everyone to use! This template automates the process of creating AI-generated video clips from YouTube videos and sending notifications directly to your inbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try the template here:&lt;/strong&gt; &lt;a href="https://link.reka.ai/n8n-template-api" rel="noopener noreferrer"&gt;https://link.reka.ai/n8n-template-api&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6p6nnxgazvbr9d7w1kn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft6p6nnxgazvbr9d7w1kn.png" alt="New Reka's n8n clipping template"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does This Template Do?
&lt;/h2&gt;

&lt;p&gt;If you've ever wanted to automatically create short clips from long YouTube videos, this template is for you. It watches a YouTube channel of your choice, and whenever a new video is published, it uses AI to generate engaging short clips perfect for social media. You get notified by email when your clip is ready to download.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;The workflow is straightforward and runs completely on autopilot:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitor YouTube channels&lt;/strong&gt; - The template watches the RSS feed of any YouTube channel you specify. When a new video appears, the automation kicks off.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Request AI clip generation&lt;/strong&gt; - Using Reka's Vision API, the workflow sends the video for AI processing. You have full control over the output:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write a custom prompt to guide the AI on what kind of clip to create&lt;/li&gt;
&lt;li&gt;Choose whether to include captions&lt;/li&gt;
&lt;li&gt;Set minimum and maximum clip duration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Smart status checking&lt;/strong&gt; - When the clips are ready, you receive a success email with your download link. As a safety feature, if the job takes too long, you'll get an error notification instead.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Getting Started is Easy
&lt;/h2&gt;

&lt;p&gt;The best part? You can install this template with just one click from the &lt;a href="https://link.reka.ai/n8n-template-api" rel="noopener noreferrer"&gt;n8n Templates page&lt;/a&gt;. No complex setup required!&lt;/p&gt;

&lt;p&gt;After installation, you'll just need two quick things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A free Reka AI API key (&lt;a href="https://link.reka.ai/free" rel="noopener noreferrer"&gt;get yours from Reka&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A Gmail account (or use any email provider you like)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's it! The template comes ready to use. Simply add your YouTube channel RSS feed, connect your API key, and you're ready to start generating clips automatically. The whole setup takes just a few minutes.&lt;/p&gt;

&lt;p&gt;If you run into any questions or want to share what you've built, join the &lt;a href="https://link.reka.ai/discord" rel="noopener noreferrer"&gt;Reka Discord community&lt;/a&gt;. I'd love to hear how you're using this template!&lt;/p&gt;

&lt;h2&gt;
  
  
  Show Me
&lt;/h2&gt;

&lt;p&gt;In this short video, I show you how to get that template into your n8n and how to configure it.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/DASEXKY86u0"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Happy clipping!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>lowcode</category>
      <category>nocode</category>
    </item>
    <item>
      <title>How to Leverage Reka Research to Build Smarter AI Apps</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Tue, 16 Sep 2025 11:22:04 +0000</pubDate>
      <link>https://forem.com/reka/how-to-leverage-reka-research-to-build-smarter-ai-apps-2l89</link>
      <guid>https://forem.com/reka/how-to-leverage-reka-research-to-build-smarter-ai-apps-2l89</guid>
      <description>&lt;p&gt;Imagine having an assistant that could search across a curated list of sources, gather information, synthesize it, and present it in a structured format tailored to your needs. This is the power of Reka Research, an AI model designed to perform deep research by leveraging web searches and document analysis much faster than a human could. With tools like Reka Research integrated into your applications, you can create smarter, more reliable AI experiences. This post walks you through a demo app that showcases how to use Reka Research and fine-tune it by using advanced options and get better results, faster.&lt;/p&gt;

&lt;p&gt;The following video show step‑by‑step how Reka Research powers a simple “Reka Restaurants” app that turns a craving (e.g., bagels”) into a short, structured list of nearby restaurants—plus a transparent reasoning trace. You can follow along and build it yourself! Clone the repo, and run the app locally.&lt;/p&gt;

&lt;p&gt;Repo: the example lives in &lt;code&gt;reka-restaurants&lt;/code&gt; inside:&lt;br&gt;
&lt;a href="https://github.com/reka-ai/api-examples-typescript" rel="noopener noreferrer"&gt;github.com/reka-ai/api-examples-typescript&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Watch the video
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/UIVi7JvVmY8"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Get the code and set up
&lt;/h2&gt;

&lt;p&gt;Prereqs: Node.js 18+ and npm.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repo and install deps
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;reka-restaurants
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Get your Reka API Key&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Visit the &lt;a href="https://platform.reka.ai" rel="noopener noreferrer"&gt;Reka Platform&lt;/a&gt; dashboard&lt;/li&gt;
&lt;li&gt;Open “API keys” in the left nav&lt;/li&gt;
&lt;li&gt;Create a new key (e.g., “reka-restaurants”) and copy it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlzdk8cgcnoa8i6m3a3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlzdk8cgcnoa8i6m3a3t.png" alt="Get your Reka API Key"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure your environment
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;REKA_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;your_reka_api_key&amp;gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Run the app
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open &lt;code&gt;http://localhost:5173&lt;/code&gt; and try a query like "sushi".&lt;/p&gt;

&lt;h2&gt;
  
  
  The OpenAI‑compatible client
&lt;/h2&gt;

&lt;p&gt;In &lt;code&gt;src/server.ts&lt;/code&gt;, the constant &lt;code&gt;reka_research&lt;/code&gt; is the OpenAI‑compatible client for Reka:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reka_research&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;apiKey&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;REKA_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;baseURL&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://api.reka.ai/v1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes it trivial to swap in Reka Research without changing your app stack.&lt;br&gt;
You only need to change the model to 'reka-flash-research' and the baseURL.&lt;/p&gt;
&lt;h2&gt;
  
  
  Structured outputs
&lt;/h2&gt;

&lt;p&gt;A great feature of Reka Research is the ability to specify the response format. This is extremely useful when you want to use the output directly in your application without additional parsing or processing. In our current example, by defining the expected answer to be a list of restaurants with the following information: name, cuisine type, address, price range, rating, url, why it was selected, that is exactly what we get back. This list can then be used directly by our application, saved to a database, or displayed to users, without any additional parsing or processing. Even better, specifying the schema helps guide the model to produce more accurate and relevant results.&lt;/p&gt;

&lt;p&gt;The Reka Restaurant backend defines a response schema &lt;code&gt;RestaurantItemSchema&lt;/code&gt; that the model must follow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;RestaurantItemSchema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;object&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;cuisine&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;address&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;neighborhood&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;approx_price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;enum&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$$$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$$$$&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;rating&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;distance_km&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;number&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="na"&gt;why&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;string&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;nullable&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you submit a query, the agent performs web searches to gather relevant information. This may result in searching more websites to make sure all relevant information is found. The agent then opens and analyzes the content of these pages to extract the required details about each restaurant. Finally, it compiles this information into a structured list that adheres to the defined schema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grounding results with the user’s location
&lt;/h2&gt;

&lt;p&gt;Instead of requiring users to type “near me” or specify a city, the app automatically uses the browser’s location to populate the API’s location parameter. This enables more accurate, relevant restaurant recommendations and a smoother user experience.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/api/recommendations&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;user_query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ApproxLocation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;city&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;location&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;timezone&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tuning breadth vs. latency with &lt;code&gt;max_uses&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Reka Research performs a series of steps (search, open, analyze). For simpler queries or when latency matters limit the number of web searches the agent performs:&lt;/p&gt;

&lt;p&gt;Change the &lt;code&gt;max_uses&lt;/code&gt; to the level of your choice. In this case, set it to &lt;code&gt;1&lt;/code&gt; to allow only one web search before returning results. The agent may still open and analyze pages, but the trajectory is shorter and returns faster. This provides a good balance between depth and speed depending on the use case—sometimes you want a quick answer, other times you want more thorough research.&lt;/p&gt;

&lt;p&gt;Try raising or lowering this value depending on how broad/deep you want the research to go.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;research&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="nl"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Can be used to restrict the search to a specific domain(s). For example, to only search TripAdvisor.&lt;/span&gt;
    &lt;span class="c1"&gt;// A separate related field is "blocked_domains" to block specific domains.&lt;/span&gt;
    &lt;span class="na"&gt;allowed_domains&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tripadvisor.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="c1"&gt;// Limit the number of web searches Reka Research can do.&lt;/span&gt;
    &lt;span class="na"&gt;max_uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// Can specify the user's location to ground the agent's search / response.&lt;/span&gt;
    &lt;span class="na"&gt;user_location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;approximate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;country&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;country&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;city&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;city&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;loc&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Controlling sources with &lt;code&gt;allowed_domains&lt;/code&gt; and &lt;code&gt;blocked_domains&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;When doing research, you may want to control which sources the agent can use. Online, not all sources are equally reliable or relevant for your use case. There are two parameters to help fine-tune the desired sources: &lt;code&gt;allowed_domains&lt;/code&gt; and &lt;code&gt;blocked_domains&lt;/code&gt;. In the code above, we set &lt;code&gt;allowed_domains&lt;/code&gt; to only search "TripAdvisor". This limits the research to only that specific domain. This is useful when you want to ensure that the information comes from a curated list of sources. You can also use &lt;code&gt;blocked_domains&lt;/code&gt; to exclude specific domains that you know are not reliable or relevant for your needs. These options give you a simple trust policy you can tune per use case.&lt;/p&gt;

&lt;p&gt;Try adding or removing domains in &lt;code&gt;allowed_domains&lt;/code&gt; or experiment with &lt;code&gt;blocked_domains&lt;/code&gt; to see how it impacts the results.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transparent reasoning
&lt;/h2&gt;

&lt;p&gt;The response includes a reasoning trace (the agent’s searches and analyses). This is very helpful to validate the information returned or understand why some results were or weren't selected in the final response. In this demo application, the frontend renders these steps so users can see which sources were queried and how results were formed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7gfl9kmszjgsn25h4kx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7gfl9kmszjgsn25h4kx.png" alt="reasoning trace"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Reka Research provides a practical foundation for building more powerful and intelligent applications. By adding the ability to actively search, analyze multiple sources, and return structured data, you can create apps that go beyond simple text generation. The transparency of the research process—showing which sources were used and how conclusions were reached—adds a layer of reliability that users can trust. It's this combination of enhanced capabilities and verifiable results that makes applications truly smarter.&lt;/p&gt;

&lt;p&gt;What makes Reka Research particularly compelling is how effortlessly it integrates into existing workflows. If you're already using OpenAI's API, switching to Reka Research is literally a two-line change: update your baseURL to &lt;code&gt;https://api.reka.ai/v1&lt;/code&gt; and change the model to &lt;code&gt;reka-flash-research&lt;/code&gt;. From there, you unlock powerful capabilities like location-grounded search, source control, and structured outputs that just work.&lt;/p&gt;

&lt;p&gt;Whether you're building a restaurant finder, a research assistant, or any application that needs verified information, Reka Research gives you the tools to create smarter, more reliable AI experiences. Ready to try it yourself? Clone the &lt;a href="https://github.com/reka-ai/api-examples-typescript" rel="noopener noreferrer"&gt;restaurant finder repo&lt;/a&gt; and see the difference that deep research can make, or simply swap the URL in your existing OpenAI application and start experimenting today.&lt;/p&gt;

&lt;p&gt;Have feedback or want to show what you built? Join our &lt;a href="https://link.reka.ai/discord" rel="noopener noreferrer"&gt;Discord community&lt;/a&gt; and check the docs at &lt;a href="https://docs.reka.ai" rel="noopener noreferrer"&gt;docs.reka.ai&lt;/a&gt;. We’d love to see what you create.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>openai</category>
      <category>api</category>
    </item>
    <item>
      <title>Get an AI assistant to do your research</title>
      <dc:creator>Frank Boucher ☁</dc:creator>
      <pubDate>Thu, 07 Aug 2025 17:05:00 +0000</pubDate>
      <link>https://forem.com/reka/get-an-ai-assistant-to-do-your-research-3p99</link>
      <guid>https://forem.com/reka/get-an-ai-assistant-to-do-your-research-3p99</guid>
      <description>&lt;h2&gt;
  
  
  Introducing Reka Research: Your AI Research Assistant
&lt;/h2&gt;

&lt;p&gt;Meet &lt;a href="https://link.reka.ai/IquTZw" rel="noopener noreferrer"&gt;Reka Research&lt;/a&gt; a powerful AI agent that can search the web and analyze your files to answer complex questions in minutes. Whether you're staying up to date with AI news, screening resumes, or researching technical topics, Reka Research does the heavy lifting for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0gP-on8tYECbCin8rbq-NxSs-ZrjhB-EJXTHfsg0NGHtWoHhdmv1aDgrWpbJUONdb25aT-5SnEXzqZXyLz8SqVA07kHJ5PxvAUn_s-pVUhzQ9J05RwF4WoDpvhDj9LwuWqENOiOdSllkraYH7jH0CcECbUj0n2rEWvYqVRDGm1yRI1rCcsaduwGVssEI/s640/assistant_500.jpeg" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ny6kcdh4zt9vgch022u.jpeg" alt="An AI Assistant searching in documents"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;h3&gt;
  
  
  What Makes Reka Research Special?
&lt;/h3&gt;

&lt;p&gt;Reka Research stands out in four key areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Top Performance&lt;/strong&gt; : Best in class results on research benchmarks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast Results&lt;/strong&gt; : Get thorough answers in 1-3 minutes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full Transparency&lt;/strong&gt; : See exactly how the AI reached its conclusions. All steps are visible.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Smart Web Search That Actually Works
&lt;/h3&gt;

&lt;p&gt;Ever wished you could ask someone to research the latest AI developments while you focus on other work? That's exactly what Reka Research does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Watch how it works:&lt;/strong&gt; &lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/zxSSKEyApQk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this demo, Jess and Sharath shows how Reka Research can automatically gather the most important AI news from the past week. The AI visits multiple websites, takes notes, and presents a clean summary with sources. You can even restrict searches to specific domains or set limits on how many sites to check.&lt;/p&gt;

&lt;h2&gt;
  
  
  File Search for Your Private Documents
&lt;/h2&gt;

&lt;p&gt;Sometimes the information you need isn't on the web - it's in your company's documents, meeting notes, or file archives. Reka Research can search through thousands of private files to find exactly what you're looking for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;See it in action:&lt;/strong&gt;&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/yguLcM4HU0g"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In this example, ess and Sharath shows how HR teams can use Reka Research to quickly screen resumes. Instead of manually reviewing hundreds of applications, the AI finds candidates who meet specific requirements (like having a computer science degree and 3+ years of backend experience) in seconds!&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Better Prompts Gets Better Results
&lt;/h2&gt;

&lt;p&gt;Like any AI tool, Reka Research works best when you know how to ask the right questions. The key is being specific about what you want and providing context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn the techniques:&lt;/strong&gt; &lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/sA-t9wCkf7M"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Jess and Yi shares practical tips for getting the most out of Reka Research. Instead of asking "summarize meeting minutes," try "summarize April meeting minutes about public participation." The more specific you are, the better your results will be.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ready to Try Reka Research?
&lt;/h3&gt;

&lt;p&gt;Reka Research is currently available for everyone! Try it via the &lt;a href="https://link.reka.ai/IquTZw" rel="noopener noreferrer"&gt;playground&lt;/a&gt;, or using directly &lt;a href="https://link.reka.ai/HVK1r5" rel="noopener noreferrer"&gt;the API&lt;/a&gt;. Whether you're researching competitors, analyzing documents, or staying current with industry trends, it can save you hours of work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to learn more and connect with other users?&lt;/strong&gt; Join our Discord community where you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get tips from other Reka Research users&lt;/li&gt;
&lt;li&gt;Share your use cases and success stories&lt;/li&gt;
&lt;li&gt;Stay updated on new features and releases&lt;/li&gt;
&lt;li&gt;Ask questions directly to our team&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://link.reka.ai/D0akpV" rel="noopener noreferrer"&gt;Join our Discord Community&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ready to transform how you research? Visit &lt;a href="https://reka.ai" rel="noopener noreferrer"&gt;reka.ai&lt;/a&gt; to learn more about Reka Research and our other AI tools.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
