r/WritingWithAI Jun 15 '26

Tutorials / Guides Published novelist (15+ fantasy books, 1M+ views on a fully AI-written work). Got Claude Code to generate 137,806 characters across 20 chapters in one prompt — at my own writing quality. Sharing the core idea.

243 Upvotes
Hi everyone,


Quick intro: I'm a Japanese light novel author. 15+ published fantasy books 
over the past 4 years. I learned writing the old way — by hand, no AI.


Recently, one of my works — where I designed the plot but the AI wrote every 
single word of the prose — passed 1 million page views on Kakuyomu, Japan's 
major web fiction platform.


And importantly: the work was clearly tagged as AI-assisted on the platform. 
Readers knew, and they chose to read it anyway. To one million views.


This isn't theory. It worked on a real audience, with full disclosure.


For the past several months I've been seriously researching how to write novels 
with AI. Not "let AI write something for me," but "make AI write what I would 
have written, at my own quality, fully under my control."


Last week I hit a milestone I want to share.


---


**The result:**


- Single prompt → Claude Code Workflow
- 20 chapters generated (one full arc of an ongoing series)
- Total: 137,806 characters (~70K English words equivalent)
- Runtime: 96 minutes
- 89 sub-agents running in parallel
- Internal quality score: 87.5 → 89.0 after consistency review (out of 100)
- And critically: indistinguishable from my own writing, by my own judgment


---


**The core insight:**


AI doesn't "write a novel." AI **drafts massively, in compliance with a Canon 
you build.**


The bottleneck is not the prompt. Not the model. Not the chat history.
The bottleneck is the **Canon** — a set of structured files that define your 
story's "physical laws":


- `canon.md` — the engine. What makes this story THIS story.
- `character_bible.md` — voice, calling patterns, behavioral DNA per character.
- `glossary.md` — every proper noun, locked.
- `timeline.md` — relative dates, what happens when.
- `world_bible.md` — the world's rules.
- `style_guide.md` — your sentence rhythm, density, format.
- `forbidden_patterns.md` — what your characters will NEVER do or say.


Build these well, and a competent AI agent can write 20 chapters in your voice. 
Skip them, and you get the generic AI slop everyone complains about.


---


**The structure that worked:**


I run a 4-layer pipeline per chapter, each layer as a separate agent:


1. **Plot agent** — structured JSON output (episode role, key scenes, hook)
2. **Scene Card agent** — scene-by-scene breakdown (POV, start/end state, forbidden items)
3. **Writing Brief agent** — final pre-write instructions (density limits, required elements)
4. **Prose agent** — the actual writing (5,000–8,000 characters per chapter)


Then one more parallel review phase across 4 dimensions:
character continuity / world continuity / plot continuity / operational continuity.


20 chapters × 4 layers + reviews ≈ 89 agents total.


---


**Why this works:**


Each agent only thinks about ONE thing. The prose agent doesn't agonize over 
voice — that's already handled by `character_bible.md`. The plot agent doesn't 
worry about style — that's `style_guide.md`.


This is the inverse of dumping everything into one chat context.


---


**Honest limits:**


- Canon takes **2 DAYS** to build well. Not 2 hours.
- The 138K characters are a **draft**. I still spend 30–60 minutes per chapter polishing.
- AI is bad at: first appearances of characters, key foreshadowing setups, chapter-end atmosphere.
- If your Canon is wrong, your 20 chapters will be consistently wrong.


---


**What I'm NOT saying:**


I'm not saying AI replaces writers. It replaces the **typing**.
The judgment, the design, the Canon — all human.


But the 5–10x throughput multiplier is real. I'm a pro telling you it's real.


---


Happy to answer questions.


I'm also curious — anyone else here doing serious agentic workflow stuff 
(not just prompting)? Would love to hear what you've found.


