Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
NOAPI_HOMENoPrivate profile and state. Delete it to sign out of everything~/.no-api-media
NOAPI_CHROMENoBinary location for Chromeauto-detected
NOAPI_FFMPEGNoBinary location for ffmpegauto-detected
NOAPI_MIN_GAPNoSeconds between two generations on one provider20
NOAPI_CODEX_JSNoBinary location for Codex JSauto-detected
NOAPI_HIGGSFIELDNoBinary location for Higgsfieldauto-detected
NOAPI_GOOGLE_EMAILNoWhich Google account to usefirst signed-in account
NOAPI_OUTPUT_ROOTSNoFolders the server may write tothe folder the client starts the server in

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}
prompts
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
accounts_loginA

Opens a normal Chrome window on the private no-api-media profile so the USER can sign in by hand. The server never sees or stores a password. Tell the user to sign in, then close that window.

providers_listB

Built-in providers plus JSON specs from ~/.no-api-media/providers. Shows what each can make.

design_briefA

Call this BEFORE image_generate or video_generate. Returns designer-grade guidance for the asset type: what good looks like, concept directions with ready prompts written like a real creative brief, a critique checklist to judge every result, and the iteration process. Fill context from project_profile and the conversation: what the project is, where the asset goes and why. That story is what makes results premium instead of generic. Quality defaults to premium. For designs with words (infographic, poster, social post) put every word in context.exactText.

design_auditA

After you have LOOKED at a generated image, score it 0 to 5 on each criterion (focal-point, thumbnail, hierarchy, palette, topic-cues, brand-presence, text-accuracy, not-template) and pass the scores here. Returns ship or revise, the weakest points and the exact fix for each. Call with no scores to get the criteria. Be harsh: a generic, flat or template-looking result scores 2 or 3. Pass asset_type so the server learns what usually goes wrong and warns you up front next time. Pass file (the draft inside .ai-media) so a revise marks it rejected, which lets it be cleaned up later, and a ship marks it shortlisted. Pass style.tier and style.look (whatever you actually passed to design_brief) so the server can remember, once enough drafts have shipped, which tier and look tend to work for this asset type and suggest it by default next time.

brand_profilesB

Keeps a profile per brand so the right logo is never guessed: who publishes (a person posting as themselves, or a company), the real logo files for dark and light backgrounds, and optionally palette and fonts. design_brief takes brand_id and fills these in; compose places that brand's logo. action list, set or remove. Stored on this machine only.

design_feedbackA

When the user says something about a result was wrong (a colour, a crop, an empty band, how the text looks, the wrong logo), call this right away with what was wrong and what they want instead. It's kept in a local journal on this machine, and every later design_brief applies it: image corrections go into the prompt as what to do, corrections about text and logos come back as compositing_rules. Set brand when the correction is about one brand ("use the SFA mark on his personal posts"), so it never leaks into another brand's work. action list shows what's stored, action forget removes one entry by its time. Pass file to mark that draft rejected.

composition_checkA

Measures an image for the empty band generated art often leaves at an edge (a plain sky or flat strip meant for text that never came) and returns how much of the frame it takes, plus a crop that removes it. Pass output_path to save the cropped version. Run it on a draft before compositing and on the final file before shipping.

media_cleanupA

Removes old drafts from /.ai-media to stop it growing: rejected drafts after a few days, drafts already used for a final file after a couple of weeks, and untouched drafts after a month. Only files inside .ai-media are ever considered, final assets in the project are never touched, and a used draft goes only if its final file still exists. dry_run is true by default: it lists what would be removed and how much space it frees. Pass dry_run: false to delete. The server also does this on its own once per session unless auto_cleanup is off.

project_profileA

Read-only scan of the project: 3D or animation libraries, luxury/premium/playful/corporate/modest wording, brand colours, fonts, dark or light theme, and the existing images to use as references. Call it first, open the reference images yourself, then pass the result to design_brief. If the user states the level they want (e.g. 'premium', 'glowing', 'minimal'), that wins.

