<?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>DEV Community: Jacob</title>
    <description>The latest articles on DEV Community by Jacob (@jacobpark).</description>
    <link>https://dev.to/jacobpark</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%2Fuser%2Fprofile_image%2F3718812%2F00036e4a-2cce-4aff-966e-f9763dd0c5b3.png</url>
      <title>DEV Community: Jacob</title>
      <link>https://dev.to/jacobpark</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jacobpark"/>
    <language>en</language>
    <item>
      <title>How gaming highlight detection actually works (and why it's harder than it looks)</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Fri, 27 Mar 2026 04:49:51 +0000</pubDate>
      <link>https://dev.to/jacobpark/how-gaming-highlight-detection-actually-works-and-why-its-harder-than-it-looks-3med</link>
      <guid>https://dev.to/jacobpark/how-gaming-highlight-detection-actually-works-and-why-its-harder-than-it-looks-3med</guid>
      <description>&lt;p&gt;I've been thinking about what makes a gaming highlight "good" from a technical standpoint, and the answer is more complicated than I expected when I started building &lt;a href="https://fragcut.io" rel="noopener noreferrer"&gt;FragCut&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The intuitive answer is "exciting moments" — kills, clutch plays, comebacks. But excitement is subjective, and ML models don't do subjective. They do signals. The question is: what signals actually correlate with highlight-worthy content?&lt;/p&gt;

&lt;h2&gt;
  
  
  What the model is really detecting
&lt;/h2&gt;

&lt;p&gt;The naive approach is to treat this as a binary classification problem: highlight vs. non-highlight. Train on labeled clips, deploy, done. This sort of works but has a high false positive rate because it learns superficial correlations instead of the underlying patterns.&lt;/p&gt;

&lt;p&gt;A better framing: you're detecting &lt;em&gt;anomalies in game state&lt;/em&gt;. Most gameplay is mundane — moving between objectives, farming resources, waiting. Highlights happen when multiple high-signal events cluster together in a short time window.&lt;/p&gt;

&lt;p&gt;The signals that matter depend heavily on the game, but there are common patterns across genres:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rapid health changes (damage events)&lt;/li&gt;
&lt;li&gt;Score state changes (kills, objectives)&lt;/li&gt;
&lt;li&gt;Audio spikes — particularly crowd audio, kill sounds, ability sounds&lt;/li&gt;
&lt;li&gt;Player speed and trajectory (sudden acceleration, unusual paths)&lt;/li&gt;
&lt;li&gt;Camera behavior in games where it's reactive to action&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The challenge is that these signals don't have equal weight and don't combine linearly. A kill at 80% health is less significant than the same kill at 5% health. An objective capture when your team is down 3-0 is more significant than one when you're up 5-0.&lt;/p&gt;

&lt;h2&gt;
  
  
  The temporal window problem
&lt;/h2&gt;

&lt;p&gt;Video is a sequence, not a frame. You can't classify a 30-second clip by looking at one frame — you need temporal context. This is where simpler approaches break down.&lt;/p&gt;

&lt;p&gt;If you use a sliding window (say, 10 seconds), you get a lot of redundant detections and the boundaries are arbitrary. The clip "starts" when your detector fires, which is usually mid-action rather than before it builds.&lt;/p&gt;

&lt;p&gt;The approach that works better: train the model to predict not just "is this exciting?" but also "how many seconds until the highlight peaks?" This gives you a offset you can use to trim the clip so the best moment lands near the 70% mark — early enough to build context, late enough to feel payoff.&lt;/p&gt;

&lt;h2&gt;
  
  
  Audio is underrated
&lt;/h2&gt;

&lt;p&gt;Most highlight detection papers focus on video frames. Audio is where you get a lot of signal for free.&lt;/p&gt;

&lt;p&gt;Games have highly predictable audio cues: kill sounds, ability sounds, crowd reactions in sports games, environmental audio that only plays in specific game states. A model that can correlate audio events with game state changes gets much better precision than one that's purely visual.&lt;/p&gt;

&lt;p&gt;The downside: audio is game-specific. Kill sound in Call of Duty doesn't generalize to kill sound in League of Legends. You need either game-specific audio models or a way to normalize across titles.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we do with false positives
&lt;/h2&gt;

&lt;p&gt;Even a good model produces false positives — clips that score high but aren't actually interesting. The best mitigation isn't better ML, it's better UX.&lt;/p&gt;

&lt;p&gt;Showing users 5 candidates they can quickly approve or reject is better than showing them 1 "best" clip and having them feel stuck with it. Human preference data from those interactions becomes training signal for the next model version. &lt;a href="https://fragcut.io" rel="noopener noreferrer"&gt;FragCut&lt;/a&gt; is built around this loop — the model gets better as more creators use it and tell it when it's wrong.&lt;/p&gt;

&lt;p&gt;This is probably the most important design decision in the whole system. Treat the model as a filter that narrows the search space, not an oracle that delivers a final answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The benchmark problem
&lt;/h2&gt;

&lt;p&gt;There's no standardized benchmark for gaming highlight detection. Different papers use different games, different definitions of "highlight," different evaluation metrics. This makes it genuinely hard to compare approaches or know if you're making real progress.&lt;/p&gt;

&lt;p&gt;The pragmatic answer is user satisfaction metrics: do people who use your tool share more, does their audience engagement go up, how often do they edit the output before posting? Those are noisy signals but they're measuring the right thing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gamedev</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>From static images to motion: what I learned building an image-to-video AI pipeline</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Fri, 27 Mar 2026 04:48:04 +0000</pubDate>
      <link>https://dev.to/jacobpark/from-static-images-to-motion-what-i-learned-building-an-image-to-video-ai-pipeline-4op</link>
      <guid>https://dev.to/jacobpark/from-static-images-to-motion-what-i-learned-building-an-image-to-video-ai-pipeline-4op</guid>
      <description>&lt;p&gt;The question I get asked most when I tell people I'm building AI video tools is some version of: "Wait, you can actually make a static photo move now?" The answer is yes, and it's both more impressive and more limited than you'd expect.&lt;/p&gt;

&lt;p&gt;Here's what I've learned after spending months working on &lt;a href="https://imideo.net" rel="noopener noreferrer"&gt;iMideo&lt;/a&gt;, an image-to-video generation platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the models actually work
&lt;/h2&gt;

&lt;p&gt;The core technology is a diffusion model that's been trained not just on images but on video sequences. Instead of generating a single frame, the model learns temporal coherence — how pixels should evolve over time while maintaining object identity and scene consistency.&lt;/p&gt;

&lt;p&gt;The main challenge is that video generation requires the model to make decisions about motion that aren't specified in the input. A photo of ocean waves could produce gentle ripples, crashing surf, or something in between. The model has to pick something. This is why prompt engineering matters so much for video generation — you're not just describing what you want to see, you're describing &lt;em&gt;how&lt;/em&gt; it should move.&lt;/p&gt;

&lt;h2&gt;
  
  
  What works well and what doesn't
&lt;/h2&gt;

&lt;p&gt;Some source material generates great video reliably: nature scenes with obvious motion patterns (water, clouds, foliage), portraits where a slight head turn or blink reads as natural, product shots where a simple camera move adds depth.&lt;/p&gt;

&lt;p&gt;The failure modes are predictable once you understand them. Hands and fingers are notoriously difficult — the model often loses count of them over time. Text in images tends to distort or disappear. Any scene where the implied motion would require revealing occluded information (a character turning to show their back, a camera panning to reveal what's outside the frame) usually produces artifacts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline in practice
&lt;/h2&gt;

&lt;p&gt;The workflow for a production image-to-video pipeline looks roughly like:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Input validation: check aspect ratio, resolution, detect faces vs. non-face subjects&lt;/li&gt;
&lt;li&gt;Prompt construction: combine user intent with subject-specific templates&lt;/li&gt;
&lt;li&gt;Model selection: different models have different strengths (some handle portraits better, some handle motion intensity better)&lt;/li&gt;
&lt;li&gt;Generation: typically 16-24 frames at 8fps, then interpolated to 24fps&lt;/li&gt;
&lt;li&gt;Quality filtering: automatic rejection of outputs with obvious artifacts before showing to user&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 5 is underrated. A 30% rejection rate with silent retry is better UX than showing users a broken output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Latency is the hard problem
&lt;/h2&gt;

&lt;p&gt;A typical generation run takes 20-45 seconds depending on hardware. That's too long for a synchronous API response, which means you need job queuing, webhooks or polling, and a client that handles the async lifecycle gracefully. The user experience of "your video is generating" needs to be designed carefully or it just feels broken.&lt;/p&gt;

&lt;p&gt;We use Upstash Redis for job state and QStash for webhook delivery. It handles the retry logic cleanly and the queue is observable. The actual model inference runs on Replicate, which removes the GPU infrastructure overhead but adds some latency unpredictability on cold starts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The quality ceiling
&lt;/h2&gt;

&lt;p&gt;I want to be honest about current limitations. The outputs from these models look impressive at 3-5 seconds. At 10+ seconds, most models start to degrade — motion consistency breaks down, the subject drifts from the original. The field is moving fast (pun intended), but we're not at the point where you can generate a 60-second coherent clip from a single photo.&lt;/p&gt;

&lt;p&gt;For social media content, product showcases, and creative experimentation, the current quality ceiling is genuinely useful. For anything requiring long-form narrative motion, you're still hitting hard limits.&lt;/p&gt;

&lt;p&gt;If you want to experiment with image-to-video generation without building the pipeline yourself, &lt;a href="https://imideo.net" rel="noopener noreferrer"&gt;iMideo&lt;/a&gt; is worth trying. But if you're building your own pipeline, the most important decision is how you handle the async job lifecycle and what your rejection/retry strategy looks like — not which model you pick.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How I think about LinkedIn profile photos as a developer (and what the data actually says)</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Fri, 27 Mar 2026 04:46:32 +0000</pubDate>
      <link>https://dev.to/jacobpark/how-i-think-about-linkedin-profile-photos-as-a-developer-and-what-the-data-actually-says-5dj2</link>
      <guid>https://dev.to/jacobpark/how-i-think-about-linkedin-profile-photos-as-a-developer-and-what-the-data-actually-says-5dj2</guid>
      <description>&lt;p&gt;I've updated my LinkedIn photo exactly twice in six years. Both times I used whatever photo happened to look halfway decent on my phone. I suspect most developers I know have done the same thing.&lt;/p&gt;

&lt;p&gt;The conventional wisdom is that profile photos "matter for first impressions" — which is technically true but not very useful. What does matter, specifically? I looked into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the research actually shows
&lt;/h2&gt;

&lt;p&gt;LinkedIn's own data says profiles with photos get 21x more views and 36x more messages than profiles without photos. Those numbers are probably inflated (they include accounts that were abandoned before adding a photo), but the directional conclusion seems right: having &lt;em&gt;something&lt;/em&gt; is much better than nothing.&lt;/p&gt;

&lt;p&gt;The more interesting finding is from a 2022 study by PhotoFeeler, a site where people rate profile photos. They had users evaluate the same individuals across different photo types. Studio-lit headshots consistently scored higher on "competence" and "influence" — not by a little, either. The gap between a casual selfie and a proper headshot was around 40 percentile points on those dimensions.&lt;/p&gt;

&lt;p&gt;What the study couldn't control for is whether the rating gap translates to actual job outcomes. I genuinely don't know. But I'd rather have the photo that reads "I take this seriously" than the one that reads "I grabbed this from my cousin's wedding."&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with selfies
&lt;/h2&gt;

&lt;p&gt;Most developers default to selfies because they're convenient. The issue isn't really the phone camera — modern smartphone cameras are excellent. The issue is angle, lighting, and the fact that arm's-length photos tend to distort facial proportions.&lt;/p&gt;

&lt;p&gt;A selfie taken from slightly below eye level at arm's length creates the "looking down at you" effect that's fine for Instagram but comes across as oddly confrontational in a professional context. Lighting from a phone screen in a dim room adds unflattering shadows. These are solvable problems, but they require some setup effort most people don't bother with.&lt;/p&gt;

&lt;h2&gt;
  
  
  When AI headshot tools actually make sense
&lt;/h2&gt;

&lt;p&gt;I've been testing a few AI headshot generators because I was curious how far the technology has gotten. For a developer with one decent reference photo and zero interest in booking a photography session, they're genuinely useful now.&lt;/p&gt;

&lt;p&gt;The approach that works: upload 10-15 clear photos (varied angles, good lighting, no sunglasses), let the model fine-tune on your face, generate 50-100 options, pick the best 3-4. Tools like &lt;a href="https://professionalheadshot.io" rel="noopener noreferrer"&gt;ProfessionalHeadshot.io&lt;/a&gt; handle this pipeline in one workflow — you upload the source photos, it runs the generation, you download the results. The quality surprised me. A few outputs were noticeably AI-processed (too smooth, slightly uncanny valley), but 5-6 per batch looked like actual studio photos.&lt;/p&gt;

&lt;p&gt;The catch: it works much better if your source photos have varied angles and good natural lighting. Upload 15 photos from the same angle in the same bad light, and you'll get 50 variations of the same mediocre result. Garbage in, garbage out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually changed
&lt;/h2&gt;

&lt;p&gt;I updated my LinkedIn photo after running the test batch. Went from a cropped conference photo to a clean, neutral-background headshot that looks like I planned it. I haven't tracked whether my InMail response rate changed, but I feel better about the profile, which is probably the more honest metric.&lt;/p&gt;

&lt;p&gt;If you've been using the same photo for 3+ years and it's clearly a crop from a group photo, it's worth spending 20 minutes on this. Either set up a decent DIY shoot (north-facing window, phone camera on a book stack, timer mode) or use an AI generator if you can't be bothered. Either is better than a 2019 photo where you're clearly in the middle of saying something.&lt;/p&gt;

&lt;p&gt;The data suggests it matters. I think it matters. But mostly, a profile photo is just the minimum viable proof that you show up for your professional presence.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Why your selfies look worse than you do (and what AI photo tools actually fix)</title>
      <dc:creator>Jacob</dc:creator>
      <pubDate>Fri, 27 Mar 2026 04:43:15 +0000</pubDate>
      <link>https://dev.to/jacobpark/why-your-selfies-look-worse-than-you-do-and-what-ai-photo-tools-actually-fix-55eg</link>
      <guid>https://dev.to/jacobpark/why-your-selfies-look-worse-than-you-do-and-what-ai-photo-tools-actually-fix-55eg</guid>
      <description>&lt;p&gt;You look better in person than in your photos. Almost everyone does. This isn't a self-esteem problem — it's physics and psychology combining to work against you.&lt;/p&gt;

&lt;p&gt;Camera lenses distort depth. A typical phone lens (around 26-28mm equivalent) exaggerates the distance between the nose and the edges of the face. The result is a slight but real distortion that doesn't match how you look in a mirror or in person. Wide-angle selfie cameras make this significantly worse.&lt;/p&gt;

&lt;p&gt;Lighting in casual photos is almost never flattering. Overhead lighting creates shadows under the eyes and nose. Mixed indoor light sources create color casts that make skin look uneven. The soft, directional light that makes portraits look good requires actual setup — most selfies don't have it.&lt;/p&gt;

&lt;p&gt;And then there's the compression and sharpening applied by phone cameras and social apps. They're optimizing for metrics (edge sharpness, color saturation, noise reduction) that look impressive in thumbnail previews but not necessarily on faces.&lt;/p&gt;

&lt;h2&gt;
  
  
  What diffusion models actually do to portraits
&lt;/h2&gt;

&lt;p&gt;Modern AI portrait enhancement tools are built on diffusion models fine-tuned on portrait datasets. If you've used Stable Diffusion or Midjourney, you know what diffusion models produce. For portrait enhancement, the training data is specifically portrait photography — professional headshots, editorial photography — rather than general images.&lt;/p&gt;

&lt;p&gt;The key technical piece is LoRA (Low-Rank Adaptation), which lets the model be fine-tuned on a small set of your own photos. Instead of retraining the entire model (which would require massive compute and data), LoRA updates a small set of weight matrices that capture your specific facial features. The model learns the shape of your face, your skin tone, and your distinctive features from maybe 10-20 input photos.&lt;/p&gt;

&lt;p&gt;Once that LoRA is trained, the model can generate new images of you in different lighting conditions, with different backgrounds, in different poses — with consistent identity across all of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline in practice
&lt;/h2&gt;

&lt;p&gt;The basic flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You submit 10-20 photos of yourself in varied conditions (different lighting, angles, expressions)&lt;/li&gt;
&lt;li&gt;A LoRA is trained on those photos, typically taking a few minutes on modern GPU hardware&lt;/li&gt;
&lt;li&gt;You select output styles — studio lighting, outdoor, corporate, etc.&lt;/li&gt;
&lt;li&gt;The model generates new portrait photos using your LoRA + the style conditioning&lt;/li&gt;
&lt;li&gt;You pick the ones that work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tools like &lt;a href="https://datephotos.ai" rel="noopener noreferrer"&gt;DatePhotos.AI&lt;/a&gt; handle this end-to-end. The input photos can be casual — no professional studio required. The output calibrates to styles appropriate for dating profiles: natural, well-lit, showing genuine expression rather than a stiff pose.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the models are actually fixing
&lt;/h2&gt;

&lt;p&gt;Lighting correction: The model generates you in lighting conditions that are actually flattering — soft key light from the side, clean fill light, no harsh shadows. This isn't a filter; it's generating a new image of you in better light.&lt;/p&gt;

&lt;p&gt;Lens distortion correction: Because the output is generated rather than captured, it's not subject to the original camera's perspective distortion. The proportions look correct.&lt;/p&gt;

&lt;p&gt;Background control: Instead of whatever was behind you when you took the selfie, you get a clean or contextually appropriate background that doesn't compete with your face.&lt;/p&gt;

&lt;p&gt;Noise and compression: Generated images don't carry the compression artifacts from social media resizing. The detail is where it should be.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the models are not fixing
&lt;/h2&gt;

&lt;p&gt;Your face. The LoRA preserves your actual appearance — the structure of your face, your features, your approximate age. This is a feature, not a limitation. The goal is photos that look like you on a good day with good light, not a fantasy version of you that surprises people when they meet you in person.&lt;/p&gt;

&lt;p&gt;If your input photos are all of you making the same slightly uncomfortable "I'm being photographed" face, the outputs will likely carry some of that. The model can do a lot with lighting and technical quality, but expression is still mostly up to you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