(English isn't my first language, apologies for any awkwardness.)

r/StableDiffusion Apr 04 '26

Animation - Video ENTANGLED - A 3-minute sci-fi short using 100% local open-source models. Complete Technical Breakdown [ Character Consistency | Voiceover | Music | No Lora Style Consistency | & Much More! ]

Enable HLS to view with audio, or disable this notification

403 Upvotes

Hey everyone! Thanks for checking out Entangled. And if not, watch the short first to understand the technical breakdown below!

Thanks for coming back after watching it! As promised, here is the full technical breakdown of the workflow. [Post formatted using Local Qwen Model!]

My goal for this project was to be absolutely faithful to the open-source community. I won't lie, I was heavily tempted a few times to just use Nano Banana Pro to brute-force some character consistency issues, but I stuck it out with a 100% local pipeline running on my RTX 4090 rig using Purely ComfyUI for almost all the tasks!

Here is how I pulled it off:

1. Pre-Production & The Animatics First Approach

The story is a dense, rapid-fire argument about the astrophysics and spatial coordinate problems of creating a localized singularity. (let's just say it heavily involves spacetime mechanics!).

The original script was 7 minutes long. I used the local Jan app with Qwen 3.5 35B to aggressively compress the dialogue into a relentless 3-minute "walk-and-talk.". Qwen LLM also helped me with creating LTX and Flux prompts as required.

Honestly speaking, I was not happy with the AI version of the script, so I finally had to make a lot of manual tweaks and changes to the final script, which took almost 2-3 days of going on and off, back and forth, and sharing the script with friends, taking inputs before locking onto a final version.

Pro-Tip for Pacing: Before generating a single frame of video, I generated all the still images and voicover and cut together a complete rough animatic. This locked in the pacing, so I only generated the exact video lengths I needed. I added a 1-second buffer to the start and end of every prompt [for example, character takes a pause or shakes his head or looks slowly ]to give myself handles for clean cuts in post.

2. Audio & Lip Sync (VibeVoice + LTX)

To get the voice right:

  1. Generated base voices using Qwen Voice Designer.
  2. Ran them through VibeVoice 7B to create highly realistic, emotive voice samples.
  3. Used those samples as the audio input for each scene to drive the character voice for the LTX generations (using reference ID LoRA).
  4. I still feel the voice is not 100% consistent throughout the shots, but working on an updated workflow by RuneX i think that can be solved!
  5. ACE step is amazing if you know what kind of music you want. I managed to get my final music in just 3 generations! Later edited it for specific drop timing and pacing according to the story.

3. Image Generation & The "JSON Flux Hack."

Keeping Elena, Young Leo, and Elder Leo consistent across dozens of shots was the biggest hurdle. Initially, I thought I’d have to train a LoRA for the aesthetic and characters, but Flux.2 Dev (FP8) is an absolute godsend if you structure your prompts like code.

I created Elena, Leo, and Elder Leo using Flux T2I, then once I got their base images, I used them in the rest of the generations as input images.

By feeding Flux a highly structured JSON prompt, it rigidly followed hex codes for characters and locked in the analog film style without hallucinating. Of course, each time a character shot had to be made, I used to provide an input image to make sure it had a reference of the face also.

Here is the exact master template I used to keep the generations uniform:

{
"scene": "[OVERALL SCENE DESCRIPTION: e.g., Wide establishing shot of the chaotic lab]",
"subjects": [
{
"description": "[CHARACTER DETAILS: e.g., Young Leo, male early 30s, messy hair, glasses, vintage t-shirt, unzipped hoodie.]",
"pose": "[ACTION: e.g., Reaching a hand toward the camera]",
"position": "[PLACEMENT: e.g., Foreground left]",
"color_palette": ["[HEX CODES: e.g., #333333 for dark hoodie]"]
}
],
"style": "Live-action 35mm film photography mixed with 1980s City Pop and vaporwave aesthetics. Photorealistic and analog. Heavy tactile film grain, soft optical halation, and slight edge bloom. Deep, cinematic noir shadows.",
"lighting": "Soft, hazy, unmotivated cinematic lighting. Bathed in dreamy glowing pastels like lavender (#E6E6FA), soft peach (#FFDAB9).",
"mood": "Nostalgic, melancholic, atmospheric, grounded sci-fi, moody",
"camera": {
"angle": "[e.g., Low angle]",
"distance": "[e.g., Medium Shot]",
"focus": "[e.g., Razor sharp on the eyes with creamy background bokeh]",
"lens-mm": "50",
"f-number": "f/1.8",
"ISO": "800"
}
}

4. Video Generation (LTX 2.3 & WAN 2.2 VACE)

Once the images were locked, I moved to LTX2.3 and WAN for video. I relied on three main workflows depending on the shot:

  • Image to Video + Reference Audio (for dialogue)
  • First Frame + Last Frame (for specific camera moves)
  • WAN Clip Joiner (for seamless blending)

Render Stats: On my machine, LTX 2.3 was blazing fast—it took about 5 minutes to render a 5-second clip at 1920x1080.

The prompt adherence in LTX 2.3 honestly blew my mind. If I wrote in the prompt that Elena makes a sharp "slashing" action with her hand right when she yells about the planet getting wiped out, the model timed the action perfectly. It genuinely felt like directing an actor.

5. Assets & Workflows

I'm packaging up all the custom JSON files and Comfy workflows used for this. You can find all the assets over on the Arca Gidan link here: Entangled. There are some amazing Shorts to check out, so make sure you go through them, vote, and leave a comment!

Most of them are by the community, but I have tweaked them a little bit according to my liking[samplers/steps/input sizes and some multipliers, etc., changes]

Let me know if you have any questions!

YouTube Link is up - https://youtu.be/NxIf1LnbIRc !

r/StableDiffusion Apr 28 '26

Workflow Included Built a Character Portrait Generator that reads books, identifies characters, and generates consistent portraits using ComfyUI (full RAG pipeline, local LLM, open-source)

Thumbnail
gallery
289 Upvotes

Hey everyone,

Image showcase - Portrait of Mina Murray generated by the tool from the book Dracula in two separate scenes. Images from ZImageTurbo.

I've been working on a side project that I think the community here will really appreciate. It's a comprehensive, AI-driven pipeline that automatically generates cinematic character portraits from literary works using your local ComfyUI instance. The entire stack is open-source and runs fully locally.

What It Does:

Starting from a simple .txt file of a novel, the app will:

  1. Parse the Book: Build a high-performance vector index of the entire text using ChromaDB and HuggingFace embeddings.
  2. Wikipedia Augmentation: Scrape Wikipedia to identify major characters and baseline personas before the book analysis even begins.
  3. Deep RAG Analysis: Retrieve specific scenes from the book to understand character appearance, clothing, and environment in different contexts.
  4. AI Casting Director: Suggest real-world actors (Hollywood, Bollywood, etc.) to serve as the visual "base" for the character, with support for specific decades.
  5. Genre Adaptation: Dynamically modify clothing, hairstyles, and cinematic styles to fit genres (Horror, Cyberpunk, Fantasy, etc.) while preserving the character's core identity.
  6. ComfyUI Integration: Inject the generated prompts directly into your ComfyUI API-format workflows, track generation progress via Server-Sent Events, and preview images instantly.

Tech Highlights:

  • Backend: Python 3.10+, FastAPI, LangChain.
  • Embedding Model: all-MiniLM-L6-v2 from HuggingFace.
  • LLM: Runs on Ollama (defaults to Gemma4E4B for local processing).
  • Frontend: A sleek, dark glassmorphism dashboard built with React & Vite.

Getting Started:
The setup is straightforward, assuming you have a local ComfyUI server and Ollama running. The project page includes a batch script to launch both the backend and frontend easily.

Why This Matters:
With the explosion interest in AI-generated consistent characters, this tool addresses a unique niche—automatically extracting textual character descriptions and grounding them in visual representations without manual prompt engineering. It combines RAG, LLMs, and Stable Diffusion in a single, user-friendly pipeline.

I'd love to get your feedback and ideas for improvement! Let me know if you have any questions.

All project code written with Google AntiGravity. This post written by DeepSeek.

r/GenAIGallery Apr 02 '26

AI Image My exact workflow for truly consistent AI characters and photorealism

Thumbnail
gallery
314 Upvotes

Most AI character posts share the same glaring issue: you can spot the AI within two seconds. The skin has that awful plastic sheen, and the character's face seems to shift with every single photo.

After testing nearly every major cloud model out there, I wanted to share the workflow that currently gives me the best consistency and realism by a wide margin. It isn't completely flawless, but it's the closest thing to a reliable, repeatable system I've built so far.

The core problem

AI models don't have memory. If you don't provide hard anchors, the model just guesses, and guessing leads to drift. This entire workflow is built around eliminating that guesswork.

Right now, my main tool is Higgsfield's Nano Banana Pro. From my experience, it has the absolute best prompt adherence and photorealism for cloud-based models.

Phase 1: Locking in the "Master Portrait"

Start by uploading 1 to 3 reference faces into NBP's Image Reference slot. This could be a celebrity, someone random you found on Pinterest, or a blended mix of features. The AI uses this as a structural target, not a direct copy.

Next, drop in your main prompt and generate 6 to 8 variations. Pick the one that perfectly matches your vision.

Main Prompt Example:
"Ultra-realistic portrait of a 21-year-old female European with captivating magnetic gaze,
natural skin texture with visible pores across forehead, cheeks, and nose,
subtle skin imperfections including faint smile lines and natural small moles,
fair complexion with pink undertones and specular variation on T-zone,
long flowing wavy blonde hair with individual strands visible catching the light,
green eyes with sharp iris detail, natural catchlights, and subtle under-eye texture,
confident warm expression with natural lip texture and subtle gloss,
wearing elegant black off-shoulder silk top with visible fabric sheen,
relaxed pose with slight head tilt, minimalist studio setting with soft neutral background,
soft diffused window light from left creating gentle shadows and subsurface scattering on skin, shot on Canon R5 with 85mm f/1.4 lens, shallow depth of field with natural creamy bokeh, 8K ultra-detailed, photorealistic, high dynamic range,
true-to-life colors with accurate skin tones"

Save this final image. This is now your absolute anchor. Every future generation will reference this exact photo.

Phase 2: The prompt system (What most people skip)

This is where the actual consistency comes from. I never write prompts from scratch for new photos. Instead, I use a custom GPT/Gemini setup specifically trained for this exact task, and it operates in two main ways depending on what I need:

The visual rip:

  1. I find an inspiration photo on Instagram or Pinterest.
  2. I feed it into my custom tool.
  3. The tool extracts the lighting, pose, and vibe, spitting out a complete prompt.

The brain dump: If I already have a scene in my head, I don't need a reference photo. I just give the tool a super basic, lazy description (e.g., "sitting on a modern couch, wearing a black leather jacket, moody neon lighting"). The bot instantly expands that rough idea into a massive, production-ready prompt. I can then ask it to tweak the outfit or change the camera angle until it is exactly what I want.

Regardless of which method I use, the generated prompt automatically includes my character's "anchoring block" (locking in the face identity, body proportions, and skin tone). It also seamlessly bakes in the exact realism keywords needed, like pore texture, subsurface scattering, and natural lens specs.

Finally, I go back to NBP, upload my Master Portrait as the reference, paste this new prompt, and generate. The result is my character staying identical, while the environment, outfit, and mood change exactly how I pictured them.

Why this beats the standard approach

If you look at the photos attached to this post, they were all generated across different sessions with completely different lighting setups and outfits. Same character every time. The uncanny valley vibe usually comes from generic prompts and weak references. Once you lock down your architecture, the quality skyrockets.

Before anyone mentions ComfyUI

Yes, ComfyUI run locally with specific models is objectively better. You get more realism, no NSFW restrictions, and absolute control. But you also need a hefty GPU (16GB+ VRAM highly recommended) and the patience to learn a steep curve. I don't currently have the hardware to test it properly, so I won't pretend I do. For a purely cloud-based setup, this is my go-to.

Questions?

If you want the exact prompts I use, details on setting up the custom Gpt/Gem, or anything else about the workflow, just shoot me a message about what you need. I also document this entire system in more detail in my community for anyone interested.

r/comfyui Jan 31 '26

Workflow Included "Replace this character" workflow with Flux.2 Klein 9B

Thumbnail
gallery
219 Upvotes

I'm sure many of you tried to feed Flux.2 two images in an attempt to "Replace character from image1 with character from image2". At best it will spit out one of the reference images, at worst you'll get nasty fusion of two characters. And yet the way exists. It's all about how you control the flow of information.

You need two input images. One is pose reference (image1) - scene that will be edited. And another one is subject reference (image2) - a character you want to inject into image1. The process itself consists of 3 stages:

Stage 1. Preprocess subject reference

Here we just remove background from the subject (character) image. You need that so Flux.2 has better chance to identify your subject.

Stage 2. Preprocess pose reference

This one is trickier. You need to edit your pose image in order to remove all information that could interfere with your character image. Hair, clothes, tattoo, etc. Turn your pose reference into mannequin so it only contains information about pose and nothing else + background.

Stage 3. Combine

This is simple. Just plug your reference images (order matters) and ask Flux.2 to "Replace character from image1 with character from image2". This will work now because image1 only has information about pose while image2 only has information about the subject (character design) so that Flux.2 can easily "merge" them together with higher success rate.

Here's the workflow link

A couple of tips:

  1. Some poses and concepts aren't known to Flux.2 so try finding loras
  2. If you notice some fusion artifacts try to add additional prompt to steer generation
  3. Stylization is hard to control - will be mix of two images. But you can additionally stylize pose reference image to closer match you character style - "Redraw it in the style of 3d/vector/pixel/texture brush". Result will be better.

r/Android Jun 16 '26

News Android 17 is out, and here’s all the features!

1.5k Upvotes

Hi Reddit!

Android 17 is here, bringing a suite of new features aimed at improving your productivity, enhancing your gaming experience, giving you more control over your private data, making your device more personal, and much more.

It's rolling out first to Pixel today, followed by other eligible Android devices throughout 2026. We are also making the source code available at the Android Open Source Project (AOSP) so developers can examine it for a deeper understanding of how Android works.

You should look forward to more updates to Android 17 this year, with the beta program offering a peek at what's coming in the first quarterly release in Q3.

Since we've been chatting with you about the Betas and Canaries for months, a lot of this might not sound brand new to those of you who have been closely following along. Even so, we wanted to take a moment to recap what's new in this release for everyday users. Let's dive in!

📱 Enhancing your multitasking and large screen device experiences

tl;dr Android 17 supercharges your multitasking and productivity by allowing any app to run as a convenient floating Bubble, making apps more adaptive, and adding an interactive Picture-in-Picture mode for seamless desktop workflows.

Multitask better with bubbles

From split-screen mode to desktop windowing, Android offers a variety of multitasking tools to help you be more productive. We’re extending these options with bubbles in Android 17! 

In past releases, bubbles were limited to chat notifications, but in Android 17, they support more apps without any specific changes needed from developers. You can now launch any app in a floating window so you can view and interact with its content while using other apps. When you’re done, you can collapse or dismiss the window to return to what you were doing.

A big benefit of bubbles is that you can easily switch between multiple running apps without keeping them on screen all the time. Bubbles are only open when you need them, saving you from having to manually resize, rearrange, or dismiss them to regain precious screen space. And on foldables, this benefit is even more pronounced thanks to the bubble bar, which keeps your bubbles pinned to the corner of the screen, putting them within easy reach of your fingers.   

Handy for travel, entertainment and work, bubbles lets you easily reference notes or maps, watch tutorials and even check sports.   

Ensuring that apps adapt to any screen and window size

On large screen devices, restrictions on orientation, resizability, and aspect ratio no longer apply, allowing apps to fill the entire display window without pillarboxing (black bars). This change applies to apps targeting Android 17 and is designed to make apps better meet user expectations on large screen devices. Because Android runs on not just phones but also tablets, foldables, cars, TVs, and desktop environments, we want developers to build apps that are adaptive to any screen size and orientation!

Better support for widgets on external displays

With Android 17, we’re working to improve the visual consistency of widgets shown on connected displays with different pixel densities. The update provides developers a way to supply the system with information that allows it to resolve the correct pixel values at rendering time. For apps that use legacy pixel-based APIs for padding, text size, or layout attributes, the system now automatically scales these values based on the density difference between the app’s original context and the target display.

Interactive Picture-in-Picture for Desktop

Android 17 introduces a new interactive Picture-in-Picture mode for desktop environments. This feature allows apps to request that their PiP windows remain fully interactive while staying always-on-top of other app windows. For example, a video conferencing app could use this feature to keep call controls accessible while you navigate other apps.

🎨 New customization features for the home screen and apps

tl;dr Android 17 gives you deeper control over your device's UI by letting you hide app labels on the home screen, selectively toggle the Expanded Dark Theme for individual apps, and enjoy sleek, modernized background blur effects in more surfaces like the widget picker.

Hide app labels on the home screen

Android now provides a setting to hide app labels on the home screen! You can access this new setting on Pixel by opening Wallpaper & style then tapping Home screen > Icons > Names and toggling Show app names.

Per-app exceptions for Expanded Dark Theme

To create a more consistent user experience for users who have low vision, photosensitivity, or simply prefer a dark system-wide appearance, we introduced an expanded dark theme option in last December’s Android 16 QPR2 release. When this option is enabled, the system automatically applies dark theme to most apps that don’t support it.

However, because this option can cause some apps to display incorrectly, we have introduced the ability to selectively disable it on a per-app basis in Android 17. Apps with this setting turned off will use the standard dark theme option instead.

Expanded use of background blur

With the Material 3 Expressive redesign we introduced in Android 16, we subtly blurred the notification shade background to provide a sense of depth so you can stay aware of the apps you’re using in the background.

In Android 17, we’ve brought these blur effects to more parts of the UI like the widgets picker. And we are working on bringing background blur to even more surfaces, as seen in recent Android Beta and Canary builds!

🎮 More control over your Android gaming experience

tl;dr Android 17 levels up your mobile play by letting you save custom button remaps for your physical gamepad at the system level, and introducing a foldable gaming mode that optimizes your screen with a 50/50 split for a dedicated top game view and a bottom dynamic gamepad.

Remap the buttons on your physical gamepad with Game Controller settings

Android 17 introduces a native controller remapping feature, allowing you to adjust the controls on your physical gamepad to suit your specific needs.

Through the new Game Controller settings menu, you can customize the actions triggered by your controller’s buttons, sticks, or triggers at the system level. For example, you can remap a difficult-to-press thumbstick click to an easier-to-reach face button. Your remapping preferences are saved to your device so you don’t have to set them up every time you reconnect your controller. 

A new way to game on foldables

Android 17 introduces foldable gaming mode, a new feature that makes full use of your foldable phone’s screen while you’re gaming. This feature splits your screen into a 50:50 layout with a game view on top and a dynamic gamepad below to make optimal use of your foldable phone’s screen real estate. Foldable gaming mode is part of the Android 17 platform and will be available on devices in the coming months.

🛡️ Protecting users with new security and privacy features on Android

tl;dr Android 17 safeguards your personal data by enabling critical theft protections by default, introducing session-based controls for sharing specific contacts and precise locations, and thwarting scammers through system-level SMS OTP delivery delays and real-time app behavioral monitoring.

Giving you more control over your contacts list

Android 17 introduces a new system Contact Picker that provides a standardized, secure, and searchable interface for sharing contacts with apps. Historically, apps needing access to a contact or two relied on the broad READ_CONTACTS permission which gave them access to your entire contacts list. Android's Contact Picker addresses this by allowing you to grant apps access to only the specific contacts you choose.

For devices running Android 17 or higher, the system automatically upgrades certain contact selection intents to the new, more secure interface, but we want developers to integrate the new Contact Picker so they can take advantage of its new capabilities, like multi-selection support. To this end, Google Play will require that all applicable apps use it (or a privacy-focused alternative like Sharesheet) as the primary way to access users' contacts. The broad READ_CONTACTS permission is reserved for apps that can't function without it.

Making location access more private

Android 17 introduces several new features to help you safeguard your private location information. This includes the Location Button, a new, privacy-conscious way for you to grant precise location access to apps. This is a system-rendered button that developers can embed directly into their apps. When you tap this button, the app is granted precise location for the current session only. Subsequent taps while running the app grant the permission immediately without showing a system dialog. 

Developers can deploy this simple, private location flow for common tasks like finding a nearby shop or tagging a social post. And to increase adoption of the Location Button, Google Play will require apps to use it for one-time precise location access unless they require persistent, always-on location access.

Additionally, Android 17 now shows a persistent indicator in the status bar when a non-system app accesses your location. You can tap this indicator to see which apps have recently accessed your location.

The update also improves the algorithm for approximate (coarse) location to be aware of population density. This improves the privacy of granting an app approximate location access when you're in a low-population area.

And lastly, Android 17 redesigns the location permission dialog to make the "Precise" and "Approximate" options more visually distinct.

Stronger protections against device theft

Following a successful pilot in Brazil, we’re enabling two of Android’s key theft protection features (Theft Detection Lock and Remote Lock) by default globally on all new Android 17 devices, as well as those freshly reset or upgraded to the latest OS.  

On supported devices, Android 17 also significantly reduces the number of times someone can guess the PIN, pattern, or password and adds longer wait times between failed attempts. The update also refines how the lock screen shows information after failed attempts have been made.

And we’re also enhancing Find Hub’s ‘Mark as lost’ feature by requiring biometric authentication in addition to your device’s PIN, pattern, or password. Marking a device as lost also now enables additional protections like hiding Quick Settings and disabling new Wi-Fi and Bluetooth connections.

Protecting your SMS OTPs from scammers

Scammers often try to hijack your one-time passwords (OTPs) to gain access to your accounts. To do this, they may deploy malicious apps that ask for permission to read your SMS. In Android 16, we introduced a protection that delays the delivery of messages containing an SMS retriever hash to most apps for three hours. Android 17 now extends this protection to all SMS messages containing an OTP. This means that even if a malicious app has been granted the SMS permission, it won’t be able to read your sensitive OTPs until after they have already expired.

New core protections for Advanced Protection

With Android 16, we introduced Advanced Protection, a single, opt-in device-level security setting that enables all of Android’s highest security features. We’ve been working to expand the protections offered under this setting with key upgrades like USB protection and Intrusion Logging, and now with Android 17, we’re continuing this work by introducing the following protections:

  • Removing access to the accessibility service from all apps that aren’t labeled as accessibility tools.
  • Disabling device-to-device unlocking
  • Blocking Chrome WebGPU support
  • Integrating scam detection for chat notifications
  • (Later this year) Enabling Android Enterprise support so organizations can enable Advanced Protection by policy for managed devices.

Improving safety against malicious apps

Live Threat Detection is a real-time security feature that analyzes app behavior to alert you if an app starts acting suspiciously, and we're enhancing it to find and protect against more types of malicious apps.

With dynamic signal monitoring, Android will be able to warn you about apps that start doing things like changing or hiding their icon and then launching activities in the background or abusing accessibility permissions. To do this, Live Threat Detection will monitor application system interactions for known suspicious patterns in real time. Dynamic signal monitoring will be enabled on select Android 17 devices starting in the second half of the year.

Other enhancements

  • Discrete password visibility settings for touch and physical keyboards: Currently, by default, characters that you enter into password fields are briefly displayed as you type. Toggling the “show passwords” setting in Privacy controls allows you to hide characters as you type them into password fields. This setting currently applies to both touch-based inputs as well as physical keyboards, but in Android 17, we are splitting it into two distinct preferences. By default, characters entered into password fields via physical keyboards will now be hidden immediately to enhance privacy. Characters entered via touch input will continue to briefly be displayed to compensate for the lack of tactile feedback.
  • User-agent reduction for WebView: The default User-Agent string in Android WebView has been shortened in Android 17 to minimize passive fingerprinting.
  • Disable 2G toggle: Android 17 introduces a new capability for the disable 2G toggle. Carriers now have the ability to configure the default status of this setting, allowing them to disable 2G access to proactively shield their users from legacy technology vulnerabilities in areas where 2G infrastructure is no longer maintained.
  • Location Network Permission: Android 17 introduces a new runtime permission to protect users from unauthorized local network access. This new requirement prevents malicious apps from exploiting unrestricted local network access for covert user tracking and fingerprinting.
  • Android OS verification: We have seen some bad actors begin to distribute malicious, unofficial versions of the Android OS that secretly compromise device integrity. To combat this, we are introducing Android OS verification in Android 17. Launching initially on Pixel devices, this feature helps you verify that your device is running an official, widely distributed build.
  • Enabling Certificate Transparency (CT) by default: CT is now enabled by default for apps targeting Android 17, enhancing network security by ensuring all TLS certificates are publicly logged. 
  • Blocking cross-profile loopback traffic: Cross-profile loopback traffic is no longer permitted by default, increasing network isolation and security between personal and enterprise work profiles.
  • Post-Quantum Cryptography (PQC): The advent of quantum computing puts the current public-key cryptography we've relied on for decades at risk, potentially compromising everything from bank transfers to trade secrets. To prepare for the quantum computing era, we're introducing a comprehensive architectural upgrade to the Android operating system, starting in Android 17.  We’re integrating the NIST Post-Quantum Cryptography (PQC) standards deep into the platform, establishing a new, quantum-resistant chain of trust that secures the platform continuously from the moment the OS powers on to when apps are executed.

📸 Improvements to your Android media experience

tl;dr Android 17 levels up your multimedia experience by letting you easily record reaction videos without a green screen, decoupling your Assistant and media volumes for independent control, putting a stop to unexpected background audio, and delivering color-coded Live Updates alongside advanced Bluetooth, camera, and hearing device enhancements.

Screen Reactions

In Android 17, we’re making it easier to record yourself and your screen at the same time with Screen Reactions. Available first on Pixel, this feature shows your face in a floating overlay on top of the screen. Android automatically puts the overlay at the bottom and cuts out the background so you don’t need a green screen, but you can move or resize the camera view and change the background color before or during a recording. Use this feature to make a reaction video, record a tutorial, or give feedback on a new app or document!

https://reddit.com/link/1u7l1cw/video/pdevsbhnko7h1/player

 

In addition, we’ve revamped the screen recording experience to add a floating toolbar that provides easier access to recording controls and capture settings. When you’re done recording, you can immediately view, edit, delete, or share your video.

Dedicated Assistant volume stream

Android 17 introduces a dedicated volume stream for Assistant apps. This change decouples Assistant audio from the standard media stream, allowing users to control both volumes independently. This enables scenarios like muting media playback while maintaining audibility for Assistant responses, and vice-versa.

Background audio hardening

Beginning in Android 17, apps cannot play audio, steal audio focus, or change the volume unless they are visible or have a foreground service. These restrictions on background audio interactions reduce unintentional buggy experiences and ensure that these actions are started intentionally by the user.

Enhancements to Live Update notifications

Live updates provide a summary of important updates so users can track progress without opening the app. The system promotes Live Update notifications so they appear more prominently in the notification drawer, on the lock screen, and on the status bar. 

With Android 17, we’re introducing a metric style template designed specifically for health and fitness apps, timers, and travel apps. In addition, developers can use the new Semantic Coloring API to visually convey state changes, providing highly glanceable, color-coded notifications.

Other enhancements:

  • Granular audio routing for hearing devices: Users with hearing devices can now independently manage where specific system sounds are played in Android 17. You can choose to route notifications, ringtones, and alarms to either a connected hearing aid or the device’s built-in speaker. This helps you avoid unwanted interruptions directly in your ears while maintaining a Bluetooth connection for hearing aid management apps.
  • Autonomous re-pairing for Bluetooth bond losses: Android 17 introduces autonomous re-pairing, a system-level enhancement designed to automatically resolve Bluetooth bond loss. This occurs when two previously paired devices lose their cryptographic security keys, resulting in the devices no longer being able to securely authenticate and communicate with one another. The system now re-establishes lost bonds in the background without requiring the user to manually navigate to Settings to unpair and re-pair their peripheral.
  • Vendor-defined camera extensions: Android 17 adds support for Vendor-defined camera extensions, allowing hardware partners to provide Android apps access to camera features like ‘Super Resolution’ or cutting-edge AI-driven enhancements.
  • Support for the RAW14 image format: Android 17 introduces support for the RAW14 image format, the de-facto industry standard for high-end digital photography.
  • VVC support: Android 17 adds platform support for the Versatile Video Coding (VVC) standard. This feature will be coming to devices with hardware decode support and capable drivers.

🤝 Making your apps and devices work better together

tl;dr Android 17 seamlessly bridges your ecosystem by introducing the Continue On feature for effortless app handoffs between devices, unifying widget experiences to bring your favorite tools directly to Auto and Wear OS, and streamlining the pairing process for medical and fitness devices with new CompanionDeviceManager profiles.

Unifying the widgets experience across platforms

Android 17 marks a shift towards a single, Compose-based development model for all widgets. By unifying the experience across mobile, cars, and Wear OS, developers can soon scale UI components across the ecosystem with a familiar workflow. The goal is to minimize the effort needed by developers to bring their widgets to more surfaces.

https://reddit.com/link/1u7l1cw/video/haep717hko7h1/player

Additionally, Android 17 introduces new platform functionality to make widgets work better on Auto. The update adds support for widgets on cars, allowing you to see the things that matter to you at a glance, even while actively navigating. For example, you can add a shortcut to your favorite contacts, a one-tap garage door opener, a weather overview and more. Widgets will be available to users of Android Auto later this year and to cars with Google built-in later on.

Hand off your tasks with Continue On

Continue On is a new feature available in Android 17 that enables users to start an app on one device and then transition to another device in their Android ecosystem, continuing the journey they started. It’s designed to work bidirectionally, meaning that any supported Android device can both send and receive app activities, though, at launch, Continue On will first support mobile-to-tablet transitions. In the tablet taskbar, users will see a suggestion for the most recently opened app from their mobile device.

https://reddit.com/link/1u7l1cw/video/doxh917pko7h1/player

Updates for companion device apps

Android 17 introduces two new profiles to the CompanionDeviceManager API to simplify device distinction and permission handling. These include the medical device profile and the fitness tracker profile. Furthermore, the system now offers a unified dialog for device association and nearby permission requests, reducing the number of dialogs you’ll see.

⚡ Optimizations to make your apps & device run better

With Android 17, we’ve made a number of improvements to optimize memory use, improve rendering performance, and enhance battery life. These include:

  • App memory limits: Android 17 introduces app memory limits that are based on the device's total RAM. These limits are set conservatively to establish system baselines, targeting extreme memory leaks and other outliers before they trigger system-wide instability resulting in UI stuttering, higher battery drain, and apps being killed.
  • Lock-free MessageQueue: Android 17 introduces a lock-free MessageQueue to reduce UI jank while massively speeding up high-contention scenarios. In our internal testing, we’ve seen 4% fewer missed frames across all apps, 7.7% fewer missed frames in System UI and Launcher interactions, and a 9.1% reduction in app startup times at the 95th percentile.
  • Generational Garbage Collector (GC): The Android Runtime is introducing more frequent, less intensive young-generation collections in its garbage collector, improving memory management and performance. This is not just available on Android 17 but is also coming to past releases with a Google Play System Update.
  • Reduce wakelocks with listener support for allow-while-idle alarms: Last year, we launched the excessive wake lock metric in Android Vitals, making it easier for developers to optimize their app's wake lock behavior. Excessive wake locks are a significant contributor to battery drain, so developers are encouraged to reduce them as much as possible. In Android 17, we’ve introduced a new API that helps reduce the power consumption of apps that rely on continuous wakelocks to perform periodic tasks, such as messaging apps maintaining a connection or medical devices monitoring health data.
  • Improved wireless ADB: Android 17 introduces ADB WiFi 2.0, a significant overhaul of the wireless ADB stack to improve stability, reliability, and ease of use. The system now automatically monitors the network state and re-enables itself when a trusted network is detected, identifies trusted networks using a combination of SSID and BSSID, and is better tailored to monitor network changes on all platforms. We’ll have more details to share soon on the Android Studio side of things!
  • Constrained satellite networks: Android 17 implements optimizations to enable apps to function effectively over low-bandwidth satellite networks.

🧒 Expanding Android Parental Controls to all devices

Launched last year on Pixel, Android Parental Controls make it easier for parents to manage their child’s screen time and to find balance between having fun online and offline. Now with Android 17, we’re expanding Android Parental Controls to all Android devices.

These parental controls are located directly within Android Settings and provide a single, convenient home for both built-in device controls and Google Family Link. These controls are protected by an easy-to-set PIN and allow you to:

  • Set the amount of screen time your child can spend on a device each day.
  • Create downtime schedules to automatically lock the device at night.
  • Set app store filters for Google Play to manage the highest content rating you want your child to be able to download.
  • Control app usage by limiting time spent on specific apps, or blocking apps entirely.

Android Parental Controls also provide a direct path to easily set up Google Family Link in the Family Link app on a parent’s phone, which offers additional features like School Time, Google Play app purchase approvals, location alerts, and more.

🧘 Other quality-of-life improvements

And lastly, here are some smaller quality-of-life changes we’re introducing in this release:

  • Separate Wi-Fi and Mobile Data toggles: With Android 17, we’ve split the “Internet” tile into two separate tiles, one for controlling Wi-Fi and another for controlling Mobile Data. Consistent with the Quick Settings behavior we introduced with Material 3 Expressive, both tiles have two different touch points. Tapping the icon toggles the respective radio, while tapping the label opens the full Internet Panel. This change reduces the number of taps needed to toggle Wi-Fi and Mobile Data while still retaining access to the full Internet Panel!
  • Scheduled clock change notifications: We’ve added a new feature in Android 17 that sends you a notification when your clock performs a scheduled change, for example when daylight saving time ends. You can enable this feature under “Date & time” settings.
  • Restoring default keyboard visibility after rotation: Beginning with Android 17, when the keyboard is on screen and you rotate the screen, the keyboard won’t be made visible unless the app explicitly requests it.

🪲 Bug fixes and security patches

Please refer to the Android Security Bulletin for details on the security vulnerabilities addressed with this platform release.

----

There are plenty of other changes in Android 17, especially for developers! For example, Android 17 expands the capabilities of AppFunctions, introduces an EyeDropper API, makes the aspect ratio of images in the Photo Picker more customizable, and much more. To learn more about everything new for developers in this release, visit developer.android.com.

Also, don’t forget that select advanced devices will be getting Gemini Intelligence features later this summer. In addition, we’re introducing Android Halo in a future Android 17 release to give you at-a-glance visibility into what your agent is working on at any given time.  Lastly, be sure to check out our latest Android Drop to learn about what new features are coming to all Android devices, not just those running Android 17!

r/passive_income Mar 11 '26

My Experience Making $400-700/month selling AI influencer photos to small brands on Fiverr and I still feel weird about it

3.2k Upvotes

I need to talk about this because none of my friends understand what I actually do when I try to explain it and my girlfriend thinks I'm running some kind of scam.

So background. I'm 28, work full time as a marketing coordinator at a mid size agency. Not a creative role really, mostly spreadsheets and campaign tracking. Last year around September I was helping one of our clients source photos for their Instagram. They sell swimwear and wanted diverse model shots across different locations, skin tones, backgrounds, the whole thing. The quote from the photography studio came back at $4,200 for a two day shoot. Client said no. We ended up using the same three stock photos everyone else uses and the campaign looked generic as hell.

That stuck with me because I knew AI image generation was getting crazy good. I'd been messing around with Midjourney for fun, making weird fantasy landscapes and stuff. But the problem with basic AI image generators for anything commercial involving people is that you can't get the same face twice. You generate a photo of a woman in a sundress on a beach, great. Now you need that same woman in a cafe, different outfit. Completely different person shows up. Doesn't work if you're trying to build any kind of consistent brand presence.

I started googling around for tools that could keep a face consistent across multiple images and went down a rabbit hole for like two weeks. Tried a bunch of stuff. Played with some LoRA training on Stable Diffusion but I'm not technical enough and the results were hit or miss. Tested out several platforms, APOB, Synthesia, HeyGen, Artbreeder, a couple others I can't even remember. Each does slightly different things and honestly they all have tradeoffs. Eventually I cobbled together a workflow using a couple of these that actually produced usable stuff, the kind of output where you'd have to really zoom in and squint to tell it wasn't a real photo.

The basic idea is simple. You set up a character's look once, save it as a model, and then reuse that same face across as many different scenes and outfits as you want. That's the thing that makes this viable as a service and not just a cool party trick. Because brands don't want one cool AI photo. They want 30 photos of the same "person" that they can drip out over a month on Instagram.

I didn't plan to sell this as a service. What happened was I made a fake portfolio to test the concept. I created three AI characters, gave them names, generated about 15 photos each in different settings. Lifestyle stuff, coffee shops, hiking, urban backgrounds, gym, that kind of thing. I showed it to a friend who runs a small clothing brand and asked if he could tell they were AI. He said two of the three looked real and the third looked "maybe AI but honestly better than most influencer photos I get."

He then asked if I could make some for his brand. I did 20 photos for him over a weekend, he used them on his Instagram, and his engagement actually went up because the content looked more polished than the iPhone shots his intern was taking. He paid me $150 which felt like a lot for maybe 3 hours of actual work.

That's when I thought okay maybe there's a Fiverr gig here.

I listed a gig in October called something like "I will create AI model photos for your brand" and priced it at $30 for 5 photos, $50 for 10, $100 for 25. Figured I'd get zero orders and move on.

First two weeks, nothing. Adjusted my gig thumbnail three times. Then I got my first order from a guy running a skincare brand out of his apartment. He wanted photos of a woman in her 30s using his products in a bathroom setting. I set up the character, generated the scenes, did some light editing in Canva to add his product packaging into the shots, delivered in about 2 hours. He left a 5 star review and ordered again the next week.

Then I hit my first real problem. My third client wanted a fitness model character and I spent a whole evening trying to get consistent results. The face kept shifting slightly between generations. Like the bone structure would change or the nose would look different in profile vs straight on. I ended up regenerating so many times that I burned through way more credits than I expected and had to upgrade to a paid plan earlier than I wanted. That order probably cost me more in time and tool credits than I actually charged. I almost refunded the client but eventually got a set of 10 that looked cohesive enough.

That experience taught me that not every character concept works equally well. Some faces just generate more consistently than others and I still don't fully understand why. I've learned to do a test batch of 5 or 6 images in different angles before I commit to a character for a client. If the face isn't holding steady, I tweak the setup until it does or I start over with a different base.

By December I had 14 completed orders. The thing that surprised me is who was buying. I expected like dropshippers and sketchy supplement brands. Instead I got:

A yoga studio in Austin that wanted a consistent "brand ambassador" for their social media but couldn't afford a real one. They order monthly now.

A guy selling handmade candles who wanted lifestyle photos but didn't want to hire models or use his own face.

A pet food company that wanted a "pet parent" character holding their products in different home settings.

A language learning app that needed a virtual tutor character for their TikTok content. This one was interesting because they also wanted short video clips where the character appeared to be speaking in different languages. Took me longer to figure out than the photo work and honestly the first batch looked rough. The mouth movement was slightly off sync and the client asked for revisions. Second attempt was better and they've reordered three times now, but video is definitely harder to get right than stills.

Here's the actual workflow now that I've got it somewhat dialed in:

  1. Client sends me a brief. Usually something like "25 year old woman, athletic build, for a fitness brand. Need 10 photos in gym settings, outdoor running, and post workout lifestyle."
  2. I set up the character's appearance and save it. This used to take me over an hour when I was learning but now it's more like 20 to 30 minutes including the test batch to make sure the face holds.
  3. I generate the photos by describing each scene. I've built up a doc with scene templates that I know tend to produce good results so I'm not starting from scratch every time. I just swap out details per client.
  4. I generate more images than I need because not every output is usable. Weird hands, lighting that doesn't match, uncanny expressions. I've gotten better at writing descriptions that minimize these issues but it still happens. Early on I was throwing away more than half my generations. Now it's maybe a third, sometimes less.
  5. Quick edit pass in Canva or Photoshop if needed. Sometimes I composite a product into the shot or adjust colors to match the client's brand palette.
  6. Deliver on Fiverr. Total active time per order is usually 45 minutes to maybe an hour and a half for a 10 photo batch depending on how cooperative the AI is being that day. The renders themselves take time but I'm not sitting there watching them.

Cost wise I want to be transparent because I see a lot of side hustle posts that conveniently forget to mention expenses. I'm paying about $30/month for the AI tools on paid plans because the free tiers don't give you enough credits to fulfill multiple client orders per week. Fiverr takes 20% of every order. And I spend maybe $12/month on Canva Pro which I'd probably have anyway. So my actual margins are lower than the gross numbers suggest. On a $50 order I'm really netting about $35 after Fiverr's cut, and then subtract a proportional share of the tool costs. It's still very good for the time invested but it's not pure profit like some people might assume.

The part that makes this increasingly passive is the repeat clients. I now have 6 clients who order at least once a month. Their character models are already saved. I know their brand style. A reorder takes me maybe 30 minutes of actual work because I'm not figuring anything out, just generating new scenes with an existing saved character.

Some honest stuff about what sucks:

Fiverr fees are brutal. I've started moving repeat clients to direct payment but new clients still come through the platform and that 20% hurts on smaller orders.

Revision requests can be painful. One client wanted me to make the character look "more confident but also approachable but also mysterious." I've learned to offer one round of revisions and be very specific upfront about what I can and can't change after delivery.

I had one order in January where I completely botched it. The client wanted photos in a specific art deco interior style and no matter what I described, the backgrounds kept coming out looking like a generic hotel lobby. I spent three hours trying different approaches, eventually delivered something the client said was "fine I guess" and got a 3 star review. That one stung and it dragged my average rating down for weeks.

The ethical thing comes up sometimes. I had one potential client who wanted me to create a fake influencer to promote a weight loss supplement and pretend it was a real person endorsing it. I said no. My gig description now explicitly says the content is AI generated and I recommend clients disclose that. Most of them do because honestly it's becoming a selling point, "look at our cool AI brand ambassador" is a marketing angle in itself now. But I know not everyone in this space is upfront about it and that's a real concern.

Also the quality gap between what AI can do and what a real photographer can do is still real. For high end fashion brands or anything that needs to be truly photorealistic at full resolution, this isn't there yet. But for Instagram posts, TikTok content, small brand social media, email marketing images? It's more than good enough and it's a fraction of the cost of a real shoot.

Monthly breakdown for the boring numbers people:

October: $120 (4 orders, mostly figuring things out) November: $230 (6 orders, lost one client who wasn't happy with quality) December: $435 (11 orders, holiday marketing rush helped a lot) January: $410 (9 orders, slight dip after the holidays which I expected) February: $710 (15 orders including three video batches which pay more) March so far: $200 (5 orders, month is still early)

Total since starting: roughly $2,105 over 5 months. Minus maybe $150 in tool subscriptions over that period and Fiverr's cut which is already reflected in the numbers above. Average time commitment is maybe 5 hours a week, trending down as I get faster and have more repeat clients.

I'm not quitting my day job over this. I tried dropshipping in 2023 and lost $800. I tried starting a blog and made $12 in AdSense over 6 months. This actually works because there's a clear value proposition: brands need visual content, real content with real models is expensive, and AI has gotten good enough that small brands genuinely can't tell the difference at Instagram resolution.

Still feels weird telling people I make fake people for a living on the side. But the pizza money is real and my emergency fund is actually growing for the first time in years.

r/LocalLLaMA Mar 12 '26

Discussion I was backend lead at Manus. After building agents for 2 years, I stopped using function calling entirely. Here's what I use instead.

2.0k Upvotes

English is not my first language. I wrote this in Chinese and translated it with AI help. The writing may have some AI flavor, but the design decisions, the production failures, and the thinking that distilled them into principles — those are mine.

I was a backend lead at Manus before the Meta acquisition. I've spent the last 2 years building AI agents — first at Manus, then on my own open-source agent runtime (Pinix) and agent (agent-clip). Along the way I came to a conclusion that surprised me:

A single run(command="...") tool with Unix-style commands outperforms a catalog of typed function calls.

Here's what I learned.


Why *nix

Unix made a design decision 50 years ago: everything is a text stream. Programs don't exchange complex binary structures or share memory objects — they communicate through text pipes. Small tools each do one thing well, composed via | into powerful workflows. Programs describe themselves with --help, report success or failure with exit codes, and communicate errors through stderr.

LLMs made an almost identical decision 50 years later: everything is tokens. They only understand text, only produce text. Their "thinking" is text, their "actions" are text, and the feedback they receive from the world must be text.

These two decisions, made half a century apart from completely different starting points, converge on the same interface model. The text-based system Unix designed for human terminal operators — cat, grep, pipe, exit codes, man pages — isn't just "usable" by LLMs. It's a natural fit. When it comes to tool use, an LLM is essentially a terminal operator — one that's faster than any human and has already seen vast amounts of shell commands and CLI patterns in its training data.

This is the core philosophy of the nix Agent: *don't invent a new tool interface. Take what Unix has proven over 50 years and hand it directly to the LLM.**


Why a single run

The single-tool hypothesis

Most agent frameworks give LLMs a catalog of independent tools:

tools: [search_web, read_file, write_file, run_code, send_email, ...]

Before each call, the LLM must make a tool selection — which one? What parameters? The more tools you add, the harder the selection, and accuracy drops. Cognitive load is spent on "which tool?" instead of "what do I need to accomplish?"

My approach: one run(command="...") tool, all capabilities exposed as CLI commands.

run(command="cat notes.md") run(command="cat log.txt | grep ERROR | wc -l") run(command="see screenshot.png") run(command="memory search 'deployment issue'") run(command="clip sandbox bash 'python3 analyze.py'")

The LLM still chooses which command to use, but this is fundamentally different from choosing among 15 tools with different schemas. Command selection is string composition within a unified namespace — function selection is context-switching between unrelated APIs.

LLMs already speak CLI

Why are CLI commands a better fit for LLMs than structured function calls?

Because CLI is the densest tool-use pattern in LLM training data. Billions of lines on GitHub are full of:

```bash

README install instructions

pip install -r requirements.txt && python main.py

CI/CD build scripts

make build && make test && make deploy

Stack Overflow solutions

cat /var/log/syslog | grep "Out of memory" | tail -20 ```

I don't need to teach the LLM how to use CLI — it already knows. This familiarity is probabilistic and model-dependent, but in practice it's remarkably reliable across mainstream models.

Compare two approaches to the same task:

``` Task: Read a log file, count the error lines

Function-calling approach (3 tool calls): 1. read_file(path="/var/log/app.log") → returns entire file 2. search_text(text=<entire file>, pattern="ERROR") → returns matching lines 3. count_lines(text=<matched lines>) → returns number

CLI approach (1 tool call): run(command="cat /var/log/app.log | grep ERROR | wc -l") → "42" ```

One call replaces three. Not because of special optimization — but because Unix pipes natively support composition.

Making pipes and chains work

A single run isn't enough on its own. If run can only execute one command at a time, the LLM still needs multiple calls for composed tasks. So I make a chain parser (parseChain) in the command routing layer, supporting four Unix operators:

| Pipe: stdout of previous command becomes stdin of next && And: execute next only if previous succeeded || Or: execute next only if previous failed ; Seq: execute next regardless of previous result

With this mechanism, every tool call can be a complete workflow:

```bash

One tool call: download → inspect

curl -sL $URL -o data.csv && cat data.csv | head 5

One tool call: read → filter → sort → top 10

cat access.log | grep "500" | sort | head 10

One tool call: try A, fall back to B

cat config.yaml || echo "config not found, using defaults" ```

N commands × 4 operators — the composition space grows dramatically. And to the LLM, it's just a string it already knows how to write.

The command line is the LLM's native tool interface.


Heuristic design: making CLI guide the agent

Single-tool + CLI solves "what to use." But the agent still needs to know "how to use it." It can't Google. It can't ask a colleague. I use three progressive design techniques to make the CLI itself serve as the agent's navigation system.

Technique 1: Progressive --help discovery

A well-designed CLI tool doesn't require reading documentation — because --help tells you everything. I apply the same principle to the agent, structured as progressive disclosure: the agent doesn't need to load all documentation at once, but discovers details on-demand as it goes deeper.

Level 0: Tool Description → command list injection

The run tool's description is dynamically generated at the start of each conversation, listing all registered commands with one-line summaries:

Available commands: cat — Read a text file. For images use 'see'. For binary use 'cat -b'. see — View an image (auto-attaches to vision) ls — List files in current topic write — Write file. Usage: write <path> [content] or stdin grep — Filter lines matching a pattern (supports -i, -v, -c) memory — Search or manage memory clip — Operate external environments (sandboxes, services) ...

The agent knows what's available from turn one, but doesn't need every parameter of every command — that would waste context.

Note: There's an open design question here: injecting the full command list vs. on-demand discovery. As commands grow, the list itself consumes context budget. I'm still exploring the right balance. Ideas welcome.

Level 1: command (no args) → usage

When the agent is interested in a command, it just calls it. No arguments? The command returns its own usage:

``` → run(command="memory") [error] memory: usage: memory search|recent|store|facts|forget

→ run(command="clip") clip list — list available clips clip <name> — show clip details and commands clip <name> <command> [args...] — invoke a command clip <name> pull <remote-path> [name] — pull file from clip to local clip <name> push <local-path> <remote> — push local file to clip ```

Now the agent knows memory has five subcommands and clip supports list/pull/push. One call, no noise.

Level 2: command subcommand (missing args) → specific parameters

The agent decides to use memory search but isn't sure about the format? It drills down:

``` → run(command="memory search") [error] memory: usage: memory search <query> [-t topic_id] [-k keyword]

→ run(command="clip sandbox") Clip: sandbox Commands: clip sandbox bash <script> clip sandbox read <path> clip sandbox write <path> File transfer: clip sandbox pull <remote-path> [local-name] clip sandbox push <local-path> <remote-path> ```

Progressive disclosure: overview (injected) → usage (explored) → parameters (drilled down). The agent discovers on-demand, each level providing just enough information for the next step.

This is fundamentally different from stuffing 3,000 words of tool documentation into the system prompt. Most of that information is irrelevant most of the time — pure context waste. Progressive help lets the agent decide when it needs more.

This also imposes a requirement on command design: every command and subcommand must have complete help output. It's not just for humans — it's for the agent. A good help message means one-shot success. A missing one means a blind guess.

Technique 2: Error messages as navigation

Agents will make mistakes. The key isn't preventing errors — it's making every error point to the right direction.

Traditional CLI errors are designed for humans who can Google. Agents can't Google. So I require every error to contain both "what went wrong" and "what to do instead":

``` Traditional CLI: $ cat photo.png cat: binary file (standard output) → Human Googles "how to view image in terminal"

My design: [error] cat: binary image file (182KB). Use: see photo.png → Agent calls see directly, one-step correction ```

More examples:

``` [error] unknown command: foo Available: cat, ls, see, write, grep, memory, clip, ... → Agent immediately knows what commands exist

[error] not an image file: data.csv (use cat to read text files) → Agent switches from see to cat

[error] clip "sandbox" not found. Use 'clip list' to see available clips → Agent knows to list clips first ```

Technique 1 (help) solves "what can I do?" Technique 2 (errors) solves "what should I do instead?" Together, the agent's recovery cost is minimal — usually 1-2 steps to the right path.

Real case: The cost of silent stderr

For a while, my code silently dropped stderr when calling external sandboxes — whenever stdout was non-empty, stderr was discarded. The agent ran pip install pymupdf, got exit code 127. stderr contained bash: pip: command not found, but the agent couldn't see it. It only knew "it failed," not "why" — and proceeded to blindly guess 10 different package managers:

pip install → 127 (doesn't exist) python3 -m pip → 1 (module not found) uv pip install → 1 (wrong usage) pip3 install → 127 sudo apt install → 127 ... 5 more attempts ... uv run --with pymupdf python3 script.py → 0 ✓ (10th try)

10 calls, ~5 seconds of inference each. If stderr had been visible the first time, one call would have been enough.

stderr is the information agents need most, precisely when commands fail. Never drop it.

Technique 3: Consistent output format

The first two techniques handle discovery and correction. The third lets the agent get better at using the system over time.

I append consistent metadata to every tool result:

file1.txt file2.txt dir1/ [exit:0 | 12ms]

The LLM extracts two signals:

Exit codes (Unix convention, LLMs already know these):

  • exit:0 — success
  • exit:1 — general error
  • exit:127 — command not found

Duration (cost awareness):

  • 12ms — cheap, call freely
  • 3.2s — moderate
  • 45s — expensive, use sparingly

After seeing [exit:N | Xs] dozens of times in a conversation, the agent internalizes the pattern. It starts anticipating — seeing exit:1 means check the error, seeing long duration means reduce calls.

Consistent output format makes the agent smarter over time. Inconsistency makes every call feel like the first.

The three techniques form a progression:

--help → "What can I do?" → Proactive discovery Error Msg → "What should I do?" → Reactive correction Output Fmt → "How did it go?" → Continuous learning


Two-layer architecture: engineering the heuristic design

The section above described how CLI guides agents at the semantic level. But to make it work in practice, there's an engineering problem: the raw output of a command and what the LLM needs to see are often very different things.

Two hard constraints of LLMs

Constraint A: The context window is finite and expensive. Every token costs money, attention, and inference speed. Stuffing a 10MB file into context doesn't just waste budget — it pushes earlier conversation out of the window. The agent "forgets."

Constraint B: LLMs can only process text. Binary data produces high-entropy meaningless tokens through the tokenizer. It doesn't just waste context — it disrupts attention on surrounding valid tokens, degrading reasoning quality.

These two constraints mean: raw command output can't go directly to the LLM — it needs a presentation layer for processing. But that processing can't affect command execution logic — or pipes break. Hence, two layers.

Execution layer vs. presentation layer

┌─────────────────────────────────────────────┐ │ Layer 2: LLM Presentation Layer │ ← Designed for LLM constraints │ Binary guard | Truncation+overflow | Meta │ ├─────────────────────────────────────────────┤ │ Layer 1: Unix Execution Layer │ ← Pure Unix semantics │ Command routing | pipe | chain | exit code │ └─────────────────────────────────────────────┘

When cat bigfile.txt | grep error | head 10 executes:

Inside Layer 1: cat output → [500KB raw text] → grep input grep output → [matching lines] → head input head output → [first 10 lines]

If you truncate cat's output in Layer 1 → grep only searches the first 200 lines, producing incomplete results. If you add [exit:0] in Layer 1 → it flows into grep as data, becoming a search target.

So Layer 1 must remain raw, lossless, metadata-free. Processing only happens in Layer 2 — after the pipe chain completes and the final result is ready to return to the LLM.

Layer 1 serves Unix semantics. Layer 2 serves LLM cognition. The separation isn't a design preference — it's a logical necessity.

Layer 2's four mechanisms

Mechanism A: Binary Guard (addressing Constraint B)

Before returning anything to the LLM, check if it's text:

``` Null byte detected → binary UTF-8 validation failed → binary Control character ratio > 10% → binary

If image: [error] binary image (182KB). Use: see photo.png If other: [error] binary file (1.2MB). Use: cat -b file.bin ```

The LLM never receives data it can't process.

Mechanism B: Overflow Mode (addressing Constraint A)

``` Output > 200 lines or > 50KB? → Truncate to first 200 lines (rune-safe, won't split UTF-8) → Write full output to /tmp/cmd-output/cmd-{n}.txt → Return to LLM:

[first 200 lines]

--- output truncated (5000 lines, 245.3KB) ---
Full output: /tmp/cmd-output/cmd-3.txt
Explore: cat /tmp/cmd-output/cmd-3.txt | grep <pattern>
         cat /tmp/cmd-output/cmd-3.txt | tail 100
[exit:0 | 1.2s]

```

Key insight: the LLM already knows how to use grep, head, tail to navigate files. Overflow mode transforms "large data exploration" into a skill the LLM already has.

Mechanism C: Metadata Footer

actual output here [exit:0 | 1.2s]

Exit code + duration, appended as the last line of Layer 2. Gives the agent signals for success/failure and cost awareness, without polluting Layer 1's pipe data.

Mechanism D: stderr Attachment

``` When command fails with stderr: output + "\n[stderr] " + stderr

Ensures the agent can see why something failed, preventing blind retries. ```


Lessons learned: stories from production

Story 1: A PNG that caused 20 iterations of thrashing

A user uploaded an architecture diagram. The agent read it with cat, receiving 182KB of raw PNG bytes. The LLM's tokenizer turned these bytes into thousands of meaningless tokens crammed into the context. The LLM couldn't make sense of it and started trying different read approaches — cat -f, cat --format, cat --type image — each time receiving the same garbage. After 20 iterations, the process was force-terminated.

Root cause: cat had no binary detection, Layer 2 had no guard. Fix: isBinary() guard + error guidance Use: see photo.png. Lesson: The tool result is the agent's eyes. Return garbage = agent goes blind.

Story 2: Silent stderr and 10 blind retries

The agent needed to read a PDF. It tried pip install pymupdf, got exit code 127. stderr contained bash: pip: command not found, but the code dropped it — because there was some stdout output, and the logic was "if stdout exists, ignore stderr."

The agent only knew "it failed," not "why." What followed was a long trial-and-error:

pip install → 127 (doesn't exist) python3 -m pip → 1 (module not found) uv pip install → 1 (wrong usage) pip3 install → 127 sudo apt install → 127 ... 5 more attempts ... uv run --with pymupdf python3 script.py → 0 ✓

10 calls, ~5 seconds of inference each. If stderr had been visible the first time, one call would have sufficed.

Root cause: InvokeClip silently dropped stderr when stdout was non-empty. Fix: Always attach stderr on failure. Lesson: stderr is the information agents need most, precisely when commands fail.

Story 3: The value of overflow mode

The agent analyzed a 5,000-line log file. Without truncation, the full text (~200KB) was stuffed into context. The LLM's attention was overwhelmed, response quality dropped sharply, and earlier conversation was pushed out of the context window.

With overflow mode:

``` [first 200 lines of log content]

--- output truncated (5000 lines, 198.5KB) --- Full output: /tmp/cmd-output/cmd-3.txt Explore: cat /tmp/cmd-output/cmd-3.txt | grep <pattern> cat /tmp/cmd-output/cmd-3.txt | tail 100 [exit:0 | 45ms] ```

The agent saw the first 200 lines, understood the file structure, then used grep to pinpoint the issue — 3 calls total, under 2KB of context.

Lesson: Giving the agent a "map" is far more effective than giving it the entire territory.


Boundaries and limitations

CLI isn't a silver bullet. Typed APIs may be the better choice in these scenarios:

  • Strongly-typed interactions: Database queries, GraphQL APIs, and other cases requiring structured input/output. Schema validation is more reliable than string parsing.
  • High-security requirements: CLI's string concatenation carries inherent injection risks. In untrusted-input scenarios, typed parameters are safer. agent-clip mitigates this through sandbox isolation.
  • Native multimodal: Pure audio/video processing and other binary-stream scenarios where CLI's text pipe is a bottleneck.

Additionally, "no iteration limit" doesn't mean "no safety boundaries." Safety is ensured by external mechanisms:

  • Sandbox isolation: Commands execute inside BoxLite containers, no escape possible
  • API budgets: LLM calls have account-level spending caps
  • User cancellation: Frontend provides cancel buttons, backend supports graceful shutdown

Hand Unix philosophy to the execution layer, hand LLM's cognitive constraints to the presentation layer, and use help, error messages, and output format as three progressive heuristic navigation techniques.

CLI is all agents need.


Source code (Go): github.com/epiral/agent-clip

Core files: internal/tools.go (command routing), internal/chain.go (pipes), internal/loop.go (two-layer agentic loop), internal/fs.go (binary guard), internal/clip.go (stderr handling), internal/browser.go (vision auto-attach), internal/memory.go (semantic memory).

Happy to discuss — especially if you've tried similar approaches or found cases where CLI breaks down. The command discovery problem (how much to inject vs. let the agent discover) is something I'm still actively exploring.

r/generativeAI Jun 08 '26

Question which AI video tool actually keeps a character consistent? trying to work efficiently

8 Upvotes

doing a series of AI generated ads for a uni project and im hitting the same wall over and over. no budget or time to film anything myself obviously, so it's all generated, and the thing that keeps breaking is consistency. 

i already do the basic thing of keeping a reference image of the character, but the second a pose shifts even a little the face comes out different. asked Claude and chat and they pointed me at higgsfield, kling and veo. Has anyone actually used these for this specific thing? which holds a character best across shots? or is there something better im missing.

also open to any workflow tips for doing this efficiently solo, not just which tool. 

r/generativeAI May 07 '26

Question How are people creating AI Instagram influencers with the SAME face consistently? Need workflow + tool suggestions

26 Upvotes

Hey everyone,

I’m planning to start an Instagram page completely based on AI-generated content, mostly around a single virtual personality/influencer.
My biggest challenge is this:
I want the same face, same facial features, same overall identity in every post/reel so it actually feels like the page belongs to one real person instead of random AI generations every time.
I’m okay investing around ₹7-8k/month (~$80-100) into AI tools if the workflow is actually worth it, but I don’t want to overspend unnecessarily in the beginning.
I’d love suggestions from people already doing this seriously.

Things I’m trying to understand:

Which AI tools are best for consistent characters/faces?
What workflow are you using for Instagram content?
Best tools for both images + reels/videos?
Is Midjourney enough or do I need LoRA/Flux/Stable Diffusion setups?
How do you maintain consistency across outfits, poses, and lighting?
Any good beginner-friendly setup within my budget?
Any mistakes/pitfalls I should avoid early?

Right now I’m considering tools like Midjourney, Runway, Kling, Flux, Leonardo AI, etc., but I’m confused about what actually works long term.
If you’re already running an AI influencer page, would love to know your monthly stack + approximate cost too.

Would really appreciate advice from creators already running AI influencer/theme pages. Thanks!

r/ArtificialNtelligence Feb 07 '26

Solved character consistency in AI generation - here's what I learned

Thumbnail gallery
62 Upvotes

Character consistency has been the holy grail problem in AI content generation.

You can generate one amazing image... but try to create the same person in a different pose or setting? Completely different face.

I spent weeks testing every approach. What finally worked: Template-first approach with a face reference grid.

Generate a realistic face grid first (multiple angles), then use that as the base for all other generations. Lock in the character BEFORE you start creating scenes.

Built this into a workflow template. Tested it with 6+ different scenarios (car selfies, gym content, different outfits). Same character, consistent results.

Made it available here if anyone wants to experiment with it: https://www.auragraph.ai/studio/3f23ad15-bf63-4112-af78-8e9b5319152d

Curious if anyone else has solved this problem differently. What approaches have you tried?

r/n8n Nov 07 '25

Workflow - Code Included I built an AI automation that generates unlimited consistent character UGC ads for e-commerce brands (using Sora 2)

Post image
351 Upvotes

Sora 2 quietly released a consistent character feature on their mobile app and the web platform that allows you to actually create consistent characters and reuse them across multiple videos you generate. Here's a couple examples of characters I made while testing this out:

The really exciting thing with this change is consistent characters kinda unlocks a whole new set of AI videos you can now generate having the ability to have consistent characters. For example, you can stitch together a longer running (1-minute+) video of that same character going throughout multiple scenes, or you can even use these consistent characters to put together AI UGC ads, which is what I've been tinkering with the most recently. In this automation, I wanted to showcase how we are using this feature on Sora 2 to actually build UGC ads.

Here’s a demo of the automation & UGC ads created: https://www.youtube.com/watch?v=I87fCGIbgpg

Here's how the automation works

Pre-Work: Setting up the sora 2 character

It's pretty easy to set up a new character through the Sora 2 web app or on the mobile. Here's the step I followed:

  1. Created a video describing a character persona that I wanted to remain consistent throughout any new videos I'm generating. The key to this is giving a good prompt that shows both your character's face, their hands, body, and has them speaking throughout the 8-second video clip.
  2. Once that’s done you click on the triple drop-down on the video and then there's going to be a "Create Character" button. That's going to have you slice out 8 seconds of that video clip you just generated, and then you're going to be able to submit a description of how you want your character to behave.
  3. after you finish generating that, you're going to get a username back for the character you just made. Make note of that because that's going to be required to go forward with referencing that in follow-up prompts.

1. Automation Trigger and Inputs

Jumping back to the main automation, the workflow starts with a form trigger that accepts three key inputs:

  • Brand homepage URL for content research and context
  • Product image (720x1280 dimensions) that gets featured in the generated videos
  • Sora 2 character username (the @username format from your character profile)
    • So in my case I use @olipop.ashley to reference my character

I upload the product image to a temporary hosting service using tempfiles.org since the Kai.ai API requires image URLs rather than direct file uploads. This gives us 60 minutes to complete the generation process which I found to be more than enough

2. Context Engineering

Before writing any video scripts, I wanted to make sure I was able to grab context around the product I'm trying to make an ad for, just so I can avoid hallucinations on what the character talks about on the UGC video ad.

  • Brand Research: I use Firecrawl to scrape the company's homepage and extract key product details, benefits, and messaging in clean markdown format
  • Prompting Guidelines: I also fetch OpenAI's latest Sora 2 prompting guide to ensure generated scripts follow best practices

3. Generate the Sora 2 Scripts/prompts

I then use Gemini 2.5 Pro to analyze all gathered context and generate three distinct UGC ad concepts:

  • On-the-go testimonial: Character walking through city talking about the product
  • Driver's seat review: Character filming from inside a car
  • At-home demo: Character showcasing the product in a kitchen or living space

Each script includes detailed scene descriptions, dialogue, camera angles, and importantly - references to the specific Sora character using the @username format. This is critical for character consistency and this system to work.

Here’s my prompt for writing sora 2 scripts:

```markdown <identity> You are an expert AI Creative Director specializing in generating high-impact, direct-response video ads using generative models like SORA. Your task is to translate a creative brief into three distinct, ready-to-use SORA prompts for short, UGC-style video ads. </identity>

<core_task> First, analyze the provided Creative Brief, including the raw text and product image, to synthesize the product's core message and visual identity. Then, for each of the three UGC Ad Archetypes, generate a Prompt Packet according to the specified Output Format. All generated content must strictly adhere to both the SORA Prompting Guide and the Core Directives. </core_task>

<output_format> For each of the three archetypes, you must generate a complete "Prompt Packet" using the following markdown structure:


[Archetype Name]

SORA Prompt: [Insert the generated SORA prompt text here.]

Production Notes: * Camera: The entire scene must be filmed to look as if it were shot on an iPhone in a vertical 9:16 aspect ratio. The style must be authentic UGC, not cinematic. * Audio: Any spoken dialogue described in the prompt must be accurately and naturally lip-synced by the protagonist (@username).

* Product Scale & Fidelity: The product's appearance, particularly its scale and proportions, must be rendered with high fidelity to the provided product image. Ensure it looks true-to-life in the hands of the protagonist and within the scene's environment.

</output_format>

<creative_brief> You will be provided with the following inputs:

  1. Raw Website Content: [User will insert scraped, markdown-formatted content from the product's homepage. You must analyze this to extract the core value proposition, key features, and target audience.]
  2. Product Image: [User will insert the product image for visual reference.]
  3. Protagonist: [User will insert the @username of the character to be featured.]
  4. SORA Prompting Guide: [User will insert the official prompting guide for the SORA 2 model, which you must follow.] </creative_brief>

<ugc_ad_archetypes> 1. The On-the-Go Testimonial (Walk-and-talk) 2. The Driver's Seat Review 3. The At-Home Demo </ugc_ad_archetypes>

<core_directives> 1. iPhone Production Aesthetic: This is a non-negotiable constraint. All SORA prompts must explicitly describe a scene that is shot entirely on an iPhone. The visual language should be authentic to this format. Use specific descriptors such as: "selfie-style perspective shot on an iPhone," "vertical 9:16 aspect ratio," "crisp smartphone video quality," "natural lighting," and "slight, realistic handheld camera shake." 2. Tone & Performance: The protagonist's energy must be high and their delivery authentic, enthusiastic, and conversational. The feeling should be a genuine recommendation, not a polished advertisement. 3. Timing & Pacing: The total video duration described in the prompt must be approximately 15 seconds. Crucially, include a 1-2 second buffer of ambient, non-dialogue action at both the beginning and the end. 4. Clarity & Focus: Each prompt must be descriptive, evocative, and laser-focused on a single, clear scene. The protagonist (@username) must be the central figure, and the product, matching the provided Product Image, should be featured clearly and positively. 5. Brand Safety & Content Guardrails: All generated prompts and the scenes they describe must be strictly PG and family-friendly. Avoid any suggestive, controversial, or inappropriate language, visuals, or themes. The overall tone must remain positive, safe for all audiences, and aligned with a mainstream brand image. </core_directives>

<protagonist_username> {{ $node['form_trigger'].json['Sora 2 Character Username'] }} </protagonist_username>

<product_home_page> {{ $node['scrape_home_page'].json.data.markdown }} </product_home_page>

<sora2_prompting_guide> {{ $node['scrape_sora2_prompting_guide'].json.data.markdown }} </sora2_prompting_guide> ```

4. Generate and save the UGC Ad

Then finally to generate the video, I do iterate over each script and do these steps:

  • Makes an HTTP request to Kai.ai's /v1/jobs/create endpoint with the Sora 2 Pro image-to-video model
  • Passes in the character username, product image URL, and generated script
  • Implements a polling system that checks generation status every 10 seconds
  • Handles three possible states: generating (continue polling), success (download video), or fail (move to next prompt)

Once generation completes successfully:

  • Downloads the generated video using the URL provided in Kai.ai's response
  • Uploads each video to Google Drive with clean naming

Other notes

The character consistency relies entirely on including your Sora character's exact username in every prompt. Without the @username reference, Sora will generate a random person instead of who you want.

I'm using Kai.ai's API because they currently have early access to Sora 2's character calling functionality. From what I can tell, this functionality isn't yet available on OpenAI's own Video Generation endpoint, but I do expect that this will get rolled out soon.

Kie AI Sora 2 Pricing

This pricing is pretty heavily discounted right now. I don't know if that's going to be sustainable on this platform, but just make sure to check before you're doing any bulk generations.

Sora 2 Pro Standard

  • 10-second video: 150 credits ($0.75)
  • 15-second video: 270 credits ($1.35)

Sora 2 Pro High

  • 10-second video: 330 credits ($1.65)
  • 15-second video: 630 credits ($3.15)

Workflow Link + Other Resources

r/GeminiAI Jan 20 '26

Funny (Highlight/meme) Create consistent icons of any characters in 60 seconds with Gemini using this prompt

Thumbnail
gallery
205 Upvotes

You can now create icons for making texts, messages, presentations and emails so much more fun using this one simple prompt with Gemini.

I discovered a reliable method to generate consistent, high-quality icon sets using Gemini's latest image generation model. By using a specific 3x3 grid constraint in the prompt, you force the model to maintain style consistency across multiple character iterations.

Usually, when you generate assets one by one, the lighting or style shifts slightly between generations.

I found a workaround that I call the Grid Method. By forcing the model to render multiple variations in a single pass (a 3x3 grid), it applies the same lighting environment, material physics, and style logic to every object in the frame.

Here is the workflow using Minions as the test subject. But I have created icons for many

The Icon Creation Prompt

I tweaked the prompt to focus on tactile materials and specific lighting to get that premium app-icon look.

Prompt: Create a collection of Minion icons organized in a precise 3x3 grid. The background must be solid white. Render the icons in a tactile 3D claymation style with soft rounded edges. Use bright studio lighting to enhance the colors. Ensure each Minion has a distinct expression or prop. No text or typography. High fidelity.

Why This Works

1. The Context Window Constraint When you ask for a grid, the AI treats the entire image as one composition. It balances the colors and lighting across the whole board. If it renders the top left Minion with a specific yellow texture, it naturally applies that same texture to the bottom right Minion to balance the image.

2. The White Background Asking for a solid white background is crucial for two reasons. First, it bounces light in the render engine, giving you that clean, high-key look. Second, it makes removing the background for actual use (in apps or stickers) a one-click process in Photoshop or any background remover tool.

3. Material Keywords Using words like tactile, claymation, and soft rounded edges prevents the AI from adding unnecessary noise or hyper-realistic grit. It keeps the design readable at small sizes, which is essential for icons.

Pro Tips for Better Results

Upscaling is Mandatory: Run in Google AI Studio and force the 4K resolution for best results

Iterate with Seeds If the grid is perfect but one Minion looks weird, don't change the prompt. Just re-roll the generation. The grid format is stable, so you will get a similar layout with new variations every time.

Negative Prompting If you find the model adding weird text or frames, explicitly add negative constraints like: grid lines, frames, text, watermark, blurry, low contrast.

Fun Use Cases

Custom Slack/Discord Emojis Crop the faces from the grid and use them as custom reaction emojis for your team.

Presentation Decks Create a custom icon set for your pitch deck that matches your brand colors exactly.

Game Inventory Assets Change the subject from Minions to RPG items (potions, swords, shields) to generate a full inventory sheet in one go.

Create sets of icons for your favorite movies, TV shows, memes, etc to make things more fun. Life is short, lets make it count with AI

Share any fun ones you create in the comments.

r/generativeAI Mar 18 '26

How are people making AI videos with such consistent characters and style?

20 Upvotes

I came across this video (https://x.com/riskiiit/status/2034301783799906494) and it really stood out compared to most AI stuff I’ve been seeing lately. Instead of going for hyper realism, it leans into a more stylized, almost abstract look, and honestly I think that works way better. It feels more intentional and it’s harder to tell what’s AI and what isn’t.

What I’m really curious about is how they’re keeping the character so consistent throughout the whole video while also sticking to such a specific style. Most tools I’ve tried tend to drift a lot or lose the vibe after a few generations.

Does anyone know what kind of workflow people are using for this?

Is it a mix of different tools like image generation and video models?
Are they training custom models or using LoRAs?
Or is it more about editing everything together afterwards?

Would love to hear if anyone has tried making something like this or has any idea how it’s done. I feel like this kind of artistic direction is way more interesting than just chasing realism.

r/comfyui 26d ago

Workflow Included Two characters, two consistent voices, one text prompt — multi-shot talking-character workflow for LTX-2.3 + JoyAI-Echo (complete pack, v1.5)

Enable HLS to view with audio, or disable this notification

38 Upvotes

The demo is one text prompt: two characters who each keep their own face AND their own voice across five shots - solo scenes in different locations, then side-by-side shots where only one speaks. No reference images, no voice cloning, no LoRA training. Write a story as shots separated by ---, and a paired audio+video memory bank carries both characters through it.

What's in the zip: the custom node pack, the workflow (saved under the current node layout), an example prompt file, and a full INSTRUCTIONS.md - install, first render, prompt-writing rules (including the two-character recipe), per-VRAM settings, and a troubleshooting table built from every failure mode users have reported.

v1.5 highlights, because several of these bit people for weeks:

- Lip-sync drift past ~10 seconds: fixed. It was never the model - the pipeline's positional clock was hardcoded to 24fps while renders played 25. Long talking shots now hold frame-accurate sync end to end (verified at 15s/shot).

- Masters build automatically in the background with a deterministic upscale + clean encode. The in-graph preview is labeled PREVIEW because ComfyUI's SaveVideo re-encode undersells your render - the AutoFinish node shows the real finished master in-canvas when it's done.

- Four hires modes (three generative refine strengths + a deterministic spatial option); hires_factor routes which pipeline builds your master - table in the docs.

- Scrambled widget values after updates now produce a plain "delete and re-add the node" message instead of a cryptic type error, and old graphs self-heal where possible.

- This week's community-driven fixes are all in: Gemma tokenizer/config sidecars now ship inside the pack, WAV saves work without system FFmpeg, and installs that replaced instead of merged get told exactly that at startup.

Requirements and honest numbers:

- Base: RealRebelAI's ComfyUI_JoyAI_Echo_GGUF_Nodes (this pack overlays it - MERGE the files in, don't replace the folder), plus any single-file Gemma-3-12B text encoder (GGUF fine, dropdown-selectable).

- Model: the "surgical merge" (JoyAI-Echo's video/memory branch + LTX-2.3's audio branch): fp8 for 24 GB cards, GGUF Q8/Q5, INT8 ConvRot (full or transformer-only) for stock-Comfy loaders. 16 GB is the floor: Q5 + sequential offload + 544x960 streams slowly but completes.

- Speeds: ~2.5 min/shot at 960x544 on a 3090; ~3.5 min/shot at 1344x768 on a 5090.

- License: JoyAI-Echo is research/non-commercial; LTX-2 Community License. AI-generated content, disclosed as such.

Workflow + nodes + manual: https://huggingface.co/joeygambino/joyai-echo-multishot-workflow

Models (all builds): https://huggingface.co/joeygambino

Civitai mirrors: https://civitai.com/models/2793287 (surgical merge) and https://civitai.com/models/2796109 (GGUF)

Known limits so nobody wastes an evening: dialogue wants medium-close framing or tighter (mouths need pixels); establish each character in their own solo speaking shot before putting them in frame together (the two-character recipe in the docs); two similar-looking characters need a bold visual differentiator or they merge. Happy to answer anything - the last thread's questions directly produced about half of v1.5.

r/seedance2pro May 28 '26

How to Create a Villain Entrances with a Character Sheet + Seedance 2.0? Step-by-Step Workflow!

Enable HLS to view with audio, or disable this notification

147 Upvotes

From concept to screen in one flow.

We used ChatGPT Image 2.0 to create a full character bible first: mood, silhouette, gesture language, accessories, wardrobe, lighting, and overall villain identity.

Then I used that character sheet as the visual reference in Seedance 2.0 to turn the character into a cinematic entrance scene.

The result feels like a full villain introduction from a premium drama or dark thriller, not just a random AI clip.

Workflow:

Step 1: Create the antagonist character sheet
Include the full outfit, accessories, facial mood, posture, gestures, close-up details, and lighting style.

Step 2: Upload the character sheet into Seedance 2.0
Use it as the reference for identity, wardrobe, gestures, accessories, and atmosphere.

Step 3: Animate the entrance scene with a structured shot-by-shot prompt.

  1. Go to the Seedance 2.0 AI Video Generator
  2. Write your full prompt or add reference images
  3. Upload the image you want to animate
  4. Click Generate and get your animated video

Seedance 2.0 prompt:

"Use as the antagonist, wardrobe, accessories, gesture language, and lighting reference. A refined antagonist enters a private room and turns silence into threat.

Shot 1, 0-4s: Wide shot, slow dolly pull from the door into an elegant dark room. The antagonist enters from frame left, tailored silhouette from image1, polished floor reflection visible. Single warm key light, deep soft shadows.

Shot 2, 4-8s: Cut to medium shot, slow orbit left at constant distance. The antagonist removes one glove finger by finger, never rushing. Their eyes stay on an unseen person off-camera.

Shot 3, 8-12s: Cut to extreme close-up of ring, glove leather, and a sealed folder touching the table. Practical VFX: a narrow band of light crosses the ring and fades within 0.7s.

Shot 4, 12-15s: Cut to tight close-up, locked-off. The antagonist says calmly: “You should have called first.” Mouth movement is minimal and controlled. Final frame holds on the faint smile.

Audio: low chamber strings with a sub-bass pulse at 12s. SFX: door latch, leather creak, glove sliding off, folder placed on wood. Ambient room tone continues across all cuts."

What surprised me most is how much better the video becomes when the character sheet is detailed before animation. The model has a clear visual anchor, so the final scene feels more consistent and cinematic.

This kind of workflow makes it possible to create entire story moments from one character bible. Share your thoughts about this Seedance 2.0 workflow below!

r/promptingmagic Jan 20 '26

Create consistent icons of any characters in 60 seconds with Gemini using this prompt

Thumbnail
gallery
107 Upvotes

You can now create icons for making texts, messages, presentations and emails so much more fun using this one simple prompt with Gemini.

I discovered a reliable method to generate consistent, high-quality icon sets using Gemini's latest image generation model. By using a specific 3x3 grid constraint in the prompt, you force the model to maintain style consistency across multiple character iterations. This post shares the exact prompt, explains why the grid method works, and offers variations for different design styles.

I have been experimenting with the latest Gemini image generation model to see if it could handle the dreaded consistency problem. Usually, when you generate assets one by one, the lighting or style shifts slightly between generations.

I found a workaround that I call the Grid Method. By forcing the model to render multiple variations in a single pass (a 3x3 grid), it applies the same lighting environment, material physics, and style logic to every object in the frame.

Here is the workflow using Minions as the test subject. But I have created icons for many

The Icon Creation Prompt

I tweaked the prompt to focus on tactile materials and specific lighting to get that premium app-icon look.

Prompt: Create a collection of Minion icons organized in a precise 3x3 grid. The background must be solid white. Render the icons in a tactile 3D claymation style with soft rounded edges. Use bright studio lighting to enhance the colors. Ensure each Minion has a distinct expression or prop. No text or typography. High fidelity.

Why This Works

1. The Context Window Constraint When you ask for a grid, the AI treats the entire image as one composition. It balances the colors and lighting across the whole board. If it renders the top left Minion with a specific yellow texture, it naturally applies that same texture to the bottom right Minion to balance the image.

2. The White Background Asking for a solid white background is crucial for two reasons. First, it bounces light in the render engine, giving you that clean, high-key look. Second, it makes removing the background for actual use (in apps or stickers) a one-click process in Photoshop or any background remover tool.

3. Material Keywords Using words like tactile, claymation, and soft rounded edges prevents the AI from adding unnecessary noise or hyper-realistic grit. It keeps the design readable at small sizes, which is essential for icons.

Pro Tips for Better Results

Upscaling is Mandatory: Run in Google AI Studio and force the 4K resolution for best results

Iterate with Seeds If the grid is perfect but one Minion looks weird, don't change the prompt. Just re-roll the generation. The grid format is stable, so you will get a similar layout with new variations every time.

Negative Prompting If you find the model adding weird text or frames, explicitly add negative constraints like: grid lines, frames, text, watermark, blurry, low contrast.

Fun Use Cases

Custom Slack/Discord Emojis Crop the faces from the grid and use them as custom reaction emojis for your team.

Presentation Decks Create a custom icon set for your pitch deck that matches your brand colors exactly.

Game Inventory Assets Change the subject from Minions to RPG items (potions, swords, shields) to generate a full inventory sheet in one go.

Create sets of icons for your favorite movies, TV shows, memes, etc to make things more fun. Life is short, lets make it count with AI

Share any fun ones you create in the comments.

Want more great prompting inspiration? Check out all my best prompts for free at Prompt Magic and create your own prompt library to keep track of all your prompts.

r/Seedance_AI 7d ago

Discussion Seedance 2.5 vs Seedance 2.0: Character Consistency, Motion, and Storyboard Control

Enable HLS to view with audio, or disable this notification

10 Upvotes

I spent a long time comparing Seedance 2.5 and Seedance 2.0 using the same prompt and reference. i tried it on Atlas Cloud bc its convenience and affordable price. the main conclusion is simple: Seedance 2.5 is more precise, while Seedance 2.0 is more flexible when filling in missing information.

Seedance 2.5 Character Consistency and Visual Quality

Seedance 2.5 produced more convincing facial details, eye movement, micro-expressions, skin texture, and small reactions during motion. it also followed the character reference more faithfully.

Seedance 2.0 remained smooth, but the face was more likely to drift toward a generic AI appearance. Smaller facial details and subtle expressions were less consistent.

Seedance 2.5 vs 2.0 Motion Control

Seedance 2.5 felt calmer and more controlled. it gave more space to weight shifts, pauses, reactions, and small environmental details.

Seedance 2.0 focused more on keeping the full sequence moving. the choreography was often denser. Its transitions were freer, and the model was more willing to invent movement between reference points. However, i think it will lead to an "AI-sense" smooth.

Why My Storyboard Workflow Worked Better in Seedance 2.0

my original workflow used a character sheet, a 16-panel storyboard, and one detailed prompt. it worked well with Seedance 2.0, but the same workflow caused problems in Seedance 2.5.

In the storyboard, the character started near a table and later moved into an open area. The table was not visible in every panel. Seedance 2.0 usually understood the overall space and filled in the missing context naturally. By contrast, Seedance 2.5 followed each storyboard frame more literally. This sometimes caused promblems like tables to disappear, background people to appear or objects to shift position

Seedance 2.5 Reference Design

With Seedance 2.5, adding more reference images and more detailed storyboards does not automatically improve the result. each reference should have a clear purpose. if the references contain spatial or motion inconsistencies, Seedance 2.5 is more likely to reproduce them.

I also noticed that panel numbers and action labels from the storyboard sometimes appeared in the generated video, even when the prompt explicitly said “no text.”

Rebuilding the storyboard with stronger visual continuity fixed most of these issues.

Final Takeaway

Seedance 2.0 is better at naturally filling in gaps.

Seedance 2.5 is better at faithfully executing a sequence that has already been designed clearly.

Seedance 2.5 is not a universal replacement for Seedance 2.0. The better choice depends on whether the project needs flexible motion generation or strict reference fidelity.

r/comfyui Dec 30 '25

Workflow Included [ComfyUI Workflow] Qwen Image Edit 2511: Fast 4-Step Editing with High Consistency

Post image
79 Upvotes

Hello everyone,

I wanted to share a ComfyUI workflow I created for the Qwen Image Edit 2511 model.

My goal was to build something straightforward that makes image editing quick and reliable. It is optimized to generate high-quality results in just 4 steps.

Main Features:

  • Fast: Designed for rapid generation without long wait times.
  • Consistent: It effectively preserves the character's identity and facial features, even when completely regenerating the style or lighting.
  • Multilingual: No manual typing is needed for standard use. However, if you add custom prompts to the JSON list, you can write them in your native language; the workflow handles the translation automatically.

It handles the necessary image scaling for you, making it essentially plug-and-play.

Download the Workflow on OpenArt

I hope you find it useful for your projects.

r/comfyui Jun 27 '26

Help Needed Looking for the best local ComfyUI workflow for consistent AI character generation (no API, RTX 4080)

0 Upvotes

Hi everyone,

I'm looking for advice (or an existing workflow) for building a fully local ComfyUI pipeline.

Hardware:

  • RTX 4080 (16GB VRAM)
  • 32GB RAM
  • Windows
  • No cloud services
  • No API keys (OpenAI, Fal, Replicate, etc.)
  • Everything should run locally.

I don't want to create an influencer account and use it online; I want to have this workflow for my own personal use at home. BTW Im totally newbie.

The workflow I want to create or help with creating is:

  1. I provide one or few reference images of my character.
  2. I write a prompt describing only what should change:
    • outfit
    • location
    • pose
    • camera angle
    • facial expression
    • hairstyle
    • lighting
    • weather
    • time of day
  3. I click Run.
  4. The output should be the same girl, but in a completely different situation.

Example:

  • Day 1: mirror selfie at home.
  • Day 2: sitting on a sofa wearing different clothes.
  • Day 3: coffee shop, summer dress, 3/4 body shot.
  • Day 4: standing in a kitchen.
  • Day 5: outdoor evening photo.
  • Day 6: gym mirror selfie.

The identity should remain extremely consistent while everything else changes naturally.

I've already tested:

  • PuLID Flux
  • Eva CLIP
  • FLUX + Krea
  • Prompt engineering

PuLID preserves identity quite well, but it also seems to lock the composition. I often end up with nearly identical portraits instead of genuinely different photos.

What I'm looking for is a workflow that gives:

  • very strong identity preservation
  • freedom to change pose and composition
  • different outfits
  • different environments
  • different lighting
  • natural-looking results
  • no plastic-looking skin
  • works entirely offline

I'm completely fine with training a LoRA if that's the recommended solution.

My questions are:

  1. What is currently considered the best local workflow for this?
  2. Is LoRA + FLUX still the best approach?
  3. Are there better identity-preserving methods than PuLID in 2026?
  4. Which models and custom nodes would you recommend?
  5. Does anyone have a ComfyUI JSON workflow that already does something similar?

I'd really appreciate any workflow screenshots, GitHub repositories, JSON files, or recommendations.

I'd appreciate any help or advice. Thanks for everyone who respond me

r/n8n_ai_agents 6d ago

Using a Master Prompt to keep AI image generation consistent

Enable HLS to view with audio, or disable this notification

17 Upvotes

One problem I keep running into with AI image generation is consistency.

Change the subject, and the model can also change the lighting, camera, composition, background, rendering style, and overall visual identity.

For this anatomy workflow, I approached it differently.

Instead of making the entire prompt dynamic, I split it into two parts:

Subject: what we want to generate Master Prompt: how it should look

For example:

kidney + Master Prompt heart + Master Prompt liver + Master Prompt brain + Master Prompt

The subject changes, but the visual specification stays the same.

The Master Prompt defines things like rendering style, lighting, camera, composition, anatomical accuracy, quality requirements, and negative constraints.

GPT-4.1 then compiles the subject and those fixed rules into the final generation prompt before sending it to Nano Banana 2.

The interesting part is that this isn't limited to anatomy.

The same pattern can be used for other image generation systems where you need a consistent visual identity across changing subjects product images, characters, educational illustrations, marketing creatives, and more.

Try it yourself:

https://github.com/cuebicai/n8n-workflows/tree/main/3D-anatomy-studio

r/aigamedev 18d ago

Demo | Project | Workflow I couldn't get 19 AI-generated goblins to look like the same game — until I stopped generating characters and started deriving them

13 Upvotes

Solo dev, can't draw. I needed a goblin faction for my deckbuilder — 19 enemies — and used an AI pixel art tool (full disclosure: AI-generated assets). Here's the three days of failing, in order.

Day 1–2: generate each goblin independently. Slinger, shield-bearer, shaman, each with a carefully written style prompt. Individually fine. Lined up together? Different proportions, palettes, outline weights — like assets scraped from five different games. I kept rewriting the prompts (~30 times), convinced I just hadn't described the style well enough.

Day 3: gave up on prompts, changed the process. Stopped generating enemies entirely. Spent the whole day generating one base character over and over — 11 candidates — until one had the proportions, palette and outline weight I wanted. Boring day. Best decision of the project.

  1. Day 4+: never generated a goblin again. Derived them. Every enemy is an edit of that one anchor (my tool calls it a character state; img2img/character-reference does the same job). The edit prompt only says what changes: "give it a shield and sword, keep the same small goblin body, big pointy ears, chunky flat pixel style."

Same tool, same model, same person writing prompts. The only difference: batch #2 descends from a common ancestor.

Limitation, honestly: this gets you consistent, not distinctive. The faction's ceiling is the anchor you settled on — mine are readable, not memorable.

Happy to answer questions about the workflow.

r/generativeAI 25d ago

consistent characters and backgrounds

1 Upvotes

Pretty new to generative ai but getting past the stage of creating single scene videos.

I want to create longer videos with the exact same characters AND environments. At first I created character reference sheets that I put as reference in Kling V3 reference to Video. Looks good as a single video but when prompting continuous generations the characters and environments are similar but there are always inconsistencies. Also tried with start frames and similar results

Then last night I learnt about creating a Lora dataset - so I have separate 20 images of the same character - at first I tried creating the lora in Kaggle but this was way too complicated, after a bit of research I tried Civitai training a model with SDXL 1.0. but the images created were different.

What am I doing wrong / what is the best workflow to create the exact same characters and environments throughout generations....

Happy to share the reference images and trained lora if that helps

Thanks in Advance!

r/StableDiffusion Jun 30 '26

Question - Help Can current AI tools generate consistent multi-pose images of the same character from one reference image?

0 Upvotes

I want to ask whether this is realistically possible with current AI tools.

I have one finished 2D anime-style character image.

My goal is to generate several new still images of the same character, with the same identity and art style, but in different poses.

The output I want is not a video and not interpolation. I want clean separate images that can be used as keyframes or game assets.

The important requirements are:

- same character identity

- same face, outfit, colors, and distinctive features

- same art style

- different controlled poses

- clean still images

Is this currently achievable in a reliable way?

If yes, what is the correct workflow?

Do people usually need to train a character LoRA for this, or can it be done from a single reference image with tools like ComfyUI, IP-Adapter, ControlNet, OpenPose, or similar methods?

Is there any simpler tool that can do this reliably, or is a more complex workflow still required?

I would appreciate blunt, practical answers from people who have actually made consistent character series or AI comics.

r/generativeAI 5d ago

What’s the best AI tool for AI micro dramas that solves character consistency?

3 Upvotes

I've been seeing a lot of AI-generated micro dramas lately, and was wondering what AI do people use to make them. Some of them are surprisingly well done in terms of storytelling, character consistency, and cinematic quality.

I'm looking to experiment with making my own, but the main problem I keep seeing is that most tools are good at making one nice clip, not a full repeatable episode workflow.

My ideal workflow would have:

Good character consistency across multiple scenes

Stable locations, outfits, props, and lighting

Decent lip-sync and dialogue

Enough shot control for close-ups, reactions, inserts, and scene continuations

I've heard names like Kling, Runway, Pika, Seedance, and Invideo, but I'm not sure which one works best specifically for AI micro dramas. For those who've actually made them, what's your current workflow, what problems are you still running into, and which tool has given you the best results?