Flutter SoLoud Audio Filters
alnitak/flutter_soloud
Explains how to add and tune flutter_soloud's 13 audio filters at global, per-sound and mixing-bus level, including activation order and parameter fades.
A skill your agent uses when generating or editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana), making the first call work, choosing Gemini Developer API…
$ npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install evanca/flutter-ai-rules generate-images-with-firebase-ai --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/evanca/flutter-ai-rules.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/generate-images-with-firebase-ai .claude/skills/generate-images-with-firebase-ai && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "generate-images-with-firebase-ai" agent skill from https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-ai into .claude/skills/generate-images-with-firebase-ai/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-images-with-firebase-ai", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-aiType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install evanca/flutter-ai-rules generate-images-with-firebase-ai --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evanca/flutter-ai-rules.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/generate-images-with-firebase-ai .agents/skills/generate-images-with-firebase-ai && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "generate-images-with-firebase-ai" agent skill from https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-ai into .agents/skills/generate-images-with-firebase-ai/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-images-with-firebase-ai", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install evanca/flutter-ai-rules generate-images-with-firebase-ai --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evanca/flutter-ai-rules.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/generate-images-with-firebase-ai .cursor/skills/generate-images-with-firebase-ai && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "generate-images-with-firebase-ai" agent skill from https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-ai into .cursor/skills/generate-images-with-firebase-ai/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-images-with-firebase-ai", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/evanca/flutter-ai-rules.git --path skills/generate-images-with-firebase-ai--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install evanca/flutter-ai-rules generate-images-with-firebase-ai --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evanca/flutter-ai-rules.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/generate-images-with-firebase-ai .gemini/skills/generate-images-with-firebase-ai && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "generate-images-with-firebase-ai" agent skill from https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-ai into .gemini/skills/generate-images-with-firebase-ai/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-images-with-firebase-ai", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install evanca/flutter-ai-rules generate-images-with-firebase-aiInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/evanca/flutter-ai-rules.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/generate-images-with-firebase-ai .github/skills/generate-images-with-firebase-ai && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "generate-images-with-firebase-ai" agent skill from https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-ai into .github/skills/generate-images-with-firebase-ai/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-images-with-firebase-ai", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install evanca/flutter-ai-rules generate-images-with-firebase-ai --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/evanca/flutter-ai-rules.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/generate-images-with-firebase-ai .opencode/skills/generate-images-with-firebase-ai && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "generate-images-with-firebase-ai" agent skill from https://github.com/evanca/flutter-ai-rules/tree/main/skills/generate-images-with-firebase-ai into .opencode/skills/generate-images-with-firebase-ai/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "generate-images-with-firebase-ai", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
generate-images-with-firebase-aiA skill your agent uses when generating or editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana), making the first call work, choosing Gemini Developer API…
Generate Images With Firebase AI is an agent skill from evanca/flutter-ai-rules. Use when generating or editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana), making the first call work, choosing Gemini Developer API vs Vertex AI, hitting quota, billing or App Check failures, getting empty or image-only responses, sending a user photo as input, controlling aspect ratio or size, writing the image prompt, or deciding what to test.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `references/models.md`, `references/prompting.md` and `references/setup.md`).
It sits in Mobile, covering Image generation and Cross-platform mobile apps. It works with Firebase, Vertex AI, Dart and Google Gemini. The repository describes itself as: Flutter AI Skills and Rules for Claude, Codex, Cursor, and Other AI-Powered IDEs. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 30f908d. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gcloudFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
firebase.google.compub.devpatrol.leancode.coFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Generate Images With Firebase AI loads about 2.3k tokens when it runs, and up to ~6.8k if it reads all its reference files. Until then it costs about 106 tokens; SKILL.md has 1,114 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from evanca/flutter-ai-rules at commit 30f908d, republished under its MIT licence (© evanca). 1,114 words, ~2,297 tokens.
.claude/skills/generate-images-with-firebase-ai/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Gemini image models return interleaved text and image parts from one call. The response is a sequence to walk, not a string to read.
A request that comes back empty is usually a configuration problem rather than a bug in your code, so section 1 covers the three settings that cause it.
A first call that returns an error, an empty response, or a 403 is almost always one of these rather than your Dart. Rule them out before you debug code.
Billing. Image generation has no free tier. On a Spark-plan project the
image models return limit: 0 for generate_content_free_tier_requests, so
the first request fails on quota having made zero requests. Text models do work
on Spark, which means "my other Gemini call works" proves nothing. Upgrade to
Blaze, then verify the current limits rather than trusting this note:
gcloud services quota list --service=generativelanguage.googleapis.com --consumer=projects/YOUR_PROJECT_IDApp Check. Firebase AI Logic enforces App Check when the project has it
turned on. Otherwise the endpoint is open to anyone who extracts your config
from the shipped client, and that config is public by design. Anything
reachable from a device you do not control needs App Check. Debug builds
attest with a debug provider, release builds with a real one. Web has a
specific trap that costs an afternoon, described in references/setup.md.
responseModalities. Without it the model has no permission to return an
image, so you get text describing the picture it would have drawn. Set both
modalities, as in the call below.
final model = FirebaseAI.googleAI().generativeModel(
model: 'gemini-3.1-flash-image',
generationConfig: GenerationConfig(
responseModalities: [
ResponseModalities.text,
ResponseModalities.image,
],
imageConfig: ImageConfig(
aspectRatio: ImageAspectRatio.landscape16x9,
imageSize: ImageSize.size2K,
),
),
);
final response = await model.generateContent([
Content.multi([
TextPart(prompt),
InlineDataPart('image/jpeg', selfieBytes), // omit for text-to-image
]),
]);FirebaseAI.googleAI() is the Gemini Developer API. Prefer it: it needs no GCP
surface of its own, and its free tier covers text. FirebaseAI.vertexAI()
requires Blaze regardless of model and buys you GCP-side controls, so reach for
it when the project already lives in Vertex rather than by default.
Do not pass appCheck: or auth: to googleAI(). Both parameters are
deprecated in current firebase_ai; the instance resolves them from the
FirebaseApp on its own.
For model IDs, aspect-ratio and size enums, and when Imagen beats Gemini, read
references/models.md.
The convenience .text accessor does not capture the full sequence, so walk
the parts directly. Pattern-match on the part type, which keeps the switch
correct when the SDK adds new part types:
Uint8List? image;
final buffer = StringBuffer();
for (final part in candidate.content.parts) {
switch (part) {
case InlineDataPart(:final bytes):
image ??= bytes; // first image wins
case TextPart(:final text):
buffer.write(text);
default:
break;
}
}Keep the interpretation of a response in its own pure function taking a
Candidate. Candidate, Content, TextPart and InlineDataPart are all
publicly constructible, so that function is testable with real SDK types, no
Firebase and no test doubles. It is the one seam in this stack that unit tests
genuinely reach.
An empty result surfaces as a blank error and reads like a client bug, which sends people debugging the wrong half of the system. The response carries the reason, so report it. In order:
| Check | Where | Means |
|---|---|---|
response.promptFeedback?.blockReason | before candidates | Your input was rejected. Read blockReasonMessage too. |
response.candidates empty | n/a | Nothing generated at all. |
candidate.finishReason | on the candidate | The model stopped: safety, recitation, or a token limit. finishMessage adds detail. |
| No image but text present | after walking parts | It answered in prose instead of drawing. Usually a prompt problem. |
| Everything empty, no reason | n/a | Say so plainly and let the user retry. This happens intermittently. |
Image-only responses, with no text at all, also happen intermittently on prompts that reliably return both. If you ask for text alongside the image, treat its absence as normal and degrade instead of throwing.
Downscale before you send. InlineDataPart.toJson() base64-encodes the bytes
synchronously on the main isolate, so a full-size phone photo freezes the UI
for seconds while the request is built. Gemini downsamples large images anyway,
so you pay for detail that is then discarded. Scale at pick time rather than
after:
final file = await picker.pickImage(
source: ImageSource.gallery,
maxWidth: 1280,
maxHeight: 1280,
imageQuality: 85,
);Size the cap to your subject rather than to a habit. 1280px on the long edge
holds a face or a single figure comfortably, while fine texture, legible text
in the source, or a wide scene the model has to read across will want more.
Match mimeType to what the picker actually returned.
Use ImageConfig when your ratio is one of the supported enum values, because
it is a real constraint. Asking for a ratio in the prompt text is a suggestion
the model frequently ignores. If you need a ratio the enum does not offer, 2:1
for instance, measure what came back and lay out from the measurement:
final descriptor = await ui.ImageDescriptor.encoded(
await ui.ImmutableBuffer.fromUint8List(bytes),
);
final size = ui.Size(descriptor.width.toDouble(), descriptor.height.toDouble());
descriptor.dispose();Wrap it so a failure returns null instead of throwing. An image you cannot measure is still an image worth showing.
You often want machine-readable data about the image the model just drew, such as a caption or the names it invented. Once that data is pixels your app cannot read it, so ask for it as text in the same call and reconcile the two halves in the prompt: "the title painted into the image must match the JSON character for character."
Parse that text defensively. Asked for a fenced ```json block, the model will
across one session return fenced JSON, bare JSON, prose-wrapped JSON, and
nothing at all. Try the fence, fall back to the first balanced {...}, and
return null instead of throwing.
The failures here are not code failures, and no unit test reaches them. The
recurring ones have specific fixes worth knowing before you write the first
prompt: placeholder words painted literally into the artwork, the source
photo's clothing surviving an outfit change, text spelled differently in two
places, and panels that do not share a background. Read
references/prompting.md.
The seam is at your boundary. Unit tests protect your interpretation of a
response and nothing past it, so a green suite says nothing about whether the
app produces a good image. references/testing.md covers the layers and what
each one cannot reach.
Everything here is a summary that will drift. When a detail matters, confirm it at the source.
firebase_ai, the Dart SDK. Its
source is the fastest way to settle an API question:
~/.pub-cache/hosted/pub.dev/firebase_ai-*/lib/src/image_picker, which supplies the
pickImage call in section 4. A third-party choice you can swap.references/testing.mdreferences/setup.md: Firebase console path, provider choice, billing, and the web App Check debug-token trapreferences/models.md: model IDs, aspect-ratio and size enums, Gemini vs Imagenreferences/prompting.md: the mistakes image prompts actually make, and the phrasings that fix themreferences/testing.md: unit, golden, e2e and eval layers, and what each cannot reach© evanca, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/generate-images-with-firebase-ai of evanca/flutter-ai-rules.
Open the folder on GitHubat commit 30f908d
Generate Images With Firebase AI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Generate Images With Firebase AI this skillevanca/flutter-ai-rules | 651 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Flutter SoLoud Audio Filtersalnitak/flutter_soloud | 425 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Engine Whats Newflutter/flutter | 180k | — | ~978 | Automated safety check: Pass | BSD-3-Clause | |
| Flutter Cherry Pickflutter/flutter | 180k | — | ~1.8k | Automated safety check: Pass | BSD-3-Clause | |
| Upgrade Browserflutter/flutter | 180k | — | ~1.1k | Automated safety check: Pass | BSD-3-Clause | |
| Bump Dartflutter/flutter | 180k | — | ~1.2k | Automated safety check: Pass | BSD-3-Clause |
alnitak/flutter_soloud
Explains how to add and tune flutter_soloud's 13 audio filters at global, per-sound and mixing-bus level, including activation order and parameter fades.
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
flutter/flutter
How to land a formal cherry-pick of a merged PR for the flutter/flutter repo stable or beta channel.
flutter/flutter
Upgrade browser versions (Chrome or Firefox) in the Flutter Web Engine and/or Framework tests.
flutter/flutter
Do not trigger automatically; only run when a user runs /bump-dart.
flutter/flutter
Run DeviceLab tests for Flutter PRs using LUCI's led CLI tool.
evanca/flutter-ai-rules
A skill your agent uses when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.
evanca/flutter-ai-rules
A skill your agent uses when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.
evanca/flutter-ai-rules
A skill your agent uses when building any Flutter screen or component to choose responsive Row, Column, Expanded, Flexible, and Spacer layouts before fixed-size or coordinate-based alternatives.
evanca/flutter-ai-rules
A skill your agent uses when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns logic.
evanca/flutter-ai-rules
A skill your agent uses when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring BlocBuilder/BlocListener/BlocProvider, writing bloc tests, or choosing between Cubit…
evanca/flutter-ai-rules
A skill your agent uses when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring values, or modernizing pre-Dart-3 code.
Categories
A skill your agent uses when generating or editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana), making the first call work, choosing Gemini Developer API…. Generate Images With Firebase AI is an agent skill from evanca/flutter-ai-rules. Use when generating or editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana), making the first call work, choosing Gemini Developer API vs Vertex AI, hitting quota, billing or App Check failures, getting empty or image-only responses, sending a user photo as input, controlling aspect ratio or size, writing the image prompt, or deciding what to test.
Generate Images With Firebase AI fits situations like: editing images from Flutter/Dart with Firebase AI Logic and a Gemini image model (Nano Banana); making the first call work; choosing Gemini Developer API vs Vertex AI; app Check failures.
Run `npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a claude-code`. Or copy the skill folder (skills/generate-images-with-firebase-ai in evanca/flutter-ai-rules) into .claude/skills/generate-images-with-firebase-ai in your project. Claude Code loads it when a task matches its description.
Run `npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a codex`. Or copy the skill folder (skills/generate-images-with-firebase-ai in evanca/flutter-ai-rules) into .agents/skills/generate-images-with-firebase-ai in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add evanca/flutter-ai-rules --skill generate-images-with-firebase-ai -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/generate-images-with-firebase-ai, .gemini/skills/generate-images-with-firebase-ai, .github/skills/generate-images-with-firebase-ai and .opencode/skills/generate-images-with-firebase-ai in your project.
Going by SKILL.md and its folder, Generate Images With Firebase AI needs the command-line tools its instructions call (gcloud).
SKILL.md names 3 domains. As links in the text: firebase.google.com, pub.dev and patrol.leancode.co. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Generate Images With Firebase AI is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Generate Images With Firebase AI: Flutter SoLoud Audio Filters (alnitak/flutter_soloud, 425 stars), Engine Whats New (flutter/flutter, 180k stars), Flutter Cherry Pick (flutter/flutter, 180k stars) and Upgrade Browser (flutter/flutter, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
evanca (a GitHub user) maintains it in evanca/flutter-ai-rules, which has 651 GitHub stars. The repository holds 37 skills in this directory. The repository was last updated on October 10, 2026.
Source: evanca/flutter-ai-rules on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.