accounts_statusB

Checks Codex and Higgsfield CLI sign-in, ChatGPT web sign-in, the Google account and plan tier on Flow, and every JSON-defined site.

image_generateA

Generates one image (Flow and Higgsfield can return several) and saves the full-quality file inside the project. Providers: codex (ChatGPT plan via Codex CLI, most reliable), chatgpt (chatgpt.com), flow (Google Flow, Nano Banana 2, usually 0 credits), gemini (gemini.google.com), higgsfield (official CLI, costs credits: quote first), plus any JSON-defined site (call providers_list). Without output_path the file goes to /.ai-media//. Look at the result yourself before using it. Pass fallback_providers to try others in order if the first one fails.

video_quoteB

provider=flow: opens the Flow project, sets model and aspect, reads the cost Flow shows. provider=higgsfield: asks the Higgsfield CLI for the exact cost of model + prompt (images or videos). Generates nothing.

video_generateA

provider=flow (default): Veo or Omni in Google Flow. provider=higgsfield: Seedance, Kling, Veo and more via the official CLI. Both spend credits: call video_quote first, tell the user the cost, and pass max_credits. If the real cost is higher, nothing is generated. JSON-defined sites (e.g. grok) show no price up front, so they need confirm_spend: true, which you may only set after the user agreed in chat.

media_probeC

Duration, size, frame rate and codecs of an image or video inside the project.

background_removeA

Cuts out the subject and saves a transparent PNG, fully on this computer with rembg and BiRefNet models (no upload, no API). quality: fast (BiRefNet lite, default), best (BiRefNet general, slower, ~1 GB model on first use), portrait (people), anime. The first run downloads the model once. Needs rembg: uv tool install "rembg[cpu,cli]".

social_sizesA

From one image, makes the sizes people need: Open Graph, LinkedIn, X (post and profile header), Instagram square/portrait/story, YouTube thumbnail and channel banner, Facebook cover and event cover, Pinterest, TikTok profile, GitHub social preview, favicon and app icons. fit: cover (fill and crop, photos), contain (whole image on a blurred copy of itself, logos and posters), pad (whole image on a solid colour). Facebook and YouTube cover/banner sizes get cropped differently on different devices: keep the subject and any text centred in the middle third so it survives every crop. Files go to the output folder named after each preset.

contact_sheetA

Puts up to 12 draft images (for example several directions from image_generate, or a few iterations of the same one) on a single grid, so they can be judged against each other instead of one at a time. No text is drawn onto the image; the result instead lists which grid position holds which file, in reading order (left to right, top to bottom).

loop_checkA

For a background-video or product-video meant to loop: compares its first and last frame with the same structural-similarity check media_optimize uses for quality loss, and reports whether it will look seamless on repeat. A low similarity means a visible jump or jerk when it loops; regenerate with a direction that explicitly brings the motion back to where it started.

palette_extractA

Reads the dominant colours out of a real image (a generated hero, banner or any photo) and returns them as hex codes with their share of the image, plus a ready :root CSS custom-properties block. This is a colour histogram, not a brand decision: it names the colours --palette-1, --palette-2 and so on by how much of the image they cover, most dominant first. Decide yourself which one is the primary, the accent or the background before wiring it into a stylesheet.

deliverA

One step from a finished image to the file a platform wants: exact size (cropped to fill), JPEG at the lowest quality that still looks identical (SSIM), metadata stripped, under the platform's file-size limit, then checked for an empty band. Platforms: linkedin-feed (1080x1350, LinkedIn feed post, portrait 4:5 (takes the most room in a phone feed)); linkedin-square (1080x1080, LinkedIn feed post, square); linkedin-link (1200x627, LinkedIn link preview card, not a feed post); instagram-feed (1080x1350, Instagram feed post, portrait 4:5); instagram-story (1080x1920, Story or reel cover, 9:16; keep text out of the top 14% and bottom 20%); x-post (1600x900, X post image, 16:9); facebook-feed (1080x1350, Facebook feed post, portrait 4:5); youtube-thumbnail (1280x720, YouTube thumbnail, 2 MB limit); github-social (1280x640, GitHub repository social preview, 1 MB limit); og (1200x630, Open Graph link preview).

