tesseract-agent 0.12.2-beta.3 → 0.12.2-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-bundle/builtin-skills/comic-maker/SKILL.md +96 -0
- package/dist-bundle/builtin-skills/font-and-logo-design/SKILL.md +4 -3
- package/dist-bundle/builtin-skills/game-dev/SKILL.md +15 -2
- package/dist-bundle/builtin-skills/image-generation/SKILL.md +6 -5
- package/dist-bundle/builtin-skills/makers/SKILL.md +15 -1
- package/dist-bundle/builtin-skills/product-ads/SKILL.md +21 -2
- package/dist-bundle/builtin-skills/social-posts/scripts/check_post.py +25 -7
- package/dist-bundle/builtin-skills/tesseract-help/SKILL.md +1 -1
- package/dist-bundle/builtin-skills/tesseract-help/references/app-control-map.md +1 -1
- package/dist-bundle/builtin-skills/tesseract-help/references/troubleshooting.md +1 -1
- package/dist-bundle/builtin-skills/thumbnails/SKILL.md +9 -7
- package/dist-bundle/builtin-skills/video-editing/references/edl.md +6 -0
- package/dist-bundle/builtin-skills/video-generation/SKILL.md +1 -1
- package/dist-bundle/builtin-skills/video-generation/references/prompting.md +29 -17
- package/dist-bundle/catalog-vectors/embeddinggemma-300m-q4@ort1.23.2.bin +0 -0
- package/dist-bundle/cli.js +9320 -5676
- package/dist-bundle/mesh-core/package.json +1 -1
- package/dist-bundle/office-page.css +1 -1
- package/dist-bundle/office-page.js +478 -478
- package/dist-bundle/office.js +133 -32
- package/dist-bundle/pdf.js +144 -27
- package/dist-bundle/serpapi-mcp.js +6783 -3398
- package/package.json +1 -1
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: comic-maker
|
|
3
|
+
description: Make a comic, manga or webtoon from an idea or a whole script — chapters, pages and panels with the same characters, speech balloons as real editable text, left to right or right to left — and edit it in the comic editor, by hand and by you. Saves as PDF, CBZ and a vertical strip. Use for comics, manga, graphic novels, webtoons, comic strips, gag strips and storybook comics. Not for one comic-style picture (image-generation) or an animated video (video-generation).
|
|
4
|
+
license: MIT
|
|
5
|
+
version: 1.0.0
|
|
6
|
+
metadata:
|
|
7
|
+
tesseract.summary: A comic, manga or webtoon from an idea or script, with real balloons you can edit, in PDF, CBZ and a vertical strip.
|
|
8
|
+
tesseract.category: media
|
|
9
|
+
tesseract.needs: desktop
|
|
10
|
+
tesseract.examples: "make a manga about two rival bakers | turn this script into a comic | make a webtoon episode from my story | change the words in the second balloon on page 3 | make my comic read right to left | save it as a CBZ"
|
|
11
|
+
tesseract.tools: app_studio, cast_list, cast_save, find_ideas, get_idea, image_inspect
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Comics
|
|
15
|
+
|
|
16
|
+
The deliverable is a `.tscomic` in its own folder under `~/Documents/Tesseract/Comics/`, open in the comic editor beside
|
|
17
|
+
the chat, and whatever the person saves from it: a PDF, a CBZ, a vertical strip. The words are never in the pictures. A
|
|
18
|
+
panel holds a picture with no lettering; its balloons are text on top. That is the point of this maker: a line can
|
|
19
|
+
be changed or translated at any time, for free, and the picture stays as it is.
|
|
20
|
+
|
|
21
|
+
## The rules, before anything else
|
|
22
|
+
|
|
23
|
+
- **Real people.** A real person appears only through a saved card that holds their consent (`cast_list`; `cast_save`
|
|
24
|
+
with `consent_from`). Never by name in words, never from a photo that is not on a card. The maker refuses a real
|
|
25
|
+
private person with no card, and the drawing refuses a card whose check has not passed: say why in one plain sentence
|
|
26
|
+
and offer a made-up character instead.
|
|
27
|
+
- **No public figures**, in any role, satire included. Nobody who looks under 18 in anything romantic or sexual, and
|
|
28
|
+
nothing sexual about a real person. A story about a real private person that could hurt them is declined.
|
|
29
|
+
- **Other people's characters and brands stay out.** No superhero, cartoon or game character the person does not own, by
|
|
30
|
+
name or by costume. An original character can do the same job. "In the style of" a living artist is declined; a
|
|
31
|
+
look (manga, noir, clear line) is fine.
|
|
32
|
+
- **Drawing costs money.** `panel.draw` with `artist: "model"` and `character.draw_reference` are paid pictures, one per
|
|
33
|
+
panel: say how many and roughly what it costs, and wait for a yes. `artist: "sketch"` is free, and so is every
|
|
34
|
+
word, layout and export.
|
|
35
|
+
|
|
36
|
+
## Starting one
|
|
37
|
+
|
|
38
|
+
Use the maker for a new comic: `app_studio` `studio.start` `{ kind: "comic", about: <their words> }`. A pasted script goes
|
|
39
|
+
in `about` whole. It asks only what is left open, shows the plan beside the chat, and writes every chapter with
|
|
40
|
+
free sketches. No plan yet ("give me comic ideas for my bakery"): `find_ideas` with `category: "comics"`, offer two or
|
|
41
|
+
three, then `get_idea` the one they pick.
|
|
42
|
+
|
|
43
|
+
For a character who must look the same everywhere, use a saved card: "@maya" in what they said ties her to the card, and
|
|
44
|
+
its pictures go with every panel she is in. A made-up character gets a text sheet, the same fixed words said in
|
|
45
|
+
every panel; `character.draw_reference` draws one picture of them that then goes with every panel too. Do that before
|
|
46
|
+
drawing the panels, not after: it is what keeps a face the same.
|
|
47
|
+
|
|
48
|
+
## Working in it
|
|
49
|
+
|
|
50
|
+
Everything goes through `documents.*` with the comic's `path`, and the person sees it happen.
|
|
51
|
+
|
|
52
|
+
| To | Command |
|
|
53
|
+
|---|---|
|
|
54
|
+
| See it all | `documents.read` with no arguments: chapters, characters, how many panels are drawn |
|
|
55
|
+
| See a page | `documents.read` `{ page: 3 }`; add `render: true` to get the page as a picture, and look at it |
|
|
56
|
+
| Change words | `balloon.set_text` `{ balloon, text }` |
|
|
57
|
+
| Add a line | `balloon.add` `{ panel, text, kind, speaker }` |
|
|
58
|
+
| Kinds of balloon | `speech`, `thought`, `shout`, `whisper`, `caption` (narration, no tail), `sfx` (a noise, no shape) |
|
|
59
|
+
| Place it | `balloon.move`, `balloon.resize`, `balloon.set_tail` (fractions of the panel), `balloon.set_vertical` for Japanese or Chinese |
|
|
60
|
+
| Pages | `page.add`, `page.delete`, `page.move`, `page.set_layout` (it refuses to lose a panel with work in it) |
|
|
61
|
+
| Panels | `panel.set_shot` (what is drawn), `panel.set_cast`, `panel.move`, `panel.resize`, `panel.crop`, `panel.set_picture` for their own art |
|
|
62
|
+
| Chapters | `chapter.add`, `chapter.rename`, `chapter.move`, `chapter.delete` |
|
|
63
|
+
| Reading order | `page.auto_order` from where things stand, or `panel.reorder`, `balloon.reorder`; `comic.show_order` numbers them on screen |
|
|
64
|
+
| Manga | `comic.set_direction` `{ direction: "rtl" }` mirrors every page, panels and balloons; the pictures are not flipped |
|
|
65
|
+
| Draw | `panel.draw` `{ panel }`, `{ page }` or `{ all: true }`, with `artist`; it keeps what is drawn if it stops |
|
|
66
|
+
| Touch up a picture | `panel.edit_picture` opens it in the image editor |
|
|
67
|
+
| Undo | `edit.undo`, `edit.redo` |
|
|
68
|
+
| Save it | `export.pdf`, `export.cbz`, `export.webtoon` |
|
|
69
|
+
|
|
70
|
+
Arguments may name a panel by id or by its number on the open page; `documents.commands` lists every command.
|
|
71
|
+
|
|
72
|
+
## Good comics
|
|
73
|
+
|
|
74
|
+
- **One beat per panel, one idea per page.** A page turn is the comic's best trick: put the surprise on the first panel of
|
|
75
|
+
a new page.
|
|
76
|
+
- **Short lines.** About 20 words at most in a balloon, two balloons in most panels. If `documents.read` flags a balloon
|
|
77
|
+
`overflow`, cut the words first; make the balloon bigger only after that.
|
|
78
|
+
- **The shot never holds dialogue.** `shot` says place, action, camera and mood. A panel with text in the picture is a
|
|
79
|
+
panel that cannot be translated.
|
|
80
|
+
- **Vary the panels.** Wide for places, tight for faces, one big panel for the moment everything turns on.
|
|
81
|
+
- **Look at it.** After a page is drawn, `documents.read` `{ page, render: true }` and check that balloons do not cover
|
|
82
|
+
faces, tails point at the right mouth, and the reading order is the one you meant. Compare a character across
|
|
83
|
+
pages with `image_inspect` before saying they match.
|
|
84
|
+
|
|
85
|
+
## Saving it
|
|
86
|
+
|
|
87
|
+
| Format | For | What it holds |
|
|
88
|
+
|---|---|---|
|
|
89
|
+
| `export.pdf` | printing, sending | every page at print size, chapters as bookmarks, the reading direction set, the words searchable where the letters are Latin |
|
|
90
|
+
| `export.cbz` | comic reader apps | pictures in reading order, with `ComicInfo.xml`; a right-to-left comic is marked as manga |
|
|
91
|
+
| `export.webtoon` | WEBTOON, Tapas, phones | each chapter stacked panel by panel in images 800 px wide and at most 1280 px tall, cut in the gaps, with a page to read them; a chapter too big for one episode is named |
|
|
92
|
+
|
|
93
|
+
They land in the comic's `Exports` folder. A CBZ and a strip are pictures by nature: to change a line, change it in the
|
|
94
|
+
comic and save again.
|
|
95
|
+
|
|
96
|
+
Hand-offs: `image-generation` for one picture; `video-generation` to animate a panel; `social-posts` to post pages.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: font-and-logo-design
|
|
3
3
|
description: Turn a person's handwriting (a photo or a filled-in template) into an installable font — TTF, plus WOFF2 and CSS for the web — test that a font file really renders and covers the characters it should, and make wordmarks, monograms and simple logos as clean SVG. Use when someone wants a font from their handwriting or in a described style, wants a font file checked or previewed, or wants a wordmark or logo for a name or brand. Fonts in a described style and full brand kits are made in Tesseract's Fonts tab, which this skill hands over to; for illustrations, photos or painterly images use image-generation, for a project's colour and type tokens use design-system, and for a logo made with the person on the canvas beside the chat, or switched to from a picture or an app, use makers.
|
|
4
4
|
license: MIT
|
|
5
|
-
version: 1.0.
|
|
5
|
+
version: 1.0.2
|
|
6
6
|
metadata:
|
|
7
7
|
tesseract.summary: "Fonts from handwriting, font files checked, a wordmark or logo as SVG to stated needs. Made beside the chat: makers."
|
|
8
8
|
tesseract.category: design
|
|
@@ -18,8 +18,9 @@ same on every machine, checked at favicon size and on dark backgrounds. The agen
|
|
|
18
18
|
blob is which letter, whether a glyph looks right); deterministic tools do the geometry. Never edit glyph
|
|
19
19
|
outlines or path coordinates by hand.
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
they are switching into a logo
|
|
21
|
+
A logo asked for in plain words ("make me a logo for my bakery") is the logo maker's: load `makers` now and start it,
|
|
22
|
+
before anything else here. So is a picture or an app they are switching into a logo. This skill is for what the maker
|
|
23
|
+
does not do: a font, a font file checked, or a logo as a named file ("a wordmark as an SVG").
|
|
23
24
|
|
|
24
25
|
## 1. Pick the route
|
|
25
26
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
name: game-dev
|
|
3
3
|
description: Make a small game people can play, or a generative or interactive art piece, in the browser — on the canvas beside the chat (render_canvas) or as an HTML file — an arcade, puzzle or platform game, a p5.js sketch, a flow field or particle piece, a shader, a three.js 3D scene. Covers the game loop, keyboard and touch input, a pause, both themes, phone width, no flashing, frame rate and memory, playing it once headless to prove it runs, and a concept-art loop for scenes that must look stunning. Use when someone wants to make, fix or polish a browser game, a sketch, generative art or an animated visual they can steer. For tools, forms and dashboards use interactive-ui; for static pages canvas-design; for pictures, sprites and textures image-generation (pixel sprites pixel-art); to play chess, play_chess.
|
|
4
4
|
license: MIT
|
|
5
|
-
version: 1.0
|
|
5
|
+
version: 1.1.0
|
|
6
6
|
metadata:
|
|
7
7
|
tesseract.summary: Make a small playable game or a generative art piece on the canvas or as a file, and prove it runs.
|
|
8
8
|
tesseract.category: learning
|
|
9
9
|
tesseract.examples: "make a little snake game I can play here | build me a generative art piece in p5.js I can reseed | my canvas game runs way too fast on the new monitor, fix it | programmier mir ein kleines Jump'n'Run, das man auch am Handy spielen kann | làm giúp mình một game 3D nhỏ bằng three.js chơi được trên điện thoại"
|
|
10
|
-
tesseract.tools: render_canvas, generate_image, edit_image, image_inspect, design_judge, tesseract_spawn_subagent, browser_open, site_publish, ask_user
|
|
10
|
+
tesseract.tools: render_canvas, generate_image, edit_image, image_inspect, design_judge, tesseract_spawn_subagent, browser_open, site_publish, ask_user, make_playable_ad
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Game dev
|
|
@@ -135,3 +135,16 @@ Built from Hermes Agent's `p5js` skill, with its `dream-loop` skill merged in (M
|
|
|
135
135
|
`LICENSE-MIT-NousResearch.txt`); dream-loop is itself adapted from Anshu Chimala's dream-loop (MIT, © 2026 Anshu
|
|
136
136
|
Chimala, see `LICENSE-MIT-AnshuChimala.txt`). `templates/sketch.html` is adapted from the p5js viewer template;
|
|
137
137
|
`scripts/game_check.mjs` and `templates/arcade.html` are written for Tesseract. Modified by Tesseract.
|
|
138
|
+
|
|
139
|
+
## A playable ad of the game
|
|
140
|
+
|
|
141
|
+
`make_playable_ad` packs a browser game into the one file an ad network takes: every asset inside it, libraries from a
|
|
142
|
+
CDN fetched at export, the network's own install call, weighed against its limit (5 MB for most, 2 MB for one HTML to
|
|
143
|
+
Meta or Moloco). Three things keep a game fit for it:
|
|
144
|
+
|
|
145
|
+
- **Name assets whole.** `'assets/hero.png'` is found and embedded; `'assets/' + name + '.png'` is not, and the answer
|
|
146
|
+
lists what was left out.
|
|
147
|
+
- **Call the ad's hooks when it is an ad.** `window.tesseractAd?.cta()` at the install moment, `.end()` at win or loss,
|
|
148
|
+
`.retry()` on a replay. A game that calls none still gets a button and an end card.
|
|
149
|
+
- **Stay light.** A three.js game with no big models packs to about 1.2 MB as one HTML, and 0.35 MB zipped. An engine's
|
|
150
|
+
web build (Unity, Godot) does not fit: build a small browser version of its best minute for the ad.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: image-generation
|
|
3
|
-
description: Generate or edit images directly in the chat (
|
|
3
|
+
description: Generate or edit images directly in the chat (GPT Image 2.5 or Google Nano Banana 2), including transparent-background PNGs. Use when the user asks to create, generate, draw, or make an image / picture / icon / logo / illustration, to edit an existing image, or to make variations of one. A logo with its brand, made with the person on the canvas beside the chat, is makers, and so is a picture they switch into a logo, an app or a video; a vector (SVG) wordmark is font-and-logo-design.
|
|
4
4
|
license: MIT
|
|
5
|
-
version: 1.3.
|
|
5
|
+
version: 1.3.5
|
|
6
6
|
metadata:
|
|
7
7
|
tesseract.summary: "One picture, icon or illustration generated or edited in the chat, transparent PNGs included."
|
|
8
8
|
tesseract.category: media
|
|
@@ -15,10 +15,11 @@ metadata:
|
|
|
15
15
|
You can generate images directly in the chat with the `generate_image` tool and edit existing
|
|
16
16
|
images with the `edit_image` tool (both from the `tesseract-imagegen` MCP server).
|
|
17
17
|
`generate_image` creates **4 images by default** and displays them to the user automatically.
|
|
18
|
-
|
|
18
|
+
Three providers are supported, one with no key and two on the user's own API key:
|
|
19
19
|
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
20
|
+
- **Tesseract** — `gpt-image-2.5-flare`, no key needed
|
|
21
|
+
- **OpenAI** — `gpt-image-2.5-flare`
|
|
22
|
+
- **Google** — Nano Banana 2 (`gemini-3.1-flash-image`)
|
|
22
23
|
|
|
23
24
|
## How to handle a request to generate an image
|
|
24
25
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: makers
|
|
3
3
|
description: Tesseract's makers — the guided flows behind the Home cards that make a picture, a logo (a brand), a website, a mobile app, a video, a presentation, a personal assistant, a deep research report, a data analysis, a game (played in the browser on the canvas, or a real Unity, Unreal or Godot project), a skin for the Tesseract app itself, a new project folder set up the way the person describes, a piece of writing (an email, a letter, a blog post, a CV), a postcard, a set of social media posts or one of their photos enhanced, on a canvas beside the chat. Use whenever the person wants one of these made (in any chat, not only one opened from a card), when the conversation is already making one and the person answers it or asks for a change, and when they want to switch from one kind to another ("make it a logo instead", "now turn this into an app"). Code the person builds in a project of their own, or putting an existing site online, is build-website-or-app; a font, or a wordmark or logo as an SVG file to stated requirements, is font-and-logo-design.
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.11
|
|
5
5
|
metadata:
|
|
6
6
|
tesseract.summary: "A logo, website, app, video or deck made for the person beside the chat, watched as it forms, or switched to another."
|
|
7
7
|
tesseract.category: general
|
|
@@ -35,7 +35,21 @@ own tools, so prefer it.
|
|
|
35
35
|
| `writing` | a piece of writing — an email, a letter, a blog post, a CV, a speech — outlined first, then drafted in a document they edit by hand and by asking; copied, saved as Word or PDF, or opened as an email |
|
|
36
36
|
| `postcard` | a postcard: a picture with a headline on the front; the message, a stamp box and address lines on the back — turned over on the canvas, saved as a PDF at a real postcard size to print, or as pictures to send |
|
|
37
37
|
| `social` | social media posts: a plan of posts, each with a caption written for every platform it goes to (Instagram, Facebook, LinkedIn, X, TikTok, Threads, Pinterest) and a matching picture — shown as each feed shows it, saved with a CSV the schedulers import |
|
|
38
|
+
| `comic` | a comic, manga or webtoon: from an idea or a whole script to chapters, pages and panels, the lines in real balloons, the same characters through the Cast, in the comic editor; saved as a PDF, a CBZ or a vertical strip (the `comic-maker` skill) |
|
|
38
39
|
| `photo` | their own photo, enhanced: looked at, then the few steps it needs (light and colour, sharpening, a cut-out, made bigger — free, on this computer; restoring, colourising, retouching, restyling — with AI), shown before and after. `picture` is for a new picture |
|
|
40
|
+
| `spreadsheet` | a spreadsheet: a budget, a tracker, a schedule, an inventory, or their own data, with formulas, totals and a chart, in the spreadsheet editor |
|
|
41
|
+
| `pdf` | a PDF: one they fill in and sign, something made into a PDF (a document, pictures, a web page), or a form people can fill, in the PDF editor |
|
|
42
|
+
| `diagram` | a diagram: a flowchart, an org chart, a timeline, a mind map, a sequence, written as Mermaid and drawn beside its source |
|
|
43
|
+
| `drawing` | a vector drawing: an illustration, an icon, poster art, in the vector editor |
|
|
44
|
+
| `font` | a font: an original typeface from what it is for and how it should look, its letters drawn, kept as a .ttf and opened in the font editor |
|
|
45
|
+
| `audio` | a piece of audio: a podcast episode, a voice-over, a narration, a recording cleaned up, finished in the audio editor |
|
|
46
|
+
| `motion` | a motion graphic: an animated title, a lower third, a logo reveal, a short explainer, in the motion editor, exported to video |
|
|
47
|
+
| `wireframe` | a wireframe: grayscale screens of a page or an app linked into a clickable flow, or a blank canvas to build on |
|
|
48
|
+
| `invoice` | an invoice: who it is to, the lines, tax and due date, worked out and numbered on, as a Word document with its PDF and an email |
|
|
49
|
+
| `newsletter` | an email newsletter: sections planned with them, written and laid out as email-safe HTML to copy into a mailing tool |
|
|
50
|
+
| `form` | a form or survey: questions with simple logic, as a fillable PDF and a web page that collects answers |
|
|
51
|
+
| `remote` | a Remote Desktop connection: to one of their own computers, to someone else's, or someone reaching this one |
|
|
52
|
+
| `network` | a private network for their devices: made, then their computers, phones and people added, its map shown |
|
|
39
53
|
|
|
40
54
|
## The tool
|
|
41
55
|
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
name: product-ads
|
|
3
3
|
description: Make a finished short video ad for the person's own physical product — from a product photo, a saved product card or the page of the product in their own shop — in the shapes TikTok, Reels, Stories, Shorts, the Instagram and Facebook feeds, YouTube, LinkedIn, X and Pinterest want (9:16, 1:1, 4:5, 16:9), with packshots that move, clips or product effects made from them, an optional voice-over or a talking presenter (the person, or a character who agreed), music, the brand's colours, logo and words kept inside each platform's safe zone, and a call-to-action end card; priced once before anything is paid, then rendered per format and kept as editable projects, with free variants of the hook or call to action. Use when someone wants an ad, a promo clip or a set of ad variants for something they make or sell. Not for another company's product or brand, software demos from screen captures (product-videos), entertaining feed posts (social-posts), or researching competitors' ads (ad-research).
|
|
4
4
|
license: MIT
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.2.0
|
|
6
6
|
metadata:
|
|
7
7
|
tesseract.summary: A ready-to-post video ad for your own product in every platform's shape — priced once, editable.
|
|
8
8
|
tesseract.category: media
|
|
9
9
|
tesseract.examples: "give me ad ideas for my dental clinic | make a 15-second TikTok ad for my candles from this photo | turn my shop's product page into Reels and feed ads | haz un anuncio en vídeo de mi mochila para Instagram y YouTube | faça três versões do anúncio com ganchos diferentes | 用这张产品照片给我的茶叶做一个竖版广告视频"
|
|
10
|
-
tesseract.tools: make_ad, find_ideas, get_idea, ask_form, edit_image, generate_image, image_inspect, image_providers_status, cast_list, cast_save, list_voices, list_effects, video_providers_status, list_camera_moves, extract_video_frames, probe_video, browser_open, browser_eval, check_video_job
|
|
10
|
+
tesseract.tools: make_ad, make_playable_ad, find_ideas, get_idea, ask_form, edit_image, generate_image, image_inspect, image_providers_status, cast_list, cast_save, list_voices, list_effects, video_providers_status, list_camera_moves, extract_video_frames, probe_video, browser_open, browser_eval, check_video_job
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
# Product ads
|
|
@@ -57,6 +57,25 @@ rough cost — and `get_idea` the one they pick.
|
|
|
57
57
|
- An idea is a starting point, not a script to copy: the person's product, voice and offer make it theirs. Creator
|
|
58
58
|
formats are the `short-form-video` skill's; a promo that is not one product's ad is `promo-videos`.
|
|
59
59
|
|
|
60
|
+
## A playable ad, for a game or an app
|
|
61
|
+
|
|
62
|
+
When the thing advertised is the person's own game or app and they want an ad people can play, this is not a video:
|
|
63
|
+
`make_playable_ad` packs a browser game from the game maker (or any folder with an `index.html`) as the one file an ad
|
|
64
|
+
network takes, with the network's own install call, inside its size limit. It is free. No game yet: start the game
|
|
65
|
+
maker for a short version of the game's best minute; a playable is 15 to 30 seconds of play, then the end card.
|
|
66
|
+
|
|
67
|
+
| Network | File | Limit | Needs |
|
|
68
|
+
|---|---|---|---|
|
|
69
|
+
| AppLovin, any MRAID network | one HTML | 5 MB | the store address |
|
|
70
|
+
| Unity Ads | one HTML | 5 MB | both store addresses |
|
|
71
|
+
| Meta, Moloco | one HTML | 2 MB | nothing more; Meta also wants a lead-in video |
|
|
72
|
+
| Google Ads, Mintegral | a zip | 5 MB | nothing more |
|
|
73
|
+
| TikTok | a zip with config.json | 5 MB | a picture or video beside it |
|
|
74
|
+
| Liftoff | one HTML | 5 MB | nothing more |
|
|
75
|
+
|
|
76
|
+
Only their own game and their own store pages. These limits were read from guides, not from every network's own page:
|
|
77
|
+
tell them to try each file in the network's preview tool before paying for a campaign.
|
|
78
|
+
|
|
60
79
|
## 1. Brief
|
|
61
80
|
|
|
62
81
|
One `ask_form` for what is missing:
|
|
@@ -33,13 +33,31 @@ BROAD = {"#ai", "#tech", "#technology", "#business", "#worklife", "#work", "#pro
|
|
|
33
33
|
DEAD = {"#fyp", "#foryou", "#foryoupage", "#viral", "#explore", "#explorepage", "#trending", "#like4like", "#likeforlike",
|
|
34
34
|
"#followforfollow", "#follow4follow", "#f4f", "#l4l", "#followme"}
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
)
|
|
36
|
+
# The same list as packages/shared/src/ai-note.ts (the test keeps them level): a note on how it was MADE, in the languages
|
|
37
|
+
# the makers write in. Words about AI ("two AI agents", "AI-powered") are not one.
|
|
38
|
+
_ENGINE = r"ai|a\.i\.|artificial\s+intelligence|generative\s+ai|chatgpt|midjourney|dall[- ·]?e|gpt[- ]?image|stable\s+diffusion"
|
|
39
|
+
_ENGINE_AFTER_NOUN = _ENGINE + r"|veo|sora|gemini|claude|firefly|kling|flux"
|
|
40
|
+
_VERB = r"made|created|generated|produced|designed|drawn|written|edited|built|crafted|animated|rendered|illustrated|composed"
|
|
41
|
+
_HOW = r"with(?:\s+the\s+help\s+of)?|by|using|via"
|
|
42
|
+
_HOW_MUCH = r"(?:(?:entirely|fully|completely|partly|partially)\s+)?"
|
|
43
|
+
_NOUN = r"image|video|photo|picture|clip|art|artwork|visuals?|illustration|footage"
|
|
44
|
+
_PHRASES = [
|
|
45
|
+
rf"(?:{_VERB})\s+{_HOW_MUCH}(?:{_HOW})\s+(?:an?\s+|the\s+)?(?:{_ENGINE})",
|
|
46
|
+
rf"(?:{_NOUN}|this)\s+(?:(?:was|is)\s+)?(?:{_VERB})\s+{_HOW_MUCH}(?:{_HOW})\s+(?:an?\s+|the\s+)?(?:{_ENGINE_AFTER_NOUN})",
|
|
47
|
+
r"ai[- ](?:generated|made|created|produced)",
|
|
48
|
+
rf"(?:{_NOUN})\s*(?:by|:|credit:)\s*(?:{_ENGINE})",
|
|
49
|
+
r"(?:hech[oa]|cread[oa]|generad[oa]|producid[oa]|diseñad[oa])\s+(?:con|por|mediante)\s+(?:la\s+|una\s+)?(?:ia|inteligencia\s+artificial)",
|
|
50
|
+
r"(?:feit[oa]|criad[oa]|gerad[oa])\s+(?:com|por|pela)\s+(?:a\s+|uma\s+)?(?:ia|inteligência\s+artificial)",
|
|
51
|
+
r"(?:fait|faite|créée?|générée?|réalisée?|conçue?)\s+(?:avec|par)\s+(?:l['’]|une\s+)?(?:ia|intelligence\s+artificielle)",
|
|
52
|
+
r"(?:mit|durch|von)\s+(?:einer\s+)?(?:ki|künstlicher?\s+intelligenz)\s+(?:erstellt|generiert|gemacht|erzeugt)",
|
|
53
|
+
r"ki-(?:generiert|erstellt|erzeugt)\w*",
|
|
54
|
+
r"(?:fatt[oa]|creat[oa]|generat[oa]|realizzat[oa])\s+(?:con|da|dalla)\s+(?:l['’])?(?:ia|intelligenza\s+artificiale)",
|
|
55
|
+
r"(?:făcut[ăa]?|facut[ăa]?|creat[ăa]?|generat[ăa]?|realizat[ăa]?)\s+(?:cu\s+ajutorul|cu|de|prin)\s+(?:ai|ia|inteligen[țt][ăa]\s+artificial[ăa])",
|
|
56
|
+
r"(?:создан[оа]?|сделан[оа]?|сгенерирован[оа]?)\s+(?:с\s+помощью\s+|при\s+помощи\s+|с\s+)?(?:ии|нейросет\w*|искусственн\w*\s+интеллект\w*)",
|
|
57
|
+
]
|
|
58
|
+
_HASHTAG = r"#(?:madewithai|madebyai|aigenerated|generatedbyai|createdwithai|createdbyai|aiart|aiartwork|aivideo|aiimage|aiphoto|aimade|aicreated)"
|
|
59
|
+
_JOINED = r"AI生成|AI製作|AI作成|AIで(?:作成|生成)|人工智能生成"
|
|
60
|
+
AI_NOTE = re.compile(rf"(?<!\w)(?:{'|'.join(_PHRASES)})(?!\w)|{_HASHTAG}(?!\w)|{_JOINED}", re.IGNORECASE)
|
|
43
61
|
URL = re.compile(r"\b(?:https?://|www\.)\S+|\b[a-z0-9-]+\.(?:com|dev|app|io|ai|net|org)\b(?:/\S*)?", re.IGNORECASE)
|
|
44
62
|
HASHTAG = re.compile(r"(?<![\w#])#\w+", re.UNICODE)
|
|
45
63
|
|
|
@@ -69,7 +69,7 @@ request or drop policy, approving, joining a network, join codes), any settings
|
|
|
69
69
|
and sending the person's files to someone else (`drops.prepare` fills in the Send sheet — they press Send) is theirs.
|
|
70
70
|
|
|
71
71
|
To **show** the person something, open it: `navigation.open_settings {section}` (general, appearance, shortcuts,
|
|
72
|
-
runners, agent, voice, extensions, account, perks, team, privacy, remote-desktop, network, about),
|
|
72
|
+
projects, runners, agent, capabilities, voice, extensions, developer, account, perks, team, privacy, remote-desktop, network, about),
|
|
73
73
|
`navigation.open_tab`, `navigation.open_file` — then `navigation.state` says what is in front. Or write a link to one
|
|
74
74
|
panel — `tesseract://settings/<section>` with `appearance`, `editor`, `runners`, `agent`, `extensions`,
|
|
75
75
|
`voice`, `image-edit`, `search`, `account`, `team`, `general`, `shortcuts`, `about`,
|
|
@@ -16,7 +16,7 @@ it runs in Chat and Plan too.
|
|
|
16
16
|
|
|
17
17
|
## navigation — `app_navigation` (the window; needs the app open on this machine)
|
|
18
18
|
- `navigation.state` R — the project, the view, the tab in front, every tab open, the Settings page if open, which panels show.
|
|
19
|
-
- `navigation.open_settings {section?}` (general, appearance, shortcuts, runners, agent, voice, extensions, account, perks, team, privacy, remote-desktop, network, about).
|
|
19
|
+
- `navigation.open_settings {section?}` (general, appearance, shortcuts, projects, runners, agent, capabilities, voice, extensions, developer, account, perks, team, privacy, remote-desktop, network, about).
|
|
20
20
|
- `navigation.open_tab {tab: home|files|settings|computers|community|team|vault|remote-desktop|stage|fonts|whats-new|image-search|report-issue}` (team = Atrium).
|
|
21
21
|
- `navigation.open_file {path}` (the app's editor/viewer), `open_browser {url?}`, `open_panel {panel: conversations|files|terminal}`.
|
|
22
22
|
- `navigation.split {direction: right|down}`, `close_tab` (the tab in front — never your own conversation), `reopen_closed_tab`.
|
|
@@ -14,7 +14,7 @@ by name, delete `~/.tesseract` or settings files, or reinstall the app on your o
|
|
|
14
14
|
| A remote machine shows offline | `hosts.list` | It has to be on and signed in; repair runs on that machine itself |
|
|
15
15
|
| Computer control cannot see or click | `permissions.status` for `screen-recording` and `accessibility` | `permissions.open_settings`, then relaunch Tesseract; check computer control is switched on in Settings |
|
|
16
16
|
| Voice: nothing heard / no reply | `permissions.status {id: "microphone"}`; `voice.has_provider_key {provider: "gemini"}` | Grant the mic; add the key in `tesseract://settings/voice`. Realtime voice is the least proven part of the product — say so if it still fails |
|
|
17
|
-
| Web search fails | `settings.has_search_key` | Brokered quota: 1,000 searches a month signed in,
|
|
17
|
+
| Web search fails | `settings.has_search_key` | Brokered quota: 1,000 searches a month signed in, 500 signed out; sign in, or wait for the month to roll over |
|
|
18
18
|
| Images do not generate | `image_providers_status` / `image.list_providers` | Add an OpenAI or Google key in `tesseract://settings/image-edit` |
|
|
19
19
|
| Video does not generate | `video_providers_status` | Sign in (free tier) or add a Google key in image-edit settings |
|
|
20
20
|
| Music / speech / voice clone fail | `voice.has_provider_key {provider: "elevenlabs"}` | ElevenLabs key in `tesseract://settings/voice` |
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: thumbnails
|
|
3
3
|
description: Design the picture that gets a video clicked — YouTube thumbnails (1280×720), covers for Shorts, Reels and TikTok, and podcast or series cover art — from the video's promise and title, in three or four different concepts, built from a frame of the person's own video, their own photo or a saved character, a found photo or a generated scene, with the words set exactly in a bold font, checked at the size people really see it on a phone, and saved at the platform's size and file limit, ready for the youtube-channel skill to set. Use when someone wants a thumbnail, a cover or a set of thumbnail options to test, or wants an existing one made clearer or more clickable. Not for the video itself (video-generation, short-form-video), a social post picture (social-posts) or a logo (makers, font-and-logo-design).
|
|
4
4
|
license: MIT
|
|
5
|
-
version: 1.2.
|
|
5
|
+
version: 1.2.1
|
|
6
6
|
metadata:
|
|
7
7
|
tesseract.summary: Clickable YouTube thumbnails and Shorts/Reels/podcast covers — concepts, exact text, phone-size check.
|
|
8
8
|
tesseract.category: media
|
|
@@ -82,9 +82,9 @@ about 80 px tall on a 1280×720 frame:
|
|
|
82
82
|
`app_documents` `documents.run` `text` (the editor's Type tool; `documents.commands` with filter "text" shows its
|
|
83
83
|
argument — font, size, colour, position), crop to 16:9 with `crop` if needed, and `documents.save`.
|
|
84
84
|
- **Or with `render_edl`**: one image segment (`durationSec: 1`), `output: { width: 1280, height: 720 }` (1080×1920 for
|
|
85
|
-
a vertical cover), the words as `titles` (`bold: true`, `size` 120–200, `color`, no `box` — the renderer
|
|
86
|
-
and shadows the letters; `output.fontsDir` for the channel's own font), then `extract_video_frames` at 0.5 s
|
|
87
|
-
the JPEG. A complete call for one concept:
|
|
85
|
+
a vertical cover), the words as `titles` (`bold: true`, `size` 120–200 on 1280×720, `color`, no `box` — the renderer
|
|
86
|
+
outlines and shadows the letters; `output.fontsDir` for the channel's own font), then `extract_video_frames` at 0.5 s
|
|
87
|
+
gives the JPEG. A complete call for one concept:
|
|
88
88
|
|
|
89
89
|
```json
|
|
90
90
|
{ "version": 1, "output": { "width": 1280, "height": 720, "name": "thumb-A" },
|
|
@@ -96,7 +96,9 @@ about 80 px tall on a 1280×720 frame:
|
|
|
96
96
|
Titles do not wrap: break long ones with `\n`. Keep every letter inside x 0.05–0.78 and y 0.08–0.78 of a 16:9 frame
|
|
97
97
|
(the duration stamp covers the bottom right). **Check the fit before rendering**: on 1280×720 at `size` 150 a character
|
|
98
98
|
takes about 5% of the width, so a line of 10 spans half the frame: centre it far enough in that no letter is cut. On a
|
|
99
|
-
1080×1920 cover `size` is scaled up, so
|
|
99
|
+
1080×1920 cover `size` is scaled up, so a character takes about 8% of the width at `size` 70: use `size` 60–70, at most
|
|
100
|
+
9 characters a line, centred at x 0.43, and keep every letter inside x 0.05–0.82 and y 0.15–0.65 of the cover. A longer
|
|
101
|
+
line is cut off: break it with `\n` or use a shorter word, never a smaller size.
|
|
100
102
|
|
|
101
103
|
**The order of calls:** `image_providers_status` → for their video: `probe_video`, `transcribe_video` and
|
|
102
104
|
`extract_video_frames` at the moments the transcript points to (never at guessed times), `image_inspect` to pick; for
|
|
@@ -110,8 +112,8 @@ the image editor) → the phone check (§ 5) → the final file at the platform'
|
|
|
110
112
|
is the emotion? Can you read every word?" If the answer is unclear at that size, simplify — fewer elements, bigger
|
|
111
113
|
face, fewer words.
|
|
112
114
|
- On YouTube the **bottom-right corner** is covered by the duration stamp: nothing important there. On vertical covers
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
the apps' name, caption and buttons cover everything outside x 0.05–0.82 and y 0.15–0.65: no face and no word there,
|
|
116
|
+
and look at both side edges for a letter cut off.
|
|
115
117
|
- Compare the concepts side by side and say which you would test first and why.
|
|
116
118
|
|
|
117
119
|
## 6. Sizes and delivery
|
|
@@ -75,6 +75,7 @@ Ease into a moment and back out — the impact in slow motion, the jump frozen a
|
|
|
75
75
|
|
|
76
76
|
```json
|
|
77
77
|
{ "asset": "jump", "in": 0, "out": 6, "ramps": [ { "atSec": 2.4, "speed": 0.25, "holdSec": 2, "easeSec": 0.5 } ] }
|
|
78
|
+
{ "asset": "jump", "in": 0, "out": 6, "ramps": [ { "preset": "hit-beat", "atSec": 2.4 } ] }
|
|
78
79
|
```
|
|
79
80
|
|
|
80
81
|
| Field | Meaning |
|
|
@@ -85,6 +86,11 @@ Ease into a moment and back out — the impact in slow motion, the jump frozen a
|
|
|
85
86
|
| `easeSec` | source seconds the speed takes to change before and after the moment, 0–2 (default 0.5; 0 = a hard switch) |
|
|
86
87
|
| `pieces` | steps in each ease, 2–12 (default 5) |
|
|
87
88
|
|
|
89
|
+
A ramp can be asked for by name (`list_director_controls` `ramps`); a number given beside the name wins.
|
|
90
|
+
`hit-beat` snaps to slow motion on the moment, `slow-beat` and `deep-slow` savour it, `freeze-beat` and
|
|
91
|
+
`freeze-snap` stop it, `burst-in` and `build-up` rush into `atSec` and land on it, `burst-out` rushes away
|
|
92
|
+
from it, `wind-down` drains the speed, `surge` is a short push.
|
|
93
|
+
|
|
88
94
|
Up to 4 ramps a segment, apart from each other; the segment needs `in` and `out` and cannot be
|
|
89
95
|
`reverse`d. The rest of the segment plays at its own `speed`; the sound follows the picture
|
|
90
96
|
(silent through a freeze). The renderer cuts the segment into pieces of one speed each, fitted to
|
|
@@ -60,7 +60,7 @@ packshots, 3D-style renders or a turntable → `3d-product-shots`; a video ad fo
|
|
|
60
60
|
animated titles, a logo sting or 3D text → `motion-graphics`; the thumbnail or cover → `thumbnails`.
|
|
61
61
|
|
|
62
62
|
Name the camera move instead of describing it: `camera_move` takes an id from `list_camera_moves`
|
|
63
|
-
(for example `dolly-in`, `orbit`, `crane-up`, `crash-zoom-in`, `locked-off`) or
|
|
63
|
+
(for example `dolly-in`, `orbit`, `crane-up`, `crash-zoom-in`, `locked-off`) or up to three that stack, on
|
|
64
64
|
`generate_video` and on each scene of `create_video_from_scenario`. Choose one per beat — see
|
|
65
65
|
[references/prompting.md](references/prompting.md) § Camera moves.
|
|
66
66
|
|
|
@@ -30,8 +30,8 @@ shots — make it a scenario.
|
|
|
30
30
|
|
|
31
31
|
## Camera moves
|
|
32
32
|
|
|
33
|
-
`camera_move` names the move instead of describing it: one id from `list_camera_moves`, or
|
|
34
|
-
stack. Its camera sentence goes **in front of** the prompt (models drop camera language that comes
|
|
33
|
+
`camera_move` names the move instead of describing it: one id from `list_camera_moves`, or up to
|
|
34
|
+
three that stack. Its camera sentence goes **in front of** the prompt (models drop camera language that comes
|
|
35
35
|
after the subject), so the prompt itself then describes the subject and the action, not the camera.
|
|
36
36
|
`generate_video` takes it for the clip; `create_video_from_scenario` takes it per scene.
|
|
37
37
|
|
|
@@ -39,21 +39,33 @@ after the subject), so the prompt itself then describes the subject and the acti
|
|
|
39
39
|
|
|
40
40
|
| The beat | Moves |
|
|
41
41
|
|---|---|
|
|
42
|
-
| Hook, first second | `fast-push-in`, `crash-zoom-in`, `fpv-dive` |
|
|
43
|
-
| Reveal, realisation | `dolly-in`, `pull-back-reveal`, `tilt-up`, `focus-pull` |
|
|
44
|
-
| Hero shot (person or product) | `orbit`, `arc-left` / `arc-right`, `turntable` |
|
|
45
|
-
| Movement, travel | `tracking-side`, `follow-behind`, `car-mount`, `fpv-fly-through`, `hyperlapse` |
|
|
46
|
-
| Establishing a place | `drone-flyover`, `drone-rise`, `crane-down` |
|
|
47
|
-
| Someone talks, a product is shown | `locked-off`, `zoom-in`, `handheld` |
|
|
48
|
-
| Tension, unease | `dutch-tilt`, `dolly-zoom`, `body-mount` |
|
|
49
|
-
| Between two scenes | `whip-pan`, `pass-through`, `eye-dive` (give the next scene as the last picture) |
|
|
50
|
-
| Ending | `crane-up`, `dolly-out`, `space-pull-back`, `rising-orbit` |
|
|
51
|
-
| Time | `timelapse`, `slow-motion`, `frozen-moment` |
|
|
52
|
-
|
|
53
|
-
**Stacking.**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
42
|
+
| Hook, first second | `fast-push-in`, `crash-zoom-in`, `fpv-dive`, `zoom-bounce` |
|
|
43
|
+
| Reveal, realisation | `dolly-in`, `creep-in`, `pull-back-reveal`, `rise-over-reveal`, `tilt-up`, `focus-pull`, `focus-reveal` |
|
|
44
|
+
| Hero shot (person or product) | `orbit`, `half-orbit`, `low-orbit`, `arc-left` / `arc-right`, `turntable`, `motion-sweep` |
|
|
45
|
+
| Movement, travel | `tracking-side`, `follow-behind`, `leading-walk`, `car-mount`, `helmet-cam`, `handlebar-mount`, `fpv-fly-through`, `gimbal-glide`, `hyperlapse` |
|
|
46
|
+
| Establishing a place | `drone-flyover`, `drone-rise`, `drone-top-down`, `heli-aerial`, `crane-down`, `sweeping-crane` |
|
|
47
|
+
| Someone talks, a product is shown | `locked-off`, `near-still`, `still-top-shot`, `zoom-in`, `parallax-slide`, `handheld` |
|
|
48
|
+
| Tension, unease | `dutch-tilt`, `dolly-zoom`, `reverse-dolly-zoom`, `body-mount`, `high-corner`, `boat-sway` |
|
|
49
|
+
| Between two scenes | `whip-pan`, `whip-tilt`, `pass-through`, `foreground-wipe`, `eye-dive` (give the next scene as the last picture) |
|
|
50
|
+
| Ending | `crane-up`, `dolly-out`, `creep-out`, `drone-pull-away`, `space-pull-back`, `rising-orbit`, `defocus-out` |
|
|
51
|
+
| Time | `timelapse`, `slow-motion`, `frozen-moment`, `shutter-drag`, `stop-motion`, `undercranked` |
|
|
52
|
+
|
|
53
|
+
**Stacking.** Up to three moves in a clip, by a small grammar:
|
|
54
|
+
|
|
55
|
+
- `+` (or a list) runs moves **together**: `dolly-in + handheld + slow-motion` is a move, how the
|
|
56
|
+
camera is held and a speed. They must be of different kinds, may not pull the camera in opposite
|
|
57
|
+
directions (`crane-up + fpv-dive`), and at most two may travel through space. A fast snap
|
|
58
|
+
(`whip-pan`, `crash-zoom-in`) cannot run in `slow-motion`.
|
|
59
|
+
- `>` runs them **one after the other**: `crane-up > pan-left`, `locked-off > dolly-in`. Moves of one
|
|
60
|
+
kind and opposite moves are fine here. Give each step about three seconds of the clip.
|
|
61
|
+
- `dolly-zoom`, `reverse-dolly-zoom`, `frozen-moment`, `eye-dive` and `space-pull-back` are whole moves
|
|
62
|
+
and stand alone; `locked-off`, `near-still`, `high-corner`, `still-top-shot`, `rising-orbit` and
|
|
63
|
+
`barrel-roll` run together only with a speed.
|
|
64
|
+
|
|
65
|
+
The tool says why when a stack does not work.
|
|
66
|
+
|
|
67
|
+
**Unproven moves.** A move with `status: seed` in `list_camera_moves` has never been run live, so its
|
|
68
|
+
result is not known. Say so before spending on one, or pick a move without that mark.
|
|
57
69
|
|
|
58
70
|
**Which model.** The plain moves (dolly, crane, pan, tilt, arc, zoom, handheld, drone) work on every
|
|
59
71
|
model — Gemini Omni Flash, Kling and PixVerse. Fast, complex motion — `fpv-dive`, `fpv-fly-through`,
|
|
Binary file
|