Reelclaw
dansugc/reelclaw
Create, produce, and publish UGC-style short-form video reels at scale.
Make a short sound-off motion-graphics ad (a 15s Facebook, Instagram or TikTok ad, 4:5 or 9:16) from a product's real screenshots and photos, with every claim checked against the page it links to.
$ npx skills add nodetool-ai/nodetool --skill motion-ad -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nodetool-ai/nodetool motion-ad --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/nodetool-ai/nodetool.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/system-skills/motion-ad .claude/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-ad into .claude/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-adType 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 nodetool-ai/nodetool --skill motion-ad -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nodetool-ai/nodetool motion-ad --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/system-skills/motion-ad .agents/skills/motion-ad && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "motion-ad" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-ad into .agents/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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 nodetool-ai/nodetool --skill motion-ad -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nodetool-ai/nodetool motion-ad --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/system-skills/motion-ad .cursor/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-ad into .cursor/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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/nodetool-ai/nodetool.git --path packages/system-skills/motion-ad--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 nodetool-ai/nodetool --skill motion-ad -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nodetool-ai/nodetool motion-ad --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/system-skills/motion-ad .gemini/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-ad into .gemini/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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 nodetool-ai/nodetool motion-adInstalls 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 nodetool-ai/nodetool --skill motion-ad -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/system-skills/motion-ad .github/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-ad into .github/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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 nodetool-ai/nodetool --skill motion-ad -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nodetool-ai/nodetool motion-ad --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nodetool-ai/nodetool.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/system-skills/motion-ad .opencode/skills/motion-ad && 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 "motion-ad" agent skill from https://github.com/nodetool-ai/nodetool/tree/main/packages/system-skills/motion-ad into .opencode/skills/motion-ad/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "motion-ad", 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.
motion-adMake a short sound-off motion-graphics ad (a 15s Facebook, Instagram or TikTok ad, 4:5 or 9:16) from a product's real screenshots and photos, with every claim checked against the page it links to.
Motion Ad is an agent skill from nodetool-ai/nodetool. Make a short sound-off motion-graphics ad (a 15s Facebook, Instagram or TikTok ad, 4:5 or 9:16) from a product's real screenshots and photos, with every claim checked against the page it links to. Use for an animated promo, a kinetic-type ad, a 9:16 version of one, or a revision of one (swap the hero, change the CTA, re-render). For generated footage use product-commercial, for a person on camera ugc-video.
Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Media & Creative, covering Motion graphics and Influencer and creator marketing. It works with Instagram and TikTok. The repository describes itself as: Agent-first Creative Workspace. The licence is AGPL-3.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 58765d3. 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:
makeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Motion Ad loads about 3.4k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 1,967 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 nodetool-ai/nodetool at commit 58765d3, republished under its AGPL-3.0 licence (© nodetool-ai). 1,967 words, ~3,405 tokens.
.claude/skills/motion-ad/SKILL.md (or your agent's skills folder).A motion ad animates real product imagery and short headlines on the timeline.
Nothing in the picture is generated by default. The storyboard is the beat plan
and holds the real image each beat shows. The timeline carries the motion, and
render_timeline produces the MP4.
Load /storyboard-core first for the board contract. Load motion-graphics
with load_skill before the first edit_timeline call. It owns every op shape
this skill quotes.
<brand>-<topic>-ad-4x5-v2).The canonical machine-readable policy is the shot's production requirement.
For social ads, choose media_strategy deliberately:
still_motion_graphics is the default. Preserve the source image and build motion, type, shapes and transitions in the Timeline.hybrid uses generated/existing footage for atmosphere or physical motion while product, logo and exact copy remain separate protected layers.generated_video is reserved for actor performance, lifestyle movement or scene motion that materially benefits from video generation.Put source truth in protected_inputs. Product/logo/source assets carry their exact asset_id; copy and brand colours carry their exact value. Declare only non-destructive allowed_transformations such as position, scale, crop, rotate, mask, opacity and composite. A finished-cut plan must pass validateProductionMaterialization: replacing or regenerating a protected asset, changing exact copy/colour, or applying an undeclared transform is a policy error.
Do not use generated_video merely because a keyframe exists. Price cards, packshots, feature callouts, carousels, comparisons, typography hooks and CTA endings normally stay still_motion_graphics.
Stop where the request stops. "Just the storyboard" ends at step 3.
Ask for, or infer from context: the product, the destination URL, the audience and the format. The format defaults to 4:5 feed (1080×1350). Stories and reels are 9:16 (1080×1920).
browser {url} on the destination page, then on the homepage and pricing
page. Pull the headline promise, prices, rating and review counts, speed
claims, and what is free versus paid. Record each fact with the page it came
from.http_request {url} returns the raw HTML. Read the brand's hex values, font
family and logo URL from its CSS variables or stylesheet links. Tokens in the
source beat colours picked from a screenshot.take_screenshot {url, full_page: true} captures the live product UI. For
software, that screenshot is often the best hero image. When it fails
because no browser is configured, say so once and continue with downloaded
images.A fact the page does not state is [CLIENT INPUT NEEDED], never a guess.
Every image the ad shows must be a stored asset before it goes on a board or a timeline.
save_asset {source: "<url>", name} copies it
into the library and returns an asset_id. download_file writes a workspace
file instead, which is not an asset and cannot go on a timeline.asset_search or list_assets. Prefer the
user's files over scraped ones when they offer any.Look before choosing. view_image each candidate and note its pixel size.
Site images are often thumbnails, and a 400px image on a 1080px canvas reads as
soft. Say which images are low resolution in the report instead of upscaling
them silently.
Pick the hero pair for the clearest transformation. For a physical product, that is before and after. For software, it is the messy input and the finished output, as screenshots. Portrait images near 4:5 fill the hero and showcase slots best.
edit_image may crop, mirror or extend a real image to fit a slot. It may not
add a person, a product or a claim that was not in the source.
create_storyboard {name, brief, style, aspect_ratio: "4:5"} (or "9:16").
Put the researched facts and their source URLs in brief so a later revision
can re-check them. Put the brand palette and type in style.
Add one shot per beat with edit_storyboard. Each shot carries:
slug: 1a, 2a, and so on. "Change the 3a headline" then means one shot.action: what is on screen, in plain words.notes: the exact on-screen copy for the beat, including line breaks.duration_seconds: the beat length from the table below.Then attach each beat's real image as its still:
{"storyboard_id": "<id>", "ops": [
{"op": "add_keyframe_version", "target": "2a", "asset_id": "<hero after>"}
]}The shot moves to keyframe_ready with the real picture and no generation. A
still-only board is what the user reviews before any motion work.
Do not call render_storyboard_stills without targets on this board. It
selects every shot without a still, so a beat you forgot to attach would be
generated. Generate a shot only when the user asked for it, and only for a
background or texture, never for the product, a screen or a person.
Four or five beats in 15 seconds. One short headline per beat, at most about 20 characters per line, sized to read muted on a phone. The shape below is a starting point. Cut or replace a beat that does not fit the product. A desktop tool with no mobile app has no phone beat, so open on the hero instead.
| Slug | Time | Beat | Picture |
|---|---|---|---|
1a | 0–2.2s | Hook headline over the product in context: a phone or browser frame scrolling a real screenshot, a pointer or tap on the input | The screenshot |
2a | 2.2–5.4s | The tapped card grows into the hero. A scan line crosses it and reveals before becoming after. Two or three benefit chips | Hero before, hero after |
3a | 5.5–8.7s | The hero shrinks into a tilted wall of more real outputs | Four to nine outputs |
4a | 8.7–11.8s | Three showcase cards, optionally with a small "before" inset, and one proof line | Showcase images, a real rating or count |
5a | 11.8–15s | Brand-colour wipe to the end card: logo, CTA headline, one chip, the button | Logo |
Beat 4a loses its proof line when the page has no number to quote. Beat 3a
is cut when there are not enough distinct real outputs to fill a wall without
repeats.
assemble_storyboard_timeline lays down rendered clips only and skips shots
that have a still and no clip, so it builds nothing here. Create the sequence
directly:
{"name": "acme-scan-ad-4x5-v1", "width": 1080, "height": 1350, "fps": 30}create_timeline with those arguments. Then create_timeline_version before
the first edit, and build with edit_timeline in batches of at most 60 ops.
Read get_state for track and clip ids before animating anything.
Tracks, top to bottom. A lower index draws on top, and add_track appends
at the bottom, so add them in this order: headlines, chips and buttons, the
scan line and wipes, pictures, background. Give every element whose timing
overlaps another its own track. Two clips that overlap on one track dissolve
into each other.
Pictures. add_media_clip {asset: "asset://<id>", trackId, startMs, durationMs, transform} per image. An image has no duration of its own, so
always pass durationMs. transform.position is in canvas pixels and
scale is a factor. Frame each image with frame-composition rules.
Type. add_text_clip per headline, with the brand colour and a
fontFamily NodeTool bundles: Inter, Space Grotesk, Bebas Neue, Playfair
Display, Lora or JetBrains Mono. When the brand font is not among them, use
the closest bundled family and say so. Put an accent word in its own text clip
in the accent colour, aligned to the line. What the copy says and when it
appears belongs to caption-titles.
Shapes. add_shape_clip draws the background, chips, the button, the scan
line and the brand-colour disc of the end-card wipe.
Motion per beat. One easing family and one timing unit for the whole ad,
fixed before the first animation (motion-direction). Durations and stagger
come from motion-principles.
| Beat | Build it with |
|---|---|
| Hook | Headline animate_clip in pop with a word stagger. The screenshot's scroll is a custom positionY curve inside a masked frame (set_mask). The tap is a small shape with pop then pulse |
| Reveal | The "after" image sits on the track above "before". animate_clip in wipe on "after", with the scan line moving on the same window and easing. Benefit chips enter with stagger_animations |
| Wall | Output images with rotationY and perspective on their transforms, entering with stagger_animations. A slow kenBurns loop keeps the wall alive |
| Showcase | Cards slide in from one side. The proof line enters last and holds at least 1.5s |
| End card | set_transition iris or a scaled brand-colour disc, then the logo per logo-reveal. The CTA holds still for the last second |
Sound is optional. The ad must work muted. When the user wants a bed,
find_model with text_to_music, load_skill the prompting_skill it
names, then generate_music at the exact runtime. Put cuts on its beats with
beat-sync-editing.
validate_timeline after every batch. Fix text_illegible,
text_backing_unproven, font_not_portable, stagger_compressed and
animation_exceeds_clip before looking at frames.
preview_timeline_frame {timeline_id, times_ms, sheet: true}, then
view_image on the sheet. For the table above, sample
[300, 1900, 2700, 3800, 4900, 6600, 9800, 11500, 13600], plus the midpoint
of every entrance you added.
Look for:
Name each defect, fix it, and preview the same timecodes again.
render_timeline {timeline_id, preview_scale: 0.5, wait: true} for a draft
while iterating.render_timeline {timeline_id, wait: true} at full size when the frames
are right.analyze_video on the result. Check duration, width, height and frame
count against the plan.preview_timeline_frame at each transition to check the frames the stills
review did not sample.Report:
[CLIENT INPUT NEEDED] left in the boardget_cost_summary when anything was generatedA 9:16 cut is its own timeline, not a crop. retarget_format derives a
sequence by cropping, which cuts headlines and chips placed for 4:5. Create a
1080×1920 timeline from the same board, re-space every vertical position
(headlines, frame, hero, carousel, end card), and review and render it the
same way. Name it <brand>-<topic>-ad-9x16-v1.
Swap the hero for the image I uploaded. Keep everything else.
Change the CTA to "Start free". Check the page says free first.
Make a 9:16 version.
The headline in 1a is too long. Two lines, same words.
Drop the proof line. The review count is out of date.
Re-render as v3. Keep v2.Each one is create_timeline_version, the smallest edit that answers it, a
validate, a preview of the changed beats, and a new render with the next
version number.
© nodetool-ai, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/system-skills/motion-ad of nodetool-ai/nodetool.
Open the folder on GitHubat commit 58765d3
Motion Ad 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 |
|---|---|---|---|---|---|---|
| Motion Ad this skillnodetool-ai/nodetool | 560 | — | ~3.4k | Automated safety check: Pass | AGPL-3.0 | |
| Reelclawdansugc/reelclaw | 145 | 1 repos | ~8.2k | Automated safety check: Notes | None | |
| Motion Video in Remotionooiyeefei/ccc | 494 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Viral Tech Reel Editortornikebolokadze1-cyber/awesome-ai-pulse-georgia | 143 | — | ~3k | Automated safety check: Pass | CC0-1.0 | |
| Seedance AI Avatarrediumvex/ai-video-generator-claude | 408 | — | ~6.7k | Automated safety check: Pass | MIT | |
| Motion Adfabricioctelles/skills | 106 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 |
dansugc/reelclaw
Create, produce, and publish UGC-style short-form video reels at scale.
ooiyeefei/ccc
Builds marketing and explainer videos in Remotion from rendered scenes, with one real product capture as proof, and cuts them for each platform's formats.
tornikebolokadze1-cyber/awesome-ai-pulse-georgia
End-to-end viral tech reel production for Instagram Reels and TikTok using 2026 trend grammar — retention-first pacing, punch-ins, 3D cinematic AI-generated shots, motion design graphics, proof…
rediumvex/ai-video-generator-claude
Generate AI avatar and digital persona video prompts for Seedance 2.0 on Higgsfield.
fabricioctelles/skills
Produce a short motion-graphics video ad — a 15s Facebook/Instagram/TikTok spot — as a rendered MP4.
dansugc/reelclaw
Make short-form UGC video ads (TikTok, Reels, Shorts) for the product in the current repo with DansUGC ReelClaw and real human creator reactions from the DansUGC library.
nodetool-ai/nodetool
Cut a NodeTool timeline to music and shape its pacing — detect the beat grid, place cuts on phrases, pick a cut type, build speed ramps with time remap, and give the piece an arc.
nodetool-ai/nodetool
Add and animate a consistent text layer on an existing NodeTool timeline.
nodetool-ai/nodetool
Choose and animate colour on a NodeTool timeline, including shape and text gradients, colour grades, 3D LUTs, and dither.
nodetool-ai/nodetool
Write a shootable, precisely timed commercial beat sheet and store it as a NodeTool storyboard, with a consistent entity roster behind every shot.
nodetool-ai/nodetool
Direct ElevenLabs speech, dialogue, sound effects and music — the bracketed audio tags v3 acts on and why the voice decides whether a tag lands, stability as the delivery dial, punctuation instead…
nodetool-ai/nodetool
Stage the frame on a NodeTool timeline — grids, focal placement, safe areas per aspect ratio, depth layers and parallax, camera moves, and where elements enter and leave.
Categories
Make a short sound-off motion-graphics ad (a 15s Facebook, Instagram or TikTok ad, 4:5 or 9:16) from a product's real screenshots and photos, with every claim checked against the page it links to. Motion Ad is an agent skill from nodetool-ai/nodetool. Make a short sound-off motion-graphics ad (a 15s Facebook, Instagram or TikTok ad, 4:5 or 9:16) from a product's real screenshots and photos, with every claim checked against the page it links to.
Motion Ad fits situations like: an animated promo; A kinetic-type ad; A 9:16 version of one; A revision of one (swap the hero.
Run `npx skills add nodetool-ai/nodetool --skill motion-ad -a claude-code`. Or copy the skill folder (packages/system-skills/motion-ad in nodetool-ai/nodetool) into .claude/skills/motion-ad in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nodetool-ai/nodetool --skill motion-ad -a codex`. Or copy the skill folder (packages/system-skills/motion-ad in nodetool-ai/nodetool) into .agents/skills/motion-ad 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 nodetool-ai/nodetool --skill motion-ad -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/motion-ad, .gemini/skills/motion-ad, .github/skills/motion-ad and .opencode/skills/motion-ad in your project.
Going by SKILL.md and its folder, Motion Ad needs the command-line tools its instructions call (make).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Motion Ad is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Motion Ad: Reelclaw (dansugc/reelclaw, 145 stars), Motion Video in Remotion (ooiyeefei/ccc, 494 stars), Viral Tech Reel Editor (tornikebolokadze1-cyber/awesome-ai-pulse-georgia, 143 stars) and Seedance AI Avatar (rediumvex/ai-video-generator-claude, 408 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nodetool-ai (a GitHub organization) maintains it in nodetool-ai/nodetool, which has 560 GitHub stars. The repository holds 127 skills in this directory. The repository was last updated on October 9, 2026.
Source: nodetool-ai/nodetool on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.