composeA

Renders a headline (and an optional sub line) and a registered brand's real logo over a generated image, the careful way every time: the calmest corner is measured and gets the text, the logo takes the calmest bottom corner left, text colour and a soft scrim are chosen for at least 4.5:1 contrast, the brand's display font (or the brief's) is used, one colour, no glow, no eyebrow label. A logo on its own dark tile gets a feathered edge so it doesn't look boxed. Saves a PNG; run deliver on it for the platform. Opens a tab in the server's browser to render.

browser_doneA

Call this only at the very end: the final asset is in the project (optimized or delivered, wired in where it belongs), you've checked it, and the user has nothing left to change. It closes this session's browser instead of leaving the window open until the idle safety net. Tabs other sessions have open in a shared browser are never closed; the browser then closes on its own once they finish. Don't call it between rounds of edits: reopening costs a few seconds, but closing mid-work makes the next step start over.

usage_reportA

Totals up this project's own .ai-media/manifest.jsonl: how many images and videos were generated, by which provider, in what format, and on which days. Nothing is uploaded; this only reads what the server already wrote to disk while saving each result.

video_editA

One operation per call, all local with ffmpeg: trim (start, end), reframe (aspect 9:16/1:1/16:9/4:5/4:3, fit cover|contain), speed (factor), fade (fade_in, fade_out seconds), mute, replace_audio (audio_path), extract_frame (at seconds, e.g. a poster image), gif (start, duration, width, fps), text (text, position top|center|bottom, size, color, box) on a video or image, logo (logo_path, position, width_percent) on a video or image, subtitles (srt_path, burned in), concat (others: more clips joined after this one). Chain calls for several edits.

media_optimizeA

Images to WebP by default, or JPEG/PNG with format (or a .jpg/.png output_path), for places like LinkedIn post uploads that don't take WebP. Videos to H.264 with faststart. Raises quality until SSIM (similarity to the original) reaches the target, so the size drops but the picture does not visibly change. The original is kept untouched. Behaviour notice: by default the output has embedded metadata stripped (EXIF, XMP, C2PA content credentials, text chunks), like most web image optimizers; the result lists what was removed. Pass keep_metadata: true to keep what re-encoding can carry. Invisible watermarks such as SynthID are never touched.

Prompts

Interactive templates invoked by user choice

NameDescription
design-assetBrief, explore three directions, critique hard, iterate, then place the winner. Works for logos, heroes, icons, banners and videos.

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.6/5.0

Scored across 25 tools

Disambiguation4/5

Most tools have clearly distinct roles across the media pipeline: generation, design guidance, QA, compositing, post-processing, delivery, and cleanup. Some overlap exists between social_sizes, deliver, and media_optimize for resizing/compression, and between composition_check and design_audit for quality checks, but the descriptions make the intended stage and purpose reasonably clear.

Naming Consistency3/5

All names use snake_case, which is good, but the structural pattern is mixed: some are noun_verb (image_generate, video_quote), some noun_noun (project_profile, design_brief), some verb_noun (background_remove, palette_extract), and some bare verbs (deliver, compose). The set remains readable, but an agent cannot rely on a predictable verb_noun convention.

Tool Count3/5

At 25 tools this is borderline heavy for a single server, though the domain is broad and includes generation, design guidance, compositing, post-processing, delivery, account management, and cleanup. Most tools earn their place, but the count is high enough that the surface feels dense rather than tightly scoped.

Completeness5/5

The tool surface covers a full media asset lifecycle: provider/account setup, project profiling, design briefing and auditing, image/video generation with cost quotes, probing, background removal, palette extraction, compositing, resizing, optimization, delivery, video editing, cleanup, and usage reporting. There are no obvious dead ends for the stated no-api-media purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues