💥 Unified youtube skill
This commit is contained in:
1 parent
54734409c7
commit
40ecc96a8e
103 files changed
+982
-4272
No files matched your search
@@ -50,6 +50,7 @@ dist/
|
||||
/.clwb/
|
||||
|
||||
/docs/superpowers
|
||||
.worktrees/
|
||||
# except for the following files
|
||||
!winres/*
|
||||
!server.json
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
load("@rules_go//go:def.bzl", "go_binary", "go_library")
|
||||
load("@rules_go//go:def.bzl", "go_binary", "go_library", "go_test")
|
||||
|
||||
go_library(
|
||||
name = "skillgen_lib",
|
||||
@@ -31,7 +31,6 @@ go_library(
|
||||
"//cmd/videoCategory",
|
||||
"//cmd/watermark",
|
||||
"@com_github_spf13_cobra//:cobra",
|
||||
"@com_github_spf13_pflag//:pflag",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -40,3 +39,9 @@ go_binary(
|
||||
embed = [":skillgen_lib"],
|
||||
visibility = ["//:__subpackages__"],
|
||||
)
|
||||
|
||||
go_test(
|
||||
name = "skillgen_test",
|
||||
srcs = ["main_test.go"],
|
||||
embed = [":skillgen_lib"],
|
||||
)
|
||||
+216
-265
@@ -15,7 +15,6 @@ import (
|
||||
|
||||
"github.com/eat-pray-ai/yutu/cmd"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
// Blank-import every resource package so that its init() registers the
|
||||
// subcommand (and sub-subcommands) on cmd.RootCmd.
|
||||
@@ -46,165 +45,164 @@ import (
|
||||
//go:embed setup.md
|
||||
var setupContent string
|
||||
|
||||
func main() {
|
||||
out := flag.String("out", "./skills", "output directory for generated skills")
|
||||
flag.Parse()
|
||||
// ---------------------------------------------------------------------------
|
||||
// Types
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
root := cmd.RootCmd
|
||||
root.InitDefaultHelpCmd()
|
||||
type verbEntry struct {
|
||||
name string
|
||||
short string
|
||||
}
|
||||
|
||||
for _, c := range root.Commands() {
|
||||
if !strings.HasPrefix(c.Short, "Manage") {
|
||||
type resourceEntry struct {
|
||||
name string
|
||||
kebab string
|
||||
human string
|
||||
short string
|
||||
long string
|
||||
verbs []verbEntry
|
||||
}
|
||||
|
||||
type categoryGroup struct {
|
||||
name string
|
||||
resources []resourceEntry
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Category mapping
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
var categoryOrder = []string{
|
||||
"Content", "Organization", "Community", "Channel", "Discovery", "Metadata",
|
||||
}
|
||||
|
||||
var categoryMap = map[string]string{
|
||||
"video": "Content",
|
||||
"caption": "Content",
|
||||
"thumbnail": "Content",
|
||||
"watermark": "Content",
|
||||
"playlist": "Organization",
|
||||
"playlistItem": "Organization",
|
||||
"playlistImage": "Organization",
|
||||
"comment": "Community",
|
||||
"commentThread": "Community",
|
||||
"subscription": "Community",
|
||||
"member": "Community",
|
||||
"membershipsLevel": "Community",
|
||||
"superChatEvent": "Community",
|
||||
"channel": "Channel",
|
||||
"channelBanner": "Channel",
|
||||
"channelSection": "Channel",
|
||||
"search": "Discovery",
|
||||
"activity": "Discovery",
|
||||
"videoCategory": "Metadata",
|
||||
"videoAbuseReportReason": "Metadata",
|
||||
"i18nLanguage": "Metadata",
|
||||
"i18nRegion": "Metadata",
|
||||
}
|
||||
|
||||
// resourceCategory returns the category for a resource, or "Other" if unmapped.
|
||||
func resourceCategory(name string) string {
|
||||
if cat, ok := categoryMap[name]; ok {
|
||||
return cat
|
||||
}
|
||||
return "Other"
|
||||
}
|
||||
|
||||
// collectResource builds a resourceEntry from a cobra resource command.
|
||||
func collectResource(c *cobra.Command) resourceEntry {
|
||||
name := c.Name()
|
||||
var verbs []verbEntry
|
||||
for _, sub := range c.Commands() {
|
||||
if sub.Name() == "help" {
|
||||
continue
|
||||
}
|
||||
|
||||
skill := c.Name()
|
||||
kebabSkill := camelToKebab(skill)
|
||||
dir := filepath.Join(*out, "youtube-"+kebabSkill)
|
||||
refDir := filepath.Join(dir, "references")
|
||||
|
||||
if err := os.MkdirAll(refDir, 0o755); err != nil {
|
||||
log.Fatalf("mkdir %s: %v", refDir, err)
|
||||
}
|
||||
|
||||
setupPath := filepath.Join(refDir, "setup.md")
|
||||
if err := writeSetup(setupPath); err != nil {
|
||||
log.Fatalf("write setup %s: %v", setupPath, err)
|
||||
}
|
||||
|
||||
var verbs []*cobra.Command
|
||||
for _, sub := range c.Commands() {
|
||||
if sub.Name() == "help" {
|
||||
continue
|
||||
}
|
||||
verbs = append(verbs, sub)
|
||||
}
|
||||
sort.Slice(
|
||||
verbs, func(i, j int) bool {
|
||||
return verbs[i].Name() < verbs[j].Name()
|
||||
},
|
||||
)
|
||||
|
||||
for _, verb := range verbs {
|
||||
refPath := filepath.Join(refDir, skill+"-"+verb.Name()+".md")
|
||||
if err := writeReference(refPath, c, verb); err != nil {
|
||||
log.Fatalf("write reference %s: %v", refPath, err)
|
||||
}
|
||||
}
|
||||
|
||||
skillPath := filepath.Join(dir, "SKILL.md")
|
||||
if err := writeSkill(skillPath, c, verbs, kebabSkill); err != nil {
|
||||
log.Fatalf("write skill %s: %v", skillPath, err)
|
||||
}
|
||||
|
||||
fmt.Printf("Generated skill: %s (%d verbs)\n", skill, len(verbs))
|
||||
verbs = append(verbs, verbEntry{name: sub.Name(), short: sub.Short})
|
||||
}
|
||||
sort.Slice(verbs, func(i, j int) bool {
|
||||
return verbs[i].name < verbs[j].name
|
||||
})
|
||||
return resourceEntry{
|
||||
name: name,
|
||||
kebab: camelToKebab(name),
|
||||
human: camelToWords(name),
|
||||
short: c.Short,
|
||||
long: c.Long,
|
||||
verbs: verbs,
|
||||
}
|
||||
}
|
||||
|
||||
func writeSetup(path string) error {
|
||||
return os.WriteFile(path, []byte(setupContent), 0o644)
|
||||
// groupByCategory groups resources into categories ordered by categoryOrder,
|
||||
// with "Other" appended at the end for any unmapped resources.
|
||||
func groupByCategory(resources []resourceEntry) []categoryGroup {
|
||||
byCategory := make(map[string][]resourceEntry)
|
||||
for _, r := range resources {
|
||||
cat := resourceCategory(r.name)
|
||||
byCategory[cat] = append(byCategory[cat], r)
|
||||
}
|
||||
|
||||
var groups []categoryGroup
|
||||
for _, cat := range categoryOrder {
|
||||
if rs, ok := byCategory[cat]; ok {
|
||||
sort.Slice(rs, func(i, j int) bool {
|
||||
return rs[i].name < rs[j].name
|
||||
})
|
||||
groups = append(groups, categoryGroup{name: cat, resources: rs})
|
||||
delete(byCategory, cat)
|
||||
}
|
||||
}
|
||||
// Append "Other" for any remaining unmapped categories.
|
||||
if rs, ok := byCategory["Other"]; ok {
|
||||
sort.Slice(rs, func(i, j int) bool {
|
||||
return rs[i].name < rs[j].name
|
||||
})
|
||||
groups = append(groups, categoryGroup{name: "Other", resources: rs})
|
||||
}
|
||||
return groups
|
||||
}
|
||||
|
||||
// writeReference generates a reference Markdown file for a single verb
|
||||
// command, including required-flag indicators and skill-oriented language.
|
||||
func writeReference(path string, parent, verb *cobra.Command) error {
|
||||
// ---------------------------------------------------------------------------
|
||||
// Unified description builder
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// buildUnifiedDescription constructs the skill description with high-frequency
|
||||
// triggers and a broad fallback. Intentionally concise — no exhaustive verb list.
|
||||
func buildUnifiedDescription(_ []categoryGroup) string {
|
||||
return "Use when working with YouTube — upload videos, search content, manage playlists and channels, post and moderate comments, handle subscriptions and memberships, add captions, set thumbnails, check analytics, or any YouTube Data API operation via the yutu CLI."
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Static content for SKILL.md sections
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
const workflowSummary = `- **Upload a video**: ` + "`yutu video insert --file video.mp4 --title \"...\" --privacy public`" + `, then optionally set thumbnail
|
||||
- **Update video metadata**: Fetch current with ` + "`yutu video list --id VIDEO_ID`" + `, then update changed fields
|
||||
- **Create playlist + add videos**: Create with ` + "`yutu playlist insert`" + `, find videos with ` + "`yutu search list --forMine`" + `, add with ` + "`yutu playlistItem insert`" + `
|
||||
- **Post a comment**: Get channel ID with ` + "`yutu channel list --mine`" + `, find video, then ` + "`yutu commentThread insert`" + `
|
||||
- **Channel analytics**: ` + "`yutu channel list --mine`" + ` + ` + "`yutu search list --forMine`" + ` + ` + "`yutu video list --id ...`" + `
|
||||
- **Competitor analysis**: ` + "`yutu channel list --forHandle @handle`" + ` + compare stats and top videos
|
||||
- **Delete content**: Always verify with a list command first, then delete — deletions are irreversible
|
||||
- **Subscribe/unsubscribe**: Check with ` + "`yutu subscription list --mine --forChannelId ...`" + ` before acting`
|
||||
|
||||
const growthTips = `- **Titles**: Use curiosity gaps and power words. Front-load keywords. Keep under 60 characters.
|
||||
- **Descriptions**: First 2 lines appear in search. Include keywords, timestamps, CTAs, and 3-5 hashtags.
|
||||
- **Tags**: Mix broad and long-tail keywords. First 2-3 tags carry the most weight.
|
||||
- **Thumbnails**: High contrast, 3-4 word text, expressive faces, consistent branding.
|
||||
- **Publishing**: Post when audience is active. Maintain consistent schedule.
|
||||
- **Engagement**: Pin a comment with a question. Reply within the first hour.`
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Unified SKILL.md writer
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// writeUnifiedSkill generates the single unified SKILL.md for the youtube skill.
|
||||
func writeUnifiedSkill(path string, groups []categoryGroup) error {
|
||||
var b strings.Builder
|
||||
|
||||
skill := parent.Name()
|
||||
verbName := verb.Name()
|
||||
humanSkill := camelToWords(skill)
|
||||
title := titleCase(humanSkill) + " " + titleCase(verbName)
|
||||
desc := buildUnifiedDescription(groups)
|
||||
|
||||
b.WriteString(fmt.Sprintf("# %s\n\n", title))
|
||||
|
||||
desc := rewriteToolPhrase(verb.Long)
|
||||
if desc != "" {
|
||||
b.WriteString(desc + "\n\n")
|
||||
}
|
||||
|
||||
b.WriteString("## Usage\n\n")
|
||||
b.WriteString(
|
||||
fmt.Sprintf(
|
||||
"```bash\nyutu %s %s [flags]\n```\n", skill, verbName,
|
||||
),
|
||||
)
|
||||
|
||||
requiredFlags := requiredFlagNames(verb)
|
||||
|
||||
type flagEntry struct {
|
||||
name string
|
||||
shorthand string
|
||||
usage string
|
||||
required bool
|
||||
}
|
||||
var flags []flagEntry
|
||||
verb.Flags().VisitAll(
|
||||
func(f *pflag.Flag) {
|
||||
if f.Name == "help" {
|
||||
return
|
||||
}
|
||||
usage := f.Usage
|
||||
if f.DefValue != "" && f.DefValue != "false" && f.DefValue != "0" && f.DefValue != "[]" {
|
||||
usage += fmt.Sprintf(" (default %s)", formatDefault(f))
|
||||
}
|
||||
flags = append(
|
||||
flags, flagEntry{
|
||||
name: f.Name,
|
||||
shorthand: f.Shorthand,
|
||||
usage: escPipe(usage),
|
||||
required: requiredFlags[f.Name],
|
||||
},
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
if len(flags) > 0 {
|
||||
b.WriteString("\n## Flags\n\n")
|
||||
b.WriteString("| Flag | Shorthand | Required | Description |\n")
|
||||
b.WriteString("|------|-----------|----------|-------------|\n")
|
||||
for _, f := range flags {
|
||||
sh := ""
|
||||
if f.shorthand != "" {
|
||||
sh = "`-" + f.shorthand + "`"
|
||||
}
|
||||
req := ""
|
||||
if f.required {
|
||||
req = "Yes"
|
||||
}
|
||||
b.WriteString(
|
||||
fmt.Sprintf(
|
||||
"| `--%-s` | %s | %s | %s |\n", f.name, sh, req, f.usage,
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
if verb.Example != "" {
|
||||
b.WriteString("\n## Examples\n\n```bash\n")
|
||||
b.WriteString(strings.TrimSpace(verb.Example) + "\n")
|
||||
b.WriteString("```\n")
|
||||
}
|
||||
|
||||
return os.WriteFile(path, []byte(b.String()), 0o644)
|
||||
}
|
||||
|
||||
// writeSkill generates the SKILL.md overview file for a resource command
|
||||
// following skill-creator best practices: "pushy" description, overview
|
||||
// paragraph, progressive-disclosure table, and quick-start snippet.
|
||||
func writeSkill(
|
||||
path string, c *cobra.Command, verbs []*cobra.Command, kebabSkill string,
|
||||
) error {
|
||||
var b strings.Builder
|
||||
|
||||
skill := c.Name()
|
||||
humanSkill := camelToWords(skill)
|
||||
|
||||
desc := buildDescription(c, verbs, humanSkill)
|
||||
skillName := "youtube-" + kebabSkill
|
||||
|
||||
_, _ = fmt.Fprintf(
|
||||
&b, `---
|
||||
name: %s
|
||||
_, _ = fmt.Fprintf(&b, `---
|
||||
name: youtube
|
||||
description: "%s"
|
||||
metadata:
|
||||
openclaw:
|
||||
@@ -226,153 +224,106 @@ metadata:
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
`, skillName, strings.ReplaceAll(desc, `"`, `\"`),
|
||||
)
|
||||
`, strings.ReplaceAll(desc, `"`, `\"`))
|
||||
|
||||
_, _ = fmt.Fprintf(&b, "# YouTube %s\n\n", titleCase(humanSkill))
|
||||
|
||||
overview := rewriteToolPhrase(c.Long)
|
||||
if overview == "" {
|
||||
overview = c.Short
|
||||
}
|
||||
b.WriteString(overview + "\n\n")
|
||||
b.WriteString("# YouTube\n\n")
|
||||
b.WriteString("Manage YouTube resources using the yutu CLI — videos, playlists, comments, channels, captions, subscriptions, and more.\n\n")
|
||||
|
||||
b.WriteString("## Before You Begin\n\n")
|
||||
b.WriteString("yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. ")
|
||||
b.WriteString("If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.\n\n")
|
||||
|
||||
b.WriteString("## Operations\n\n")
|
||||
b.WriteString("Read the linked reference for full flag details and examples.\n\n")
|
||||
b.WriteString("Run `yutu <resource> <verb> -h` for full flag details and examples.\n\n")
|
||||
|
||||
if len(verbs) > 0 {
|
||||
b.WriteString("| Operation | Description | Reference |\n")
|
||||
b.WriteString("|-----------|-------------|----------|\n")
|
||||
for _, verb := range verbs {
|
||||
refFile := fmt.Sprintf("references/%s-%s.md", skill, verb.Name())
|
||||
_, _ = fmt.Fprintf(
|
||||
&b, "| %s | %s | [details](%s) |\n",
|
||||
verb.Name(), escPipe(verb.Short), refFile,
|
||||
)
|
||||
for _, g := range groups {
|
||||
_, _ = fmt.Fprintf(&b, "### %s\n\n", g.name)
|
||||
b.WriteString("| Resource | Operation | Description |\n")
|
||||
b.WriteString("|----------|-----------|-------------|\n")
|
||||
for _, r := range g.resources {
|
||||
for _, v := range r.verbs {
|
||||
_, _ = fmt.Fprintf(&b, "| %s | %s | %s |\n", r.human, v.name, escPipe(v.short))
|
||||
}
|
||||
}
|
||||
b.WriteString("\n")
|
||||
}
|
||||
|
||||
_, _ = fmt.Fprintf(
|
||||
&b, "## Quick Start\n\n```bash\n# Show all %s commands\nyutu %s --help\n",
|
||||
humanSkill, skill,
|
||||
)
|
||||
for _, verb := range verbs {
|
||||
if verb.Name() == "list" {
|
||||
_, _ = fmt.Fprintf(&b, "\n# List %s\nyutu %s list\n", humanSkill, skill)
|
||||
break
|
||||
}
|
||||
}
|
||||
b.WriteString("```\n")
|
||||
b.WriteString("## Common Workflows\n\n")
|
||||
b.WriteString("See [references/workflows.md](references/workflows.md) for detailed walkthroughs.\n\n")
|
||||
b.WriteString(workflowSummary + "\n\n")
|
||||
|
||||
b.WriteString("## YouTube Growth Tips\n\n")
|
||||
b.WriteString("See [references/seo-guide.md](references/seo-guide.md) for the full guide.\n\n")
|
||||
b.WriteString(growthTips + "\n")
|
||||
|
||||
return os.WriteFile(path, []byte(b.String()), 0o644)
|
||||
}
|
||||
|
||||
// buildDescription constructs a "pushy" skill description that encourages
|
||||
// broad triggering, even when the user doesn't explicitly name the resource.
|
||||
func buildDescription(
|
||||
c *cobra.Command, verbs []*cobra.Command, humanSkill string,
|
||||
) string {
|
||||
base := rewriteToolPhrase(c.Long)
|
||||
if base == "" {
|
||||
base = c.Short
|
||||
// ---------------------------------------------------------------------------
|
||||
// Setup writer
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
func writeSetup(path string) error {
|
||||
return os.WriteFile(path, []byte(setupContent), 0o644)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// main
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
func main() {
|
||||
out := flag.String("out", "./skills", "output directory for generated skills")
|
||||
flag.Parse()
|
||||
|
||||
root := cmd.RootCmd
|
||||
root.InitDefaultHelpCmd()
|
||||
|
||||
dir := filepath.Join(*out, "youtube")
|
||||
refDir := filepath.Join(dir, "references")
|
||||
|
||||
if err := os.MkdirAll(refDir, 0o755); err != nil {
|
||||
log.Fatalf("mkdir %s: %v", refDir, err)
|
||||
}
|
||||
|
||||
var verbNames []string
|
||||
for _, v := range verbs {
|
||||
verbNames = append(verbNames, v.Name())
|
||||
setupPath := filepath.Join(refDir, "setup.md")
|
||||
if err := writeSetup(setupPath); err != nil {
|
||||
log.Fatalf("write setup %s: %v", setupPath, err)
|
||||
}
|
||||
|
||||
actions := "manage"
|
||||
if len(verbNames) > 0 {
|
||||
if len(verbNames) == 1 {
|
||||
actions = verbNames[0]
|
||||
} else if len(verbNames) == 2 {
|
||||
actions = verbNames[0] + " and " + verbNames[1]
|
||||
} else {
|
||||
actions = strings.Join(
|
||||
verbNames[:len(verbNames)-1], ", ",
|
||||
) + ", and " + verbNames[len(verbNames)-1]
|
||||
var resources []resourceEntry
|
||||
for _, c := range root.Commands() {
|
||||
if !strings.HasPrefix(c.Short, "Manage") {
|
||||
continue
|
||||
}
|
||||
resources = append(resources, collectResource(c))
|
||||
}
|
||||
|
||||
groups := groupByCategory(resources)
|
||||
|
||||
skillPath := filepath.Join(dir, "SKILL.md")
|
||||
if err := writeUnifiedSkill(skillPath, groups); err != nil {
|
||||
log.Fatalf("write skill %s: %v", skillPath, err)
|
||||
}
|
||||
|
||||
totalVerbs := 0
|
||||
for _, g := range groups {
|
||||
for _, r := range g.resources {
|
||||
totalVerbs += len(r.verbs)
|
||||
}
|
||||
}
|
||||
|
||||
base += fmt.Sprintf(
|
||||
" Useful when working with YouTube %s — provides commands to %s %s via the yutu CLI. Includes setup and installation instructions for first-time users.",
|
||||
humanSkill, actions, humanSkill,
|
||||
)
|
||||
|
||||
base += " Triggers: " + naturalTriggerPhrases(humanSkill, verbs)
|
||||
|
||||
return base
|
||||
fmt.Printf("Generated unified youtube skill: %d resources, %d verbs, %d categories\n",
|
||||
len(resources), totalVerbs, len(groups))
|
||||
}
|
||||
|
||||
// naturalTriggerPhrases generates trigger phrases that feel like natural user
|
||||
// requests rather than mechanical "verb + resource" pairs.
|
||||
func naturalTriggerPhrases(humanSkill string, verbs []*cobra.Command) string {
|
||||
var phrases []string
|
||||
for _, v := range verbs {
|
||||
short := strings.ToLower(v.Short)
|
||||
name := v.Name()
|
||||
|
||||
phrases = append(phrases, short)
|
||||
phrases = append(phrases, name+" "+humanSkill)
|
||||
phrases = append(phrases, name+" my "+humanSkill)
|
||||
}
|
||||
return strings.Join(phrases, ", ")
|
||||
}
|
||||
|
||||
// requiredFlagNames returns the set of flag names marked as required on cmd.
|
||||
func requiredFlagNames(cmd *cobra.Command) map[string]bool {
|
||||
required := make(map[string]bool)
|
||||
cmd.Flags().VisitAll(
|
||||
func(f *pflag.Flag) {
|
||||
if ann := f.Annotations; ann != nil {
|
||||
if _, ok := ann[cobra.BashCompOneRequiredFlag]; ok {
|
||||
required[f.Name] = true
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
return required
|
||||
}
|
||||
|
||||
// formatDefault returns a display-friendly default value for a flag.
|
||||
func formatDefault(f *pflag.Flag) string {
|
||||
v := f.DefValue
|
||||
if f.Value.Type() == "string" && v != "" {
|
||||
return fmt.Sprintf("%q", v)
|
||||
}
|
||||
return v
|
||||
}
|
||||
// ---------------------------------------------------------------------------
|
||||
// String utilities
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// escPipe escapes pipe characters for markdown table cells.
|
||||
func escPipe(s string) string {
|
||||
return strings.ReplaceAll(s, "|", "\\|")
|
||||
}
|
||||
|
||||
// titleCase capitalises the first letter of each word in s.
|
||||
func titleCase(s string) string {
|
||||
words := strings.Fields(s)
|
||||
for i, w := range words {
|
||||
if w != "" {
|
||||
words[i] = strings.ToUpper(w[:1]) + w[1:]
|
||||
}
|
||||
}
|
||||
return strings.Join(words, " ")
|
||||
}
|
||||
|
||||
// rewriteToolPhrase replaces "Use this tool" phrasing with skill-oriented
|
||||
// language so the text reads naturally inside a skill context.
|
||||
func rewriteToolPhrase(s string) string {
|
||||
s = strings.Replace(s, "Use this tool to", "Use this skill to", 1)
|
||||
s = strings.Replace(s, "Use this tool", "Use this skill", 1)
|
||||
return strings.TrimSpace(s)
|
||||
}
|
||||
|
||||
// camelToWords splits a camelCase string into lowercase space-separated words.
|
||||
func camelToWords(s string) string {
|
||||
return strings.Join(camelSplit(s), " ")
|
||||
|
||||
@@ -0,0 +1,284 @@
|
||||
// Copyright 2026 eat-pray-ai & OpenWaygate
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestResourceCategory(t *testing.T) {
|
||||
expected := map[string]string{
|
||||
"video": "Content",
|
||||
"caption": "Content",
|
||||
"thumbnail": "Content",
|
||||
"watermark": "Content",
|
||||
"playlist": "Organization",
|
||||
"playlistItem": "Organization",
|
||||
"playlistImage": "Organization",
|
||||
"comment": "Community",
|
||||
"commentThread": "Community",
|
||||
"subscription": "Community",
|
||||
"member": "Community",
|
||||
"membershipsLevel": "Community",
|
||||
"superChatEvent": "Community",
|
||||
"channel": "Channel",
|
||||
"channelBanner": "Channel",
|
||||
"channelSection": "Channel",
|
||||
"search": "Discovery",
|
||||
"activity": "Discovery",
|
||||
"videoCategory": "Metadata",
|
||||
"videoAbuseReportReason": "Metadata",
|
||||
"i18nLanguage": "Metadata",
|
||||
"i18nRegion": "Metadata",
|
||||
}
|
||||
|
||||
for resource, wantCategory := range expected {
|
||||
got := resourceCategory(resource)
|
||||
if got != wantCategory {
|
||||
t.Errorf("resourceCategory(%q) = %q, want %q", resource, got, wantCategory)
|
||||
}
|
||||
}
|
||||
|
||||
// Unknown resource should return "Other".
|
||||
if got := resourceCategory("unknownResource"); got != "Other" {
|
||||
t.Errorf("resourceCategory(%q) = %q, want %q", "unknownResource", got, "Other")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGroupByCategory(t *testing.T) {
|
||||
resources := []resourceEntry{
|
||||
{name: "video", verbs: []verbEntry{{name: "list", short: "List videos"}}},
|
||||
{name: "playlist", verbs: []verbEntry{{name: "insert", short: "Create a playlist"}}},
|
||||
{name: "comment", verbs: []verbEntry{{name: "list", short: "List comments"}}},
|
||||
{name: "channel", verbs: []verbEntry{{name: "list", short: "List channels"}}},
|
||||
{name: "search", verbs: []verbEntry{{name: "list", short: "Search"}}},
|
||||
{name: "videoCategory", verbs: []verbEntry{{name: "list", short: "List categories"}}},
|
||||
{name: "caption", verbs: []verbEntry{{name: "list", short: "List captions"}}},
|
||||
}
|
||||
|
||||
groups := groupByCategory(resources)
|
||||
|
||||
// Should follow categoryOrder: Content, Organization, Community, Channel, Discovery, Metadata.
|
||||
wantOrder := []string{"Content", "Organization", "Community", "Channel", "Discovery", "Metadata"}
|
||||
if len(groups) != len(wantOrder) {
|
||||
t.Fatalf("got %d groups, want %d", len(groups), len(wantOrder))
|
||||
}
|
||||
for i, g := range groups {
|
||||
if g.name != wantOrder[i] {
|
||||
t.Errorf("group[%d].name = %q, want %q", i, g.name, wantOrder[i])
|
||||
}
|
||||
}
|
||||
|
||||
// Content should have video and caption (sorted).
|
||||
contentGroup := groups[0]
|
||||
if len(contentGroup.resources) != 2 {
|
||||
t.Fatalf("Content group has %d resources, want 2", len(contentGroup.resources))
|
||||
}
|
||||
if contentGroup.resources[0].name != "caption" {
|
||||
t.Errorf("Content[0] = %q, want %q", contentGroup.resources[0].name, "caption")
|
||||
}
|
||||
if contentGroup.resources[1].name != "video" {
|
||||
t.Errorf("Content[1] = %q, want %q", contentGroup.resources[1].name, "video")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGroupByCategoryWithOther(t *testing.T) {
|
||||
resources := []resourceEntry{
|
||||
{name: "video", verbs: []verbEntry{{name: "list", short: "List videos"}}},
|
||||
{name: "unknownThing", verbs: []verbEntry{{name: "list", short: "List unknowns"}}},
|
||||
}
|
||||
|
||||
groups := groupByCategory(resources)
|
||||
|
||||
// Should have Content + Other.
|
||||
if len(groups) != 2 {
|
||||
t.Fatalf("got %d groups, want 2", len(groups))
|
||||
}
|
||||
if groups[0].name != "Content" {
|
||||
t.Errorf("groups[0].name = %q, want %q", groups[0].name, "Content")
|
||||
}
|
||||
if groups[1].name != "Other" {
|
||||
t.Errorf("groups[1].name = %q, want %q", groups[1].name, "Other")
|
||||
}
|
||||
if groups[1].resources[0].name != "unknownThing" {
|
||||
t.Errorf("Other[0] = %q, want %q", groups[1].resources[0].name, "unknownThing")
|
||||
}
|
||||
}
|
||||
|
||||
func TestBuildUnifiedDescription(t *testing.T) {
|
||||
groups := []categoryGroup{
|
||||
{
|
||||
name: "Content",
|
||||
resources: []resourceEntry{
|
||||
{name: "video", human: "video", verbs: []verbEntry{
|
||||
{name: "list", short: "List videos"},
|
||||
{name: "insert", short: "Upload a video"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Community",
|
||||
resources: []resourceEntry{
|
||||
{name: "comment", human: "comment", verbs: []verbEntry{
|
||||
{name: "list", short: "List comments"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
desc := buildUnifiedDescription(groups)
|
||||
|
||||
// Should start with the broad fallback.
|
||||
if !strings.HasPrefix(desc, "Use when working with YouTube") {
|
||||
t.Error("description should start with broad fallback")
|
||||
}
|
||||
|
||||
// Should contain key topics.
|
||||
for _, phrase := range []string{
|
||||
"upload videos",
|
||||
"search content",
|
||||
"manage playlists",
|
||||
"captions",
|
||||
"thumbnails",
|
||||
"analytics",
|
||||
"YouTube Data API",
|
||||
} {
|
||||
if !strings.Contains(desc, phrase) {
|
||||
t.Errorf("description missing phrase %q", phrase)
|
||||
}
|
||||
}
|
||||
|
||||
// Should be concise — no duplicated trigger list.
|
||||
if strings.Contains(desc, "Triggers:") {
|
||||
t.Error("description should not have a separate Triggers section")
|
||||
}
|
||||
}
|
||||
|
||||
func TestWriteUnifiedSkill(t *testing.T) {
|
||||
groups := []categoryGroup{
|
||||
{
|
||||
name: "Content",
|
||||
resources: []resourceEntry{
|
||||
{name: "video", human: "video", verbs: []verbEntry{
|
||||
{name: "insert", short: "Upload a video"},
|
||||
{name: "list", short: "List videos"},
|
||||
}},
|
||||
{name: "caption", human: "caption", verbs: []verbEntry{
|
||||
{name: "list", short: "List captions"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Organization",
|
||||
resources: []resourceEntry{
|
||||
{name: "playlist", human: "playlist", verbs: []verbEntry{
|
||||
{name: "insert", short: "Create a playlist"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Community",
|
||||
resources: []resourceEntry{
|
||||
{name: "comment", human: "comment", verbs: []verbEntry{
|
||||
{name: "list", short: "List comments"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Channel",
|
||||
resources: []resourceEntry{
|
||||
{name: "channel", human: "channel", verbs: []verbEntry{
|
||||
{name: "list", short: "List channels"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Discovery",
|
||||
resources: []resourceEntry{
|
||||
{name: "search", human: "search", verbs: []verbEntry{
|
||||
{name: "list", short: "Search YouTube"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Metadata",
|
||||
resources: []resourceEntry{
|
||||
{name: "videoCategory", human: "video category", verbs: []verbEntry{
|
||||
{name: "list", short: "List video categories"},
|
||||
}},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
tmpDir := t.TempDir()
|
||||
path := filepath.Join(tmpDir, "SKILL.md")
|
||||
|
||||
if err := writeUnifiedSkill(path, groups); err != nil {
|
||||
t.Fatalf("writeUnifiedSkill: %v", err)
|
||||
}
|
||||
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
t.Fatalf("read SKILL.md: %v", err)
|
||||
}
|
||||
content := string(data)
|
||||
|
||||
// Frontmatter has name: youtube.
|
||||
if !strings.Contains(content, "name: youtube") {
|
||||
t.Error("SKILL.md missing 'name: youtube' in frontmatter")
|
||||
}
|
||||
|
||||
// All 6 category headers present.
|
||||
for _, cat := range []string{"Content", "Organization", "Community", "Channel", "Discovery", "Metadata"} {
|
||||
if !strings.Contains(content, "### "+cat) {
|
||||
t.Errorf("SKILL.md missing category header ### %s", cat)
|
||||
}
|
||||
}
|
||||
|
||||
// Operations table rows present.
|
||||
for _, row := range []string{
|
||||
"| video | insert | Upload a video |",
|
||||
"| video | list | List videos |",
|
||||
"| caption | list | List captions |",
|
||||
"| playlist | insert | Create a playlist |",
|
||||
"| comment | list | List comments |",
|
||||
"| channel | list | List channels |",
|
||||
"| search | list | Search YouTube |",
|
||||
"| video category | list | List video categories |",
|
||||
} {
|
||||
if !strings.Contains(content, row) {
|
||||
t.Errorf("SKILL.md missing table row %q", row)
|
||||
}
|
||||
}
|
||||
|
||||
// CLI help instruction present.
|
||||
if !strings.Contains(content, "Run `yutu <resource> <verb> -h` for full flag details and examples.") {
|
||||
t.Error("SKILL.md missing CLI help instruction")
|
||||
}
|
||||
|
||||
// Workflow section present.
|
||||
if !strings.Contains(content, "## Common Workflows") {
|
||||
t.Error("SKILL.md missing Common Workflows section")
|
||||
}
|
||||
if !strings.Contains(content, "references/workflows.md") {
|
||||
t.Error("SKILL.md missing workflows.md reference")
|
||||
}
|
||||
if !strings.Contains(content, "Upload a video") {
|
||||
t.Error("SKILL.md missing workflow summary content")
|
||||
}
|
||||
|
||||
// SEO/Growth Tips section present.
|
||||
if !strings.Contains(content, "## YouTube Growth Tips") {
|
||||
t.Error("SKILL.md missing YouTube Growth Tips section")
|
||||
}
|
||||
if !strings.Contains(content, "references/seo-guide.md") {
|
||||
t.Error("SKILL.md missing seo-guide.md reference")
|
||||
}
|
||||
if !strings.Contains(content, "curiosity gaps") {
|
||||
t.Error("SKILL.md missing growth tips content")
|
||||
}
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-activity
|
||||
description: "Manage activities on YouTube. Use this skill to list channel activities. Useful when working with YouTube activity — provides commands to list activity via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list activities, list activity, list my activity"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Activity
|
||||
|
||||
Manage activities on YouTube. Use this skill to list channel activities.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List activities | [details](references/activity-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all activity commands
|
||||
yutu activity --help
|
||||
|
||||
# List activity
|
||||
yutu activity list
|
||||
```
|
||||
@@ -1,34 +0,0 @@
|
||||
# Activity List
|
||||
|
||||
List activities. Use this skill to list activities such as uploads, likes, and favorites.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu activity list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | | ID of the channel |
|
||||
| `--home` | `-H` | | true\|false\|null (default true) |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--mine` | `-M` | | true\|false\|null (default true) |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet,contentDetails]) |
|
||||
| `--publishedAfter` | `-a` | | Filter on activities published after this date |
|
||||
| `--publishedBefore` | `-b` | | Filter on activities published before this date |
|
||||
| `--regionCode` | `-r` | | Display the content as seen by viewers in this country |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List my activities
|
||||
yutu activity list --mine
|
||||
# List activities by channel ID with limit
|
||||
yutu activity list --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --maxResults 10
|
||||
# List activities after a date in JSON format
|
||||
yutu activity list --publishedAfter 2024-01-01T00:00:00Z --output json
|
||||
```
|
||||
@@ -1,52 +0,0 @@
|
||||
---
|
||||
name: youtube-caption
|
||||
description: "Manage YouTube video captions. Use this skill to list, insert, update, download, or delete video captions. Useful when working with YouTube caption — provides commands to delete, download, insert, list, and update caption via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete captions, delete caption, delete my caption, download a caption, download caption, download my caption, insert a caption, insert caption, insert my caption, list captions, list caption, list my caption, update a video caption, update caption, update my caption"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Caption
|
||||
|
||||
Manage YouTube video captions. Use this skill to list, insert, update, download, or delete video captions.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete captions | [details](references/caption-delete.md) |
|
||||
| download | Download a caption | [details](references/caption-download.md) |
|
||||
| insert | Insert a caption | [details](references/caption-insert.md) |
|
||||
| list | List captions | [details](references/caption-list.md) |
|
||||
| update | Update a video caption | [details](references/caption-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all caption commands
|
||||
yutu caption --help
|
||||
|
||||
# List caption
|
||||
yutu caption list
|
||||
```
|
||||
@@ -1,26 +0,0 @@
|
||||
# Caption Delete
|
||||
|
||||
Delete captions. Use this skill to delete captions of a video by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu caption delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the captions to delete |
|
||||
| `--onBehalfOf` | `-b` | | ID of the YouTube account that the content owner is acting on behalf of |
|
||||
| `--onBehalfOfContentOwner` | `-B` | | ID of the content owner, for YouTube content partners |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a caption by ID
|
||||
yutu caption delete --ids abc123
|
||||
# Delete multiple captions
|
||||
yutu caption delete --ids abc123,def456
|
||||
```
|
||||
@@ -1,31 +0,0 @@
|
||||
# Caption Download
|
||||
|
||||
Download a caption. Use this skill to download a caption from a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu caption download [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--file` | `-f` | Yes | Path to save the caption file |
|
||||
| `--id` | `-i` | Yes | ID of the caption to download |
|
||||
| `--onBehalfOf` | `-b` | | ID of the YouTube account that the content owner is acting on behalf of |
|
||||
| `--onBehalfOfContentOwner` | `-B` | | ID of the content owner, for YouTube content partners |
|
||||
| `--tfmt` | `-t` | | sbv\|srt\|vtt |
|
||||
| `--tlang` | `-l` | | Translate the captions into this language |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Download a caption as SRT
|
||||
yutu caption download --id abc123 --file subtitle.srt
|
||||
# Download a caption as VTT
|
||||
yutu caption download --id abc123 --file subtitle.vtt --tfmt vtt
|
||||
# Download a caption translated to French
|
||||
yutu caption download --id abc123 --file subtitle.srt --tlang fr
|
||||
```
|
||||
@@ -1,39 +0,0 @@
|
||||
# Caption Insert
|
||||
|
||||
Insert a caption. Use this skill to insert a caption to a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu caption insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--audioTrackType` | `-a` | | unknown\|primary\|commentary\|descriptive (default "unknown") |
|
||||
| `--file` | `-f` | Yes | Path to save the caption file |
|
||||
| `--isAutoSynced` | `-A` | | Whether YouTube synchronized the caption track to the audio track in the video (default true) |
|
||||
| `--isCC` | `-C` | | Whether the track contains closed captions for the deaf and hard of hearing |
|
||||
| `--isDraft` | `-D` | | whether the caption track is a draft |
|
||||
| `--isEasyReader` | `-E` | | Whether caption track is formatted for 'easy reader' |
|
||||
| `--isLarge` | `-L` | | Whether the caption track uses large text for the vision-impaired |
|
||||
| `--language` | `-l` | | Language of the caption track |
|
||||
| `--name` | `-n` | | Name of the caption track |
|
||||
| `--onBehalfOf` | `-b` | | ID of the YouTube account that the content owner is acting on behalf of |
|
||||
| `--onBehalfOfContentOwner` | `-B` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--trackKind` | `-t` | | standard\|ASR\|forced (default "standard") |
|
||||
| `--videoId` | `-v` | Yes | ID of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Insert a caption to a video
|
||||
yutu caption insert --file subtitle.srt --videoId dQw4w9WgXcQ
|
||||
# Insert a caption with language and name
|
||||
yutu caption insert --file subtitle.srt --videoId dQw4w9WgXcQ --language en --name English
|
||||
# Insert a standard caption and publish immediately
|
||||
yutu caption insert --file subtitle.srt --videoId dQw4w9WgXcQ --trackKind standard --isDraft=false
|
||||
```
|
||||
@@ -1,31 +0,0 @@
|
||||
# Caption List
|
||||
|
||||
List captions. Use this skill to list captions of a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu caption list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | | IDs of the captions to list |
|
||||
| `--onBehalfOf` | `-b` | | ID of the YouTube account that the content owner is acting on behalf of |
|
||||
| `--onBehalfOfContentOwner` | `-B` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
| `--videoId` | `-v` | | ID of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List captions of a video
|
||||
yutu caption list --videoId dQw4w9WgXcQ
|
||||
# List captions in JSON format
|
||||
yutu caption list --videoId dQw4w9WgXcQ --output json
|
||||
# List specific captions by IDs
|
||||
yutu caption list --ids abc123,def456 --videoId dQw4w9WgXcQ
|
||||
```
|
||||
@@ -1,39 +0,0 @@
|
||||
# Caption Update
|
||||
|
||||
Update a video caption. Use this skill to update a video caption.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu caption update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--audioTrackType` | `-a` | | unknown\|primary\|commentary\|descriptive (default "unknown") |
|
||||
| `--file` | `-f` | | Path to save the caption file |
|
||||
| `--isAutoSynced` | `-A` | | Whether YouTube synchronized the caption track to the audio track in the video (default true) |
|
||||
| `--isCC` | `-C` | | Whether the track contains closed captions for the deaf and hard of hearing |
|
||||
| `--isDraft` | `-D` | | whether the caption track is a draft |
|
||||
| `--isEasyReader` | `-E` | | Whether caption track is formatted for 'easy reader' |
|
||||
| `--isLarge` | `-L` | | Whether the caption track uses large text for the vision-impaired |
|
||||
| `--language` | `-l` | | Language of the caption track |
|
||||
| `--name` | `-n` | | Name of the caption track |
|
||||
| `--onBehalfOf` | `-b` | | ID of the YouTube account that the content owner is acting on behalf of |
|
||||
| `--onBehalfOfContentOwner` | `-B` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--trackKind` | `-t` | | standard\|ASR\|forced (default "standard") |
|
||||
| `--videoId` | `-v` | Yes | ID of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Publish a draft caption
|
||||
yutu caption update --videoId dQw4w9WgXcQ --isDraft=false
|
||||
# Update caption language and name
|
||||
yutu caption update --videoId dQw4w9WgXcQ --language en --name English
|
||||
# Update caption file
|
||||
yutu caption update --videoId dQw4w9WgXcQ --file updated.srt
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
name: youtube-channel-banner
|
||||
description: "Manage YouTube channel banners. Use this skill to insert or upload channel banners. Useful when working with YouTube channel banner — provides commands to insert channel banner via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: insert a channel banner, insert channel banner, insert my channel banner"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Channel Banner
|
||||
|
||||
Manage YouTube channel banners. Use this skill to insert or upload channel banners.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| insert | Insert a channel banner | [details](references/channelBanner-insert.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all channel banner commands
|
||||
yutu channelBanner --help
|
||||
```
|
||||
@@ -1,28 +0,0 @@
|
||||
# Channel Banner Insert
|
||||
|
||||
Insert a channel banner. Use this skill to upload a channel banner.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu channelBanner insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | Yes | ID of the channel to insert the banner for |
|
||||
| `--file` | `-f` | Yes | Path to the banner image |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Upload a channel banner
|
||||
yutu channelBanner insert --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --file banner.jpg
|
||||
# Upload a channel banner with JSON output
|
||||
yutu channelBanner insert --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --file banner.png --output json
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,49 +0,0 @@
|
||||
---
|
||||
name: youtube-channel-section
|
||||
description: "Manage YouTube channel sections. Use this skill to list or delete channel sections. Useful when working with YouTube channel section — provides commands to delete and list channel section via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete channel sections, delete channel section, delete my channel section, list channel sections, list channel section, list my channel section"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Channel Section
|
||||
|
||||
Manage YouTube channel sections. Use this skill to list or delete channel sections.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete channel sections | [details](references/channelSection-delete.md) |
|
||||
| list | List channel sections | [details](references/channelSection-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all channel section commands
|
||||
yutu channelSection --help
|
||||
|
||||
# List channel section
|
||||
yutu channelSection list
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Channel Section Delete
|
||||
|
||||
Delete channel sections. Use this skill to delete channel sections by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu channelSection delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | Delete the channel sections with the given ids |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a channel section by ID
|
||||
yutu channelSection delete --ids abc123
|
||||
# Delete multiple channel sections
|
||||
yutu channelSection delete --ids abc123,def456
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
# Channel Section List
|
||||
|
||||
List channel sections. Use this skill to list channel sections.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu channelSection list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | | Return the ChannelSections owned by the specified channel id |
|
||||
| `--hl` | `-l` | | Return content in specified language |
|
||||
| `--ids` | `-i` | | Return the channel sections with the given ids |
|
||||
| `--mine` | `-M` | | Return the ChannelSections owned by the authenticated user |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List my channel sections
|
||||
yutu channelSection list --mine
|
||||
# List channel sections by channel ID
|
||||
yutu channelSection list --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw
|
||||
# List specific channel sections in JSON format
|
||||
yutu channelSection list --ids abc123,def456 --output json
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,49 +0,0 @@
|
||||
---
|
||||
name: youtube-channel
|
||||
description: "Manage YouTube channels. Use this skill to list or update channels. Useful when working with YouTube channel — provides commands to list and update channel via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list channel information, list channel, list my channel, update channel information, update channel, update my channel"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Channel
|
||||
|
||||
Manage YouTube channels. Use this skill to list or update channels.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List channel information | [details](references/channel-list.md) |
|
||||
| update | Update channel information | [details](references/channel-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all channel commands
|
||||
yutu channel --help
|
||||
|
||||
# List channel
|
||||
yutu channel list
|
||||
```
|
||||
@@ -1,39 +0,0 @@
|
||||
# Channel List
|
||||
|
||||
List channel information. Use this skill to list channel information.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu channel list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--categoryId` | `-g` | | Return the channels within the specified guide category id |
|
||||
| `--forHandle` | `-d` | | Return the channel associated with a YouTube handle |
|
||||
| `--forUsername` | `-u` | | Return the channel associated with a YouTube username |
|
||||
| `--hl` | `-l` | | Specifies the localization language of the metadata |
|
||||
| `--ids` | `-i` | | Return the channels with the specified Ids |
|
||||
| `--managedByMe` | `-E` | | Return the channels managed by the authenticated user |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--mine` | `-M` | | Return the ids of channels owned by the authenticated user (default true) |
|
||||
| `--mySubscribers` | `-S` | | Return the channels subscribed to the authenticated user |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet,status]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List my channel info
|
||||
yutu channel list --mine
|
||||
# List channel by handle
|
||||
yutu channel list --forHandle @GoogleDevelopers
|
||||
# List channel by ID in JSON format
|
||||
yutu channel list --ids UC_x5XG1OV2P6uZZ5FSM9Ttw --output json
|
||||
# List channels in table format
|
||||
yutu channel list --maxResults 10 --output table
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
# Channel Update
|
||||
|
||||
Update channel information. Use this skill to update channel information.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu channel update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--country` | `-c` | | Country of the channel |
|
||||
| `--customUrl` | `-u` | | Custom URL of the channel |
|
||||
| `--defaultLanguage` | `-l` | | The language of the channel's default title and description |
|
||||
| `--description` | `-d` | | Description of the channel |
|
||||
| `--id` | `-i` | Yes | ID of the channel to update |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--title` | `-t` | | Title of the channel |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update channel description
|
||||
yutu channel update --id UC_x5XG1OV2P6uZZ5FSM9Ttw --description 'New description'
|
||||
# Update channel title and country
|
||||
yutu channel update --id UC_x5XG1OV2P6uZZ5FSM9Ttw --title 'New Title' --country US
|
||||
# Update channel default language
|
||||
yutu channel update --id UC_x5XG1OV2P6uZZ5FSM9Ttw --defaultLanguage en
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,49 +0,0 @@
|
||||
---
|
||||
name: youtube-comment-thread
|
||||
description: "Manage YouTube comment threads. Use this skill to list or insert new top-level comment threads. Useful when working with YouTube comment thread — provides commands to insert and list comment thread via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: insert a new comment thread, insert comment thread, insert my comment thread, list comment threads, list comment thread, list my comment thread"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Comment Thread
|
||||
|
||||
Manage YouTube comment threads. Use this skill to list or insert new top-level comment threads.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| insert | Insert a new comment thread | [details](references/commentThread-insert.md) |
|
||||
| list | List comment threads | [details](references/commentThread-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all comment thread commands
|
||||
yutu commentThread --help
|
||||
|
||||
# List comment thread
|
||||
yutu commentThread list
|
||||
```
|
||||
@@ -1,28 +0,0 @@
|
||||
# Comment Thread Insert
|
||||
|
||||
Insert a new comment thread. Use this skill to insert a new comment thread.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu commentThread insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--authorChannelId` | `-a` | | Channel id of the comment author |
|
||||
| `--channelId` | `-c` | Yes | Channel id of the video owner |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--textOriginal` | `-t` | Yes | Text of the comment |
|
||||
| `--videoId` | `-v` | Yes | ID of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Post a comment on a video
|
||||
yutu commentThread insert --channelId UC_x5X --videoId dQw4w9WgXcQ --authorChannelId UA_x5X --textOriginal 'Great video!'
|
||||
# Post a comment with JSON output
|
||||
yutu commentThread insert --channelId UC_x5X --videoId dQw4w9WgXcQ --authorChannelId UA_x5X --textOriginal 'Nice work!' --output json
|
||||
```
|
||||
@@ -1,36 +0,0 @@
|
||||
# Comment Thread List
|
||||
|
||||
List comment threads. Use this skill to list comment threads.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu commentThread list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--allThreadsRelatedToChannelId` | `-a` | | Returns the comment threads of all videos of the channel and the channel comments as well |
|
||||
| `--channelId` | `-c` | | Channel id of the video owner |
|
||||
| `--ids` | `-i` | | IDs of the comment threads |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--moderationStatus` | `-m` | | published\|heldForReview\|likelySpam\|rejected (default "published") |
|
||||
| `--order` | `-O` | | orderUnspecified\|time\|relevance (default "time") |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
| `--searchTerms` | `-s` | | Search terms |
|
||||
| `--textFormat` | `-t` | | textFormatUnspecified\|html (default "html") |
|
||||
| `--videoId` | `-v` | | Returns the comment threads of the specified video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List comment threads on a video
|
||||
yutu commentThread list --videoId dQw4w9WgXcQ --maxResults 10
|
||||
# Search comment threads by terms
|
||||
yutu commentThread list --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --searchTerms 'hello'
|
||||
# List specific comment threads in JSON format
|
||||
yutu commentThread list --ids abc123,def456 --output json
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,53 +0,0 @@
|
||||
---
|
||||
name: youtube-comment
|
||||
description: "Manage YouTube comments. Use this skill to list, create, update, delete, mark as spam, or set moderation status for comments. Useful when working with YouTube comment — provides commands to delete, insert, list, markAsSpam, setModerationStatus, and update comment via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete comments, delete comment, delete my comment, create a comment, insert comment, insert my comment, list comments, list comment, list my comment, mark comments as spam, markAsSpam comment, markAsSpam my comment, set comment moderation status, setModerationStatus comment, setModerationStatus my comment, update a comment on a video, update comment, update my comment"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Comment
|
||||
|
||||
Manage YouTube comments. Use this skill to list, create, update, delete, mark as spam, or set moderation status for comments.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete comments | [details](references/comment-delete.md) |
|
||||
| insert | Create a comment | [details](references/comment-insert.md) |
|
||||
| list | List comments | [details](references/comment-list.md) |
|
||||
| markAsSpam | Mark comments as spam | [details](references/comment-markAsSpam.md) |
|
||||
| setModerationStatus | Set comment moderation status | [details](references/comment-setModerationStatus.md) |
|
||||
| update | Update a comment on a video | [details](references/comment-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all comment commands
|
||||
yutu comment --help
|
||||
|
||||
# List comment
|
||||
yutu comment list
|
||||
```
|
||||
@@ -1,24 +0,0 @@
|
||||
# Comment Delete
|
||||
|
||||
Delete comments. Use this skill to delete comments by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu comment delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of comments |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a comment by ID
|
||||
yutu comment delete --ids abc123
|
||||
# Delete multiple comments
|
||||
yutu comment delete --ids abc123,def456
|
||||
```
|
||||
@@ -1,30 +0,0 @@
|
||||
# Comment Insert
|
||||
|
||||
Create a comment. Use this skill to create a comment on a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu comment insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--authorChannelId` | `-a` | | Channel id of the comment author |
|
||||
| `--canRate` | `-R` | | Whether the viewer can rate the comment |
|
||||
| `--channelId` | `-c` | | Channel id of the video owner |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--parentId` | `-P` | Yes | ID of the parent comment |
|
||||
| `--textOriginal` | `-t` | Yes | Text of the comment |
|
||||
| `--videoId` | `-v` | | ID of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Reply to a comment
|
||||
yutu comment insert --channelId UC_x5X --videoId dQw4w9 --authorChannelId UA_x5X --parentId UgyXXX --textOriginal 'Hello'
|
||||
# Reply with rating enabled
|
||||
yutu comment insert --channelId UC_x5X --videoId dQw4w9 --authorChannelId UA_x5X --parentId UgyXXX --textOriginal 'Reply' --canRate
|
||||
```
|
||||
@@ -1,31 +0,0 @@
|
||||
# Comment List
|
||||
|
||||
List comments. Use this skill to list comments by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu comment list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | | IDs of comments |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parentId` | `-P` | | Returns replies to the specified comment |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
| `--textFormat` | `-t` | | textFormatUnspecified\|html\|plainText (default "html") |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List replies to a comment
|
||||
yutu comment list --parentId UgyXXXXXXXX --maxResults 10
|
||||
# List specific comments in JSON format
|
||||
yutu comment list --ids abc123,def456 --output json
|
||||
# List a comment in plain text
|
||||
yutu comment list --ids abc123 --textFormat plainText
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Comment MarkAsSpam
|
||||
|
||||
Mark comments as spam. Use this skill to mark comments as spam.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu comment markAsSpam [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of comments |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Mark a comment as spam
|
||||
yutu comment markAsSpam --ids abc123
|
||||
# Mark multiple comments as spam
|
||||
yutu comment markAsSpam --ids abc123,def456
|
||||
```
|
||||
@@ -1,29 +0,0 @@
|
||||
# Comment SetModerationStatus
|
||||
|
||||
Set comment moderation status. Use this skill to set comment moderation status.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu comment setModerationStatus [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--banAuthor` | `-A` | | If set to true the author of the comment gets added to the ban list |
|
||||
| `--ids` | `-i` | Yes | IDs of comments |
|
||||
| `--moderationStatus` | `-s` | Yes | heldForReview\|published\|rejected |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Publish a held comment
|
||||
yutu comment setModerationStatus --ids abc123 --moderationStatus published
|
||||
# Hold multiple comments for review
|
||||
yutu comment setModerationStatus --ids abc123,def456 --moderationStatus heldForReview
|
||||
# Reject a comment and ban author
|
||||
yutu comment setModerationStatus --ids abc123 --moderationStatus rejected --banAuthor
|
||||
```
|
||||
@@ -1,30 +0,0 @@
|
||||
# Comment Update
|
||||
|
||||
Update a comment on a video. Use this skill to update a comment on a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu comment update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--canRate` | `-R` | | Whether the viewer can rate the comment |
|
||||
| `--id` | `-i` | Yes | ID of the comment |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--textOriginal` | `-t` | | Text of the comment |
|
||||
| `--viewerRating` | `-r` | | none\|like\|dislike |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update comment text
|
||||
yutu comment update --id abc123 --textOriginal 'Updated comment'
|
||||
# Like a comment
|
||||
yutu comment update --id abc123 --viewerRating like
|
||||
# Update comment text with rating enabled
|
||||
yutu comment update --id abc123 --textOriginal 'New text' --canRate
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-i18n-language
|
||||
description: "Manage YouTube i18n languages. Use this skill to list available internationalization languages. Useful when working with YouTube i18n language — provides commands to list i18n language via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list i18n languages, list i18n language, list my i18n language"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube I18n Language
|
||||
|
||||
Manage YouTube i18n languages. Use this skill to list available internationalization languages.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List i18n languages | [details](references/i18nLanguage-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all i18n language commands
|
||||
yutu i18nLanguage --help
|
||||
|
||||
# List i18n language
|
||||
yutu i18nLanguage list
|
||||
```
|
||||
@@ -1,17 +0,0 @@
|
||||
# I18n Language List
|
||||
|
||||
List i18n languages. Use this skill to list available internationalization languages.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu i18nLanguage list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--hl` | `-l` | | Host language |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-i18n-region
|
||||
description: "Manage YouTube i18n regions. Use this skill to list available internationalization regions. Useful when working with YouTube i18n region — provides commands to list i18n region via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list i18n regions, list i18n region, list my i18n region"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube I18n Region
|
||||
|
||||
Manage YouTube i18n regions. Use this skill to list available internationalization regions.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List i18n regions | [details](references/i18nRegion-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all i18n region commands
|
||||
yutu i18nRegion --help
|
||||
|
||||
# List i18n region
|
||||
yutu i18nRegion list
|
||||
```
|
||||
@@ -1,17 +0,0 @@
|
||||
# I18n Region List
|
||||
|
||||
List i18n regions. Use this skill to list available internationalization regions.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu i18nRegion list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--hl` | `-l` | | Host language |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-member
|
||||
description: "Manage YouTube channel members. Use this skill to list information about channel members. Useful when working with YouTube member — provides commands to list member via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list channel members, list member, list my member"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Member
|
||||
|
||||
Manage YouTube channel members. Use this skill to list information about channel members.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List channel members | [details](references/member-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all member commands
|
||||
yutu member --help
|
||||
|
||||
# List member
|
||||
yutu member list
|
||||
```
|
||||
@@ -1,29 +0,0 @@
|
||||
# Member List
|
||||
|
||||
List channel members. Use this skill to list information about channel members.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu member list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--hasAccessToLevel` | `-a` | | Filter members in the results set to the ones that have access to a level |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--memberChannelId` | `-c` | | Comma separated list of channel Ids. Only data about members that are part of this list will be included |
|
||||
| `--mode` | `-m` | | listMembersModeUnknown, updates, or all_current (default "all_current") |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List all current members
|
||||
yutu member list --mode all_current
|
||||
# List members with limit
|
||||
yutu member list --maxResults 10
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-memberships-level
|
||||
description: "Manage YouTube memberships levels. Use this skill to list information about channel membership levels. Useful when working with YouTube memberships level — provides commands to list memberships level via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list memberships levels, list memberships level, list my memberships level"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Memberships Level
|
||||
|
||||
Manage YouTube memberships levels. Use this skill to list information about channel membership levels.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List memberships levels | [details](references/membershipsLevel-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all memberships level commands
|
||||
yutu membershipsLevel --help
|
||||
|
||||
# List memberships level
|
||||
yutu membershipsLevel list
|
||||
```
|
||||
@@ -1,23 +0,0 @@
|
||||
# Memberships Level List
|
||||
|
||||
List memberships levels. Use this skill to list information about channel membership levels.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu membershipsLevel list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List membership levels in JSON format
|
||||
yutu membershipsLevel list --output json
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,51 +0,0 @@
|
||||
---
|
||||
name: youtube-playlist-image
|
||||
description: "Manage YouTube playlist images. Use this skill to list, insert, update, or delete playlist images. Useful when working with YouTube playlist image — provides commands to delete, insert, list, and update playlist image via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete playlist images, delete playlist image, delete my playlist image, insert a playlist image, insert playlist image, insert my playlist image, list playlist images, list playlist image, list my playlist image, update a playlist image, update playlist image, update my playlist image"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Playlist Image
|
||||
|
||||
Manage YouTube playlist images. Use this skill to list, insert, update, or delete playlist images.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete playlist images | [details](references/playlistImage-delete.md) |
|
||||
| insert | Insert a playlist image | [details](references/playlistImage-insert.md) |
|
||||
| list | List playlist images | [details](references/playlistImage-list.md) |
|
||||
| update | Update a playlist image | [details](references/playlistImage-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all playlist image commands
|
||||
yutu playlistImage --help
|
||||
|
||||
# List playlist image
|
||||
yutu playlistImage list
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Playlist Image Delete
|
||||
|
||||
Delete playlist images. Use this skill to delete playlist images by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistImage delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the playlist images to delete |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a playlist image by ID
|
||||
yutu playlistImage delete --ids abc123
|
||||
# Delete multiple playlist images
|
||||
yutu playlistImage delete --ids abc123,def456
|
||||
```
|
||||
@@ -1,33 +0,0 @@
|
||||
# Playlist Image Insert
|
||||
|
||||
Insert a playlist image. Use this skill to insert a YouTube playlist image for a given playlist ID.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistImage insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--file` | `-f` | Yes | Path to the image file |
|
||||
| `--height` | `-H` | | The image height |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--playlistId` | `-p` | Yes | ID of the playlist this image is associated with |
|
||||
| `--type` | `-t` | | The image type (e.g., 'hero') |
|
||||
| `--width` | `-W` | | The image width |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Insert a playlist cover image
|
||||
yutu playlistImage insert --file cover.jpg --playlistId PLxxx
|
||||
# Insert a hero image
|
||||
yutu playlistImage insert --file cover.png --playlistId PLxxx --type hero
|
||||
# Insert an image with custom dimensions
|
||||
yutu playlistImage insert --file cover.jpg --playlistId PLxxx --width 2048 --height 1152
|
||||
```
|
||||
@@ -1,29 +0,0 @@
|
||||
# Playlist Image List
|
||||
|
||||
List playlist images. Use this skill to list playlist images.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistImage list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parent` | `-P` | | Return PlaylistImages for this playlist id |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,kind,snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List images of a playlist
|
||||
yutu playlistImage list --parent PLxxx
|
||||
# List playlist images with limit in JSON format
|
||||
yutu playlistImage list --parent PLxxx --maxResults 10 --output json
|
||||
```
|
||||
@@ -1,28 +0,0 @@
|
||||
# Playlist Image Update
|
||||
|
||||
Update a playlist image. Use this skill to update a playlist image.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistImage update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--height` | `-H` | | The image height |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--playlistId` | `-p` | Yes | ID of the playlist this image is associated with |
|
||||
| `--type` | `-t` | | The image type (e.g., 'hero') |
|
||||
| `--width` | `-W` | | The image width |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update a playlist image
|
||||
yutu playlistImage update --playlistId PLxxx --type hero --width 2048 --height 1152
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,51 +0,0 @@
|
||||
---
|
||||
name: youtube-playlist-item
|
||||
description: "Manage YouTube playlist items. Use this skill to list items in a playlist, add new items, update items, or remove items. Useful when working with YouTube playlist item — provides commands to delete, insert, list, and update playlist item via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete items from a playlist, delete playlist item, delete my playlist item, insert a playlist item into a playlist, insert playlist item, insert my playlist item, list playlist items, list playlist item, list my playlist item, update a playlist item, update playlist item, update my playlist item"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Playlist Item
|
||||
|
||||
Manage YouTube playlist items. Use this skill to list items in a playlist, add new items, update items, or remove items.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete items from a playlist | [details](references/playlistItem-delete.md) |
|
||||
| insert | Insert a playlist item into a playlist | [details](references/playlistItem-insert.md) |
|
||||
| list | List playlist items | [details](references/playlistItem-list.md) |
|
||||
| update | Update a playlist item | [details](references/playlistItem-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all playlist item commands
|
||||
yutu playlistItem --help
|
||||
|
||||
# List playlist item
|
||||
yutu playlistItem list
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Playlist Item Delete
|
||||
|
||||
Delete items from a playlist. Use this skill to delete items from a playlist by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistItem delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the playlist items to delete |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a playlist item by ID
|
||||
yutu playlistItem delete --ids abc123
|
||||
# Delete multiple playlist items
|
||||
yutu playlistItem delete --ids abc123,def456
|
||||
```
|
||||
@@ -1,34 +0,0 @@
|
||||
# Playlist Item Insert
|
||||
|
||||
Insert a playlist item into a playlist. Use this skill to insert a playlist item into a playlist.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistItem insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | Yes | ID that YouTube uses to uniquely identify the user that added the item to the playlist |
|
||||
| `--description` | `-d` | | Description of the playlist item |
|
||||
| `--kChannelId` | `-C` | | ID of the channel if kind is channel |
|
||||
| `--kPlaylistId` | `-Y` | | ID of the playlist if kind is playlist |
|
||||
| `--kVideoId` | `-V` | | ID of the video if kind is video |
|
||||
| `--kind` | `-k` | Yes | video\|channel\|playlist |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--playlistId` | `-y` | Yes | The id that YouTube uses to uniquely identify the playlist that the item is in |
|
||||
| `--privacy` | `-p` | | public\|private\|unlisted |
|
||||
| `--title` | `-t` | | Title of the playlist item |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Add a video to a playlist
|
||||
yutu playlistItem insert --kind video --playlistId PLxxx --channelId UC_x5X --kVideoId dQw4w9WgXcQ
|
||||
# Add a video to a playlist with privacy setting
|
||||
yutu playlistItem insert --kind video --playlistId PLxxx --channelId UC_x5X --kVideoId dQw4w9 --privacy public
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
# Playlist Item List
|
||||
|
||||
List playlist items. Use this skill to list playlist items.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistItem list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | | IDs of the playlist items to list |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet,status]) |
|
||||
| `--playlistId` | `-y` | | Return the playlist items within the given playlist |
|
||||
| `--videoId` | `-v` | | Return the playlist items associated with the given video id |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List items in a playlist
|
||||
yutu playlistItem list --playlistId PLxxx
|
||||
# List playlist items with limit in JSON format
|
||||
yutu playlistItem list --playlistId PLxxx --maxResults 20 --output json
|
||||
# List specific playlist items by IDs
|
||||
yutu playlistItem list --ids abc123,def456
|
||||
```
|
||||
@@ -1,31 +0,0 @@
|
||||
# Playlist Item Update
|
||||
|
||||
Update a playlist item. Use this skill to update a playlist item.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlistItem update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--description` | `-d` | | Description of the playlist item |
|
||||
| `--id` | `-i` | Yes | ID of the playlist item to update |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--privacy` | `-p` | | public\|private\|unlisted |
|
||||
| `--title` | `-t` | | Title of the playlist item |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update playlist item title
|
||||
yutu playlistItem update --id abc123 --title 'Updated Title'
|
||||
# Update playlist item description and privacy
|
||||
yutu playlistItem update --id abc123 --description 'New description' --privacy public
|
||||
# Update playlist item privacy with JSON output
|
||||
yutu playlistItem update --id abc123 --privacy private --output json
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,51 +0,0 @@
|
||||
---
|
||||
name: youtube-playlist
|
||||
description: "Manage YouTube playlists. Use this skill to list, create, update, or delete playlists. Useful when working with YouTube playlist — provides commands to delete, insert, list, and update playlist via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete playlists, delete playlist, delete my playlist, create a new playlist, insert playlist, insert my playlist, list playlist information, list playlist, list my playlist, update a playlist, update playlist, update my playlist"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Playlist
|
||||
|
||||
Manage YouTube playlists. Use this skill to list, create, update, or delete playlists.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete playlists | [details](references/playlist-delete.md) |
|
||||
| insert | Create a new playlist | [details](references/playlist-insert.md) |
|
||||
| list | List playlist information | [details](references/playlist-list.md) |
|
||||
| update | Update a playlist | [details](references/playlist-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all playlist commands
|
||||
yutu playlist --help
|
||||
|
||||
# List playlist
|
||||
yutu playlist list
|
||||
```
|
||||
@@ -1,25 +0,0 @@
|
||||
# Playlist Delete
|
||||
|
||||
Delete playlists. Use this skill to delete playlists by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlist delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the playlists to delete |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a playlist by ID
|
||||
yutu playlist delete --ids PLxxxx
|
||||
# Delete multiple playlists
|
||||
yutu playlist delete --ids PLxxx1,PLxxx2
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
# Playlist Insert
|
||||
|
||||
Create a new playlist. Use this skill to create a new playlist.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlist insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | Yes | Channel id of the playlist |
|
||||
| `--description` | `-d` | | Description of the playlist |
|
||||
| `--language` | `-l` | | Language of the playlist |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--privacy` | `-p` | Yes | public\|private\|unlisted |
|
||||
| `--tags` | `-a` | | Comma separated tags |
|
||||
| `--title` | `-t` | Yes | Title of the playlist |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Create a public playlist
|
||||
yutu playlist insert --title 'My Playlist' --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --privacy public
|
||||
# Create a private playlist with description
|
||||
yutu playlist insert --title 'Tutorial Series' --channelId UC_x5X --privacy private --description 'My tutorials'
|
||||
# Create an unlisted playlist with tags
|
||||
yutu playlist insert --title 'Music' --channelId UC_x5X --privacy unlisted --tags 'music,pop'
|
||||
```
|
||||
@@ -1,34 +0,0 @@
|
||||
# Playlist List
|
||||
|
||||
List playlist information. Use this skill to list playlist information.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlist list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | | Return the playlists owned by the specified channel id |
|
||||
| `--hl` | `-l` | | Return content in specified language |
|
||||
| `--ids` | `-i` | | Return the playlists with the given Ids for Stubby or Apiary |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--mine` | `-M` | | Return the playlists owned by the authenticated user (default true) |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet,status]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List my playlists
|
||||
yutu playlist list --mine
|
||||
# List playlists by channel ID with limit
|
||||
yutu playlist list --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --maxResults 10
|
||||
# List specific playlists in JSON format
|
||||
yutu playlist list --ids PLxxx1,PLxxx2 --output json
|
||||
```
|
||||
@@ -1,32 +0,0 @@
|
||||
# Playlist Update
|
||||
|
||||
Update a playlist. Use this skill to update a playlist.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu playlist update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--description` | `-d` | | Description of the playlist |
|
||||
| `--id` | `-i` | Yes | ID of the playlist to update |
|
||||
| `--language` | `-l` | | Language of the playlist |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--privacy` | `-p` | | public\|private\|unlisted |
|
||||
| `--tags` | `-a` | | Comma separated tags |
|
||||
| `--title` | `-t` | | Title of the playlist |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update playlist title
|
||||
yutu playlist update --id PLxxx --title 'Updated Title'
|
||||
# Update playlist description and privacy
|
||||
yutu playlist update --id PLxxx --description 'New description' --privacy public
|
||||
# Update playlist tags
|
||||
yutu playlist update --id PLxxx --tags 'music,pop,2024'
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-search
|
||||
description: "Manage YouTube search. Use this skill to search for videos, channels, playlists, and other resources. Useful when working with YouTube search — provides commands to list search via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: search resources, list search, list my search"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Search
|
||||
|
||||
Manage YouTube search. Use this skill to search for videos, channels, playlists, and other resources.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | Search resources | [details](references/search-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all search commands
|
||||
yutu search --help
|
||||
|
||||
# List search
|
||||
yutu search list
|
||||
```
|
||||
@@ -1,58 +0,0 @@
|
||||
# Search List
|
||||
|
||||
Search resources. Use this skill to search for videos, channels, playlists, and other resources.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu search list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | | | Filter on resources belonging to this channelId |
|
||||
| `--channelType` | | | channelTypeUnspecified\|any\|show (default "channelTypeUnspecified") |
|
||||
| `--eventType` | | | none\|upcoming\|live\|completed (default "none") |
|
||||
| `--forContentOwner` | | | Search owned by content owner |
|
||||
| `--forDeveloper` | | | Only retrieve videos uploaded using the project id of the authenticated user |
|
||||
| `--forMine` | | | Search for the private videos of the authenticated user |
|
||||
| `--location` | | | Filter on location of the video |
|
||||
| `--locationRadius` | | | Filter on distance from the location |
|
||||
| `--maxResults` | | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--onBehalfOfContentOwner` | | | ID of the content owner, for YouTube content partners |
|
||||
| `--order` | | | searchSortUnspecified, date, rating, viewCount, relevance, title, videoCount (default "relevance") |
|
||||
| `--output` | | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | | | Comma separated parts (default [id,snippet]) |
|
||||
| `--publishedAfter` | | | Filter on resources published after this date |
|
||||
| `--publishedBefore` | | | Filter on resources published before this date |
|
||||
| `--q` | | | Textual search terms to match |
|
||||
| `--regionCode` | | | Display the content as seen by viewers in this country |
|
||||
| `--relevanceLanguage` | | | Return results relevant to this language |
|
||||
| `--safeSearch` | | | safeSearchSettingUnspecified\|none\|moderate\|strict (default "moderate") |
|
||||
| `--topicId` | | | Restrict results to a particular topic |
|
||||
| `--types` | | | Restrict results to a particular set of resource types from One Platform |
|
||||
| `--videoCaption` | | | videoCaptionUnspecified\|any\|closedCaption\|none (default "any") |
|
||||
| `--videoCategoryId` | | | Filter on videos in a specific category |
|
||||
| `--videoDefinition` | | | Filter on the definition of the videos |
|
||||
| `--videoDimension` | | | any\|2d\|3d (default "any") |
|
||||
| `--videoDuration` | | | videoDurationUnspecified\|any\|short\|medium\|long (default "any") |
|
||||
| `--videoEmbeddable` | | | videoEmbeddableUnspecified\|any\|true |
|
||||
| `--videoLicense` | | | any\|youtube\|creativeCommon |
|
||||
| `--videoPaidProductPlacement` | | | videoPaidProductPlacementUnspecified\|any\|true |
|
||||
| `--videoSyndicated` | | | videoSyndicatedUnspecified\|any\|true |
|
||||
| `--videoType` | | | videoTypeUnspecified\|any\|movie\|episode |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Search for videos by keyword
|
||||
yutu search list --q 'golang tutorial' --maxResults 10
|
||||
# Search videos by duration in JSON format
|
||||
yutu search list --q 'music' --types video --videoDuration medium --output json
|
||||
# List latest videos from a channel
|
||||
yutu search list --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --order date --maxResults 5
|
||||
# Search for live streams
|
||||
yutu search list --q 'live coding' --eventType live --types video
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
name: youtube-subscription
|
||||
description: "Manage YouTube subscriptions. Use this skill to list subscriptions/subscribers, subscribe to channels, or unsubscribe. Useful when working with YouTube subscription — provides commands to delete, insert, and list subscription via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete subscriptions, delete subscription, delete my subscription, insert a new subscription, insert subscription, insert my subscription, list subscription information, list subscription, list my subscription"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Subscription
|
||||
|
||||
Manage YouTube subscriptions. Use this skill to list subscriptions/subscribers, subscribe to channels, or unsubscribe.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete subscriptions | [details](references/subscription-delete.md) |
|
||||
| insert | Insert a new subscription | [details](references/subscription-insert.md) |
|
||||
| list | List subscription information | [details](references/subscription-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all subscription commands
|
||||
yutu subscription --help
|
||||
|
||||
# List subscription
|
||||
yutu subscription list
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,24 +0,0 @@
|
||||
# Subscription Delete
|
||||
|
||||
Delete subscriptions. Use this skill to delete subscriptions by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu subscription delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the subscriptions to delete |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a subscription by ID
|
||||
yutu subscription delete --ids abc123
|
||||
# Delete multiple subscriptions
|
||||
yutu subscription delete --ids abc123,def456
|
||||
```
|
||||
@@ -1,28 +0,0 @@
|
||||
# Subscription Insert
|
||||
|
||||
Insert a new subscription. Use this skill to insert a new subscription.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu subscription insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | Yes | ID of the channel to be subscribed |
|
||||
| `--description` | `-d` | | Description of the subscription |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--subscriberChannelId` | `-s` | Yes | Subscriber's channel id |
|
||||
| `--title` | `-t` | | Title of the subscription |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Subscribe to a channel
|
||||
yutu subscription insert --subscriberChannelId UC_abc --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw
|
||||
# Subscribe with a title
|
||||
yutu subscription insert --subscriberChannelId UC_abc --channelId UC_x5X --title 'Google Developers'
|
||||
```
|
||||
@@ -1,39 +0,0 @@
|
||||
# Subscription List
|
||||
|
||||
List subscription information. Use this skill to list subscription information.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu subscription list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | | Return the subscriptions of the given channel owner |
|
||||
| `--forChannelId` | `-C` | | Return the subscriptions to the subset of these channels that the authenticated user is subscribed to |
|
||||
| `--ids` | `-i` | | Return the subscriptions with the given ids for Stubby or Apiary |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--mine` | `-M` | | Return the subscriptions of the authenticated user (default true) |
|
||||
| `--myRecentSubscribers` | `-R` | | true\|false\|null |
|
||||
| `--mySubscribers` | `-S` | | Return the subscribers of the given channel owner |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--order` | `-O` | | subscriptionOrderUnspecified\|relevance\|unread\|alphabetical (default "relevance") |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List my subscriptions
|
||||
yutu subscription list --mine
|
||||
# List subscriptions by channel ID with limit
|
||||
yutu subscription list --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --maxResults 10
|
||||
# List specific subscriptions in JSON format
|
||||
yutu subscription list --ids abc123,def456 --output json
|
||||
# List subscriptions for a channel alphabetically
|
||||
yutu subscription list --forChannelId UC_x5XG1OV2P6uZZ5FSM9Ttw --order alphabetical
|
||||
```
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-super-chat-event
|
||||
description: "Manage YouTube Super Chat events. Use this skill to list Super Chat events for a channel. Useful when working with YouTube super chat event — provides commands to list super chat event via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list super chat events, list super chat event, list my super chat event"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Super Chat Event
|
||||
|
||||
Manage YouTube Super Chat events. Use this skill to list Super Chat events for a channel.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List Super Chat events | [details](references/superChatEvent-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all super chat event commands
|
||||
yutu superChatEvent --help
|
||||
|
||||
# List super chat event
|
||||
yutu superChatEvent list
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,25 +0,0 @@
|
||||
# Super Chat Event List
|
||||
|
||||
List Super Chat events. Use this skill to list Super Chat events.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu superChatEvent list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--hl` | `-l` | | Return rendered funding amounts in specified language |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List Super Chat events
|
||||
yutu superChatEvent list --maxResults 10
|
||||
```
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
name: youtube-thumbnail
|
||||
description: "Manage YouTube video thumbnails. Use this skill to set custom thumbnails for videos. Useful when working with YouTube thumbnail — provides commands to set thumbnail via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: set a thumbnail for a video, set thumbnail, set my thumbnail"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Thumbnail
|
||||
|
||||
Manage YouTube video thumbnails. Use this skill to set custom thumbnails for videos.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| set | Set a thumbnail for a video | [details](references/thumbnail-set.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all thumbnail commands
|
||||
yutu thumbnail --help
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,26 +0,0 @@
|
||||
# Thumbnail Set
|
||||
|
||||
Set a thumbnail for a video. Use this skill to set a thumbnail for a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu thumbnail set [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--file` | `-f` | Yes | Path to the thumbnail file |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--videoId` | `-v` | Yes | ID of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Set a thumbnail for a video
|
||||
yutu thumbnail set --file image.jpg --videoId dQw4w9WgXcQ
|
||||
# Set a thumbnail with JSON output
|
||||
yutu thumbnail set --file image.png --videoId dQw4w9WgXcQ --output json
|
||||
```
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-video-abuse-report-reason
|
||||
description: "Manage YouTube video abuse report reasons. Use this skill to list available abuse report reasons. Useful when working with YouTube video abuse report reason — provides commands to list video abuse report reason via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list video abuse report reasons, list video abuse report reason, list my video abuse report reason"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Video Abuse Report Reason
|
||||
|
||||
Manage YouTube video abuse report reasons. Use this skill to list available abuse report reasons.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List video abuse report reasons | [details](references/videoAbuseReportReason-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all video abuse report reason commands
|
||||
yutu videoAbuseReportReason --help
|
||||
|
||||
# List video abuse report reason
|
||||
yutu videoAbuseReportReason list
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,24 +0,0 @@
|
||||
# Video Abuse Report Reason List
|
||||
|
||||
List video abuse report reasons. Use this skill to list available abuse report reasons.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu videoAbuseReportReason list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--hl` | `-l` | | Host language |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List video abuse report reasons
|
||||
yutu videoAbuseReportReason list --hl en
|
||||
```
|
||||
@@ -1,48 +0,0 @@
|
||||
---
|
||||
name: youtube-video-category
|
||||
description: "Manage YouTube video categories. Use this skill to list available video categories. Useful when working with YouTube video category — provides commands to list video category via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: list video categories, list video category, list my video category"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Video Category
|
||||
|
||||
Manage YouTube video categories. Use this skill to list available video categories.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| list | List video categories | [details](references/videoCategory-list.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all video category commands
|
||||
yutu videoCategory --help
|
||||
|
||||
# List video category
|
||||
yutu videoCategory list
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,19 +0,0 @@
|
||||
# Video Category List
|
||||
|
||||
List video categories. Use this skill to list available video categories.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu videoCategory list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--hl` | `-l` | | Host language |
|
||||
| `--ids` | `-i` | | IDs of the video categories |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet]) |
|
||||
| `--regionCode` | `-r` | | Region code (default "US") |
|
||||
@@ -1,54 +0,0 @@
|
||||
---
|
||||
name: youtube-video
|
||||
description: "Manage YouTube videos. Use this skill to list, upload, update, delete, get rating, or report videos. Useful when working with YouTube video — provides commands to delete, getRating, insert, list, rate, reportAbuse, and update video via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: delete videos, delete video, delete my video, get video ratings, getRating video, getRating my video, upload a video, insert video, insert my video, list video information, list video, list my video, rate a video, rate video, rate my video, report abuse on a video, reportAbuse video, reportAbuse my video, update a video, update video, update my video"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Video
|
||||
|
||||
Manage YouTube videos. Use this skill to list, upload, update, delete, get rating, or report videos.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| delete | Delete videos | [details](references/video-delete.md) |
|
||||
| getRating | Get video ratings | [details](references/video-getRating.md) |
|
||||
| insert | Upload a video | [details](references/video-insert.md) |
|
||||
| list | List video information | [details](references/video-list.md) |
|
||||
| rate | Rate a video | [details](references/video-rate.md) |
|
||||
| reportAbuse | Report abuse on a video | [details](references/video-reportAbuse.md) |
|
||||
| update | Update a video | [details](references/video-update.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all video commands
|
||||
yutu video --help
|
||||
|
||||
# List video
|
||||
yutu video list
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,24 +0,0 @@
|
||||
# Video Delete
|
||||
|
||||
Delete videos. Use this skill to delete videos by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video delete [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the videos to delete |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Delete a video by ID
|
||||
yutu video delete --ids dQw4w9WgXcQ
|
||||
# Delete multiple videos
|
||||
yutu video delete --ids dQw4w9WgXcQ,abc123
|
||||
```
|
||||
@@ -1,26 +0,0 @@
|
||||
# Video GetRating
|
||||
|
||||
Get video ratings. Use this skill to get video ratings by IDs.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video getRating [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the videos to get the rating for |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|table |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Get rating of a video
|
||||
yutu video getRating --ids dQw4w9WgXcQ
|
||||
# Get ratings of multiple videos in JSON format
|
||||
yutu video getRating --ids dQw4w9WgXcQ,abc123 --output json
|
||||
```
|
||||
@@ -1,46 +0,0 @@
|
||||
# Video Insert
|
||||
|
||||
Upload a video. Use this skill to upload a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video insert [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--autoLevels` | `-A` | | Should auto-levels be applied to the upload (default true) |
|
||||
| `--categoryId` | `-g` | Yes | Category of the video |
|
||||
| `--channelId` | `-c` | | Channel id of the video |
|
||||
| `--description` | `-d` | | Description of the video |
|
||||
| `--embeddable` | `-E` | | Whether the video is embeddable (default true) |
|
||||
| `--file` | `-f` | Yes | Path to the video file |
|
||||
| `--forKids` | `-K` | | Whether the video is for kids |
|
||||
| `--language` | `-l` | | Language of the video |
|
||||
| `--license` | `-L` | | youtube\|creativeCommon (default "youtube") |
|
||||
| `--notifySubscribers` | `-N` | | Notify the channel subscribers about the new video (default true) |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--onBehalfOfContentOwnerChannel` | `-B` | | YouTube channel ID linked to the content owner |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--playlistId` | `-y` | | Playlist id of the video |
|
||||
| `--privacy` | `-p` | Yes | public\|private\|unlisted |
|
||||
| `--publicStatsViewable` | `-P` | | Whether the extended video statistics can be viewed by everyone |
|
||||
| `--publishAt` | `-U` | | Datetime when the video is scheduled to publish |
|
||||
| `--stabilize` | `-S` | | Should stabilize be applied to the upload (default true) |
|
||||
| `--tags` | `-a` | | Comma separated tags |
|
||||
| `--thumbnail` | `-u` | | Path to the thumbnail file |
|
||||
| `--title` | `-t` | | Title of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Upload a public video
|
||||
yutu video insert --file video.mp4 --title 'My Video' --categoryId 22 --privacy public
|
||||
# Upload a private video with tags
|
||||
yutu video insert --file video.mp4 --title 'Tutorial' --categoryId 27 --privacy private --tags 'go,tutorial'
|
||||
# Upload an unlisted video with custom thumbnail
|
||||
yutu video insert --file video.mp4 --title 'Music Video' --categoryId 10 --privacy unlisted --thumbnail cover.jpg
|
||||
```
|
||||
@@ -1,40 +0,0 @@
|
||||
# Video List
|
||||
|
||||
List video information. Use this skill to list video information.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video list [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--chart` | `-c` | | chartUnspecified\|mostPopular |
|
||||
| `--hl` | `-l` | | Specifies the localization language |
|
||||
| `--ids` | `-i` | | Return videos with the given ids |
|
||||
| `--locale` | `-L` | | Locale of the video metadata to return |
|
||||
| `--maxHeight` | `-H` | | Max height of the embedded player in pixels |
|
||||
| `--maxResults` | `-n` | | The maximum number of items that should be returned, 0 for no limit (default 5) |
|
||||
| `--maxWidth` | `-W` | | Max width of the embedded player in pixels |
|
||||
| `--myRating` | `-R` | | Return videos liked/disliked by the authenticated user |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--output` | `-o` | | json\|yaml\|table (default "table") |
|
||||
| `--parts` | `-p` | | Comma separated parts (default [id,snippet,status,statistics]) |
|
||||
| `--regionCode` | `-r` | | Specific to the specified region |
|
||||
| `--videoCategoryId` | `-g` | | Category of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# List a video by ID
|
||||
yutu video list --ids IBju0NwjQRc
|
||||
# List multiple videos in JSON format
|
||||
yutu video list --ids IBju0NwjQRc,wZ9z3FUuNvQ --output json
|
||||
# List most popular videos by region
|
||||
yutu video list --chart mostPopular --regionCode US --maxResults 10
|
||||
# List my liked videos
|
||||
yutu video list --myRating like --output yaml
|
||||
```
|
||||
@@ -1,27 +0,0 @@
|
||||
# Video Rate
|
||||
|
||||
Rate a video. Use this skill to rate a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video rate [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--ids` | `-i` | Yes | IDs of the videos to rate |
|
||||
| `--rating` | `-r` | Yes | like\|dislike\|none |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Like a video
|
||||
yutu video rate --ids dQw4w9WgXcQ --rating like
|
||||
# Dislike multiple videos
|
||||
yutu video rate --ids dQw4w9WgXcQ,abc123 --rating dislike
|
||||
# Remove rating from a video
|
||||
yutu video rate --ids dQw4w9WgXcQ --rating none
|
||||
```
|
||||
@@ -1,31 +0,0 @@
|
||||
# Video ReportAbuse
|
||||
|
||||
Report abuse on a video. Use this skill to report abuse on a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video reportAbuse [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--comments` | `-c` | | Additional comments regarding the abuse report |
|
||||
| `--ids` | `-i` | Yes | IDs of the videos to report abuse on |
|
||||
| `--language` | `-l` | | Language that the content was viewed in |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
| `--reasonId` | `-r` | Yes | ID of the reason for reporting abuse |
|
||||
| `--secondaryReasonId` | `-s` | | ID of the secondary reason for reporting abuse |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Report abuse on a video
|
||||
yutu video reportAbuse --ids dQw4w9WgXcQ --reasonId V
|
||||
# Report abuse with secondary reason and language
|
||||
yutu video reportAbuse --ids dQw4w9WgXcQ --reasonId V --secondaryReasonId V1 --language en
|
||||
# Report abuse with comments
|
||||
yutu video reportAbuse --ids dQw4w9WgXcQ --reasonId N --comments 'Spam content'
|
||||
```
|
||||
@@ -1,37 +0,0 @@
|
||||
# Video Update
|
||||
|
||||
Update a video. Use this skill to update a video.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu video update [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--categoryId` | `-g` | | Category of the video |
|
||||
| `--description` | `-d` | | Description of the video |
|
||||
| `--embeddable` | `-E` | | Whether the video is embeddable (default true) |
|
||||
| `--id` | `-i` | Yes | ID of the video to update |
|
||||
| `--language` | `-l` | | Language of the video |
|
||||
| `--license` | `-L` | | youtube\|creativeCommon (default "youtube") |
|
||||
| `--output` | `-o` | | json\|yaml\|silent |
|
||||
| `--playlistId` | `-y` | | Playlist id of the video |
|
||||
| `--privacy` | `-p` | | public\|private\|unlisted |
|
||||
| `--tags` | `-a` | | Comma separated tags |
|
||||
| `--thumbnail` | `-u` | | Path to the thumbnail file |
|
||||
| `--title` | `-t` | | Title of the video |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Update video title
|
||||
yutu video update --id dQw4w9WgXcQ --title 'New Title'
|
||||
# Update video description and privacy
|
||||
yutu video update --id dQw4w9WgXcQ --description 'Updated description' --privacy public
|
||||
# Update video tags and category
|
||||
yutu video update --id dQw4w9WgXcQ --tags 'music,pop,2024' --categoryId 10
|
||||
```
|
||||
@@ -1,46 +0,0 @@
|
||||
---
|
||||
name: youtube-watermark
|
||||
description: "Manage YouTube watermarks. Use this skill to set or unset watermarks for channel videos. Useful when working with YouTube watermark — provides commands to set and unset watermark via the yutu CLI. Includes setup and installation instructions for first-time users. Triggers: set a watermark for channel's videos, set watermark, set my watermark, unset a watermark for channel's videos, unset watermark, unset my watermark"
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube Watermark
|
||||
|
||||
Manage YouTube watermarks. Use this skill to set or unset watermarks for channel videos.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Read the linked reference for full flag details and examples.
|
||||
|
||||
| Operation | Description | Reference |
|
||||
|-----------|-------------|----------|
|
||||
| set | Set a watermark for channel's videos | [details](references/watermark-set.md) |
|
||||
| unset | Unset a watermark for channel's videos | [details](references/watermark-unset.md) |
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Show all watermark commands
|
||||
yutu watermark --help
|
||||
```
|
||||
@@ -1,65 +0,0 @@
|
||||
<!-- Keep in sync with README.md Prerequisites and Installation sections. -->
|
||||
|
||||
# Yutu Setup Guide
|
||||
|
||||
Before using any yutu skill, you need to install `yutu` and configure YouTube API credentials.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
An account on [Google Cloud Platform](https://console.cloud.google.com/) is required. Set up the following:
|
||||
|
||||
1. **Create a GCP Project** and enable these APIs under `APIs & Services -> Enable APIs and services`:
|
||||
- [YouTube Data API v3](https://console.cloud.google.com/apis/api/youtube.googleapis.com/overview) (Required)
|
||||
- [YouTube Analytics API](https://console.cloud.google.com/apis/api/youtubeanalytics.googleapis.com/overview) (Optional)
|
||||
- [YouTube Reporting API](https://console.cloud.google.com/apis/api/youtubereporting.googleapis.com/overview) (Optional)
|
||||
|
||||
2. **Create OAuth credentials**:
|
||||
- Go to `APIs & Services -> OAuth consent screen`, create a consent screen with yourself as a test user
|
||||
- Go to `Credentials -> Create Credentials -> OAuth Client ID`, select `Web Application`
|
||||
- Add `http://localhost:8216` as an authorized redirect URI
|
||||
- Download the credential file and save it as `client_secret.json`
|
||||
|
||||
3. **Authenticate**:
|
||||
|
||||
```bash
|
||||
yutu auth --credential client_secret.json
|
||||
```
|
||||
|
||||
A browser window will open for you to grant YouTube access. After granting permission, a token is saved to `youtube.token.json`.
|
||||
|
||||
## Installation
|
||||
|
||||
Install `yutu` using one of these methods:
|
||||
|
||||
|
||||
```bash
|
||||
# Node.js (all platforms)
|
||||
npm i -g @eat-pray-ai/yutu
|
||||
|
||||
# macOS
|
||||
brew install yutu
|
||||
|
||||
# Linux
|
||||
brew install yutu
|
||||
|
||||
# Windows
|
||||
winget install yutu
|
||||
|
||||
# Gopher
|
||||
go install github.com/eat-pray-ai/yutu@latest
|
||||
```
|
||||
|
||||
### Other platforms
|
||||
|
||||
Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH.
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable | Description | Default |
|
||||
|----------|-------------|---------|
|
||||
| `YUTU_CREDENTIAL` | Path, base64, or JSON of OAuth client secret | `client_secret.json` |
|
||||
| `YUTU_CACHE_TOKEN` | Path, base64, or JSON of cached OAuth token | `youtube.token.json` |
|
||||
| `YUTU_ROOT` | Root directory for file resolution | Current working directory |
|
||||
| `YUTU_LOG_LEVEL` | Log level: `DEBUG`, `INFO`, `WARN`, `ERROR` | `INFO` |
|
||||
|
||||
For more details, see the [yutu README](https://github.com/eat-pray-ai/yutu#readme).
|
||||
@@ -1,32 +0,0 @@
|
||||
# Watermark Set
|
||||
|
||||
Set a watermark for channel's videos. Use this skill to set a watermark for channel's videos.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu watermark set [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | Yes | ID of the channel |
|
||||
| `--durationMs` | `-d` | | Duration in milliseconds for which the watermark should be displayed |
|
||||
| `--file` | `-f` | Yes | Path to the watermark file |
|
||||
| `--inVideoPosition` | `-p` | | topLeft\|topRight\|bottomLeft\|bottomRight |
|
||||
| `--offsetMs` | `-m` | | Defines the time at which the watermark will appear |
|
||||
| `--offsetType` | `-t` | | offsetFromStart\|offsetFromEnd |
|
||||
| `--onBehalfOfContentOwner` | `-b` | | ID of the content owner, for YouTube content partners |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Set a watermark for a channel
|
||||
yutu watermark set --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw --file watermark.png
|
||||
# Set a watermark with position and offset
|
||||
yutu watermark set --channelId UC_x5X --file logo.png --inVideoPosition bottomRight --offsetType offsetFromEnd --offsetMs 1000
|
||||
# Set a watermark with duration
|
||||
yutu watermark set --channelId UC_x5X --file logo.png --durationMs 5000 --offsetMs 2000
|
||||
```
|
||||
@@ -1,22 +0,0 @@
|
||||
# Watermark Unset
|
||||
|
||||
Unset a watermark for channel's videos. Use this skill to unset a watermark for a channel's videos.
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
yutu watermark unset [flags]
|
||||
```
|
||||
|
||||
## Flags
|
||||
|
||||
| Flag | Shorthand | Required | Description |
|
||||
|------|-----------|----------|-------------|
|
||||
| `--channelId` | `-c` | Yes | ID of the channel |
|
||||
|
||||
## Examples
|
||||
|
||||
```bash
|
||||
# Unset watermark for a channel
|
||||
yutu watermark unset --channelId UC_x5XG1OV2P6uZZ5FSM9Ttw
|
||||
```
|
||||
@@ -0,0 +1,140 @@
|
||||
---
|
||||
name: youtube
|
||||
description: "Use when working with YouTube — upload videos, search content, manage playlists and channels, post and moderate comments, handle subscriptions and memberships, add captions, set thumbnails, check analytics, or any YouTube Data API operation via the yutu CLI."
|
||||
metadata:
|
||||
openclaw:
|
||||
requires:
|
||||
env:
|
||||
- YUTU_CREDENTIAL
|
||||
- YUTU_CACHE_TOKEN
|
||||
bins:
|
||||
- yutu
|
||||
config:
|
||||
- client_secret.json
|
||||
- youtube.token.json
|
||||
primaryEnv: YUTU_CREDENTIAL
|
||||
emoji: "\U0001F3AC\U0001F430"
|
||||
homepage: https://github.com/eat-pray-ai/yutu
|
||||
install:
|
||||
- kind: node
|
||||
package: "@eat-pray-ai/yutu"
|
||||
bins: [yutu]
|
||||
---
|
||||
|
||||
# YouTube
|
||||
|
||||
Manage YouTube resources using the yutu CLI — videos, playlists, comments, channels, captions, subscriptions, and more.
|
||||
|
||||
## Before You Begin
|
||||
|
||||
yutu requires Google Cloud Platform OAuth credentials and a cached token to access the YouTube API. If you haven't set up yutu yet, read the [setup guide](references/setup.md) first.
|
||||
|
||||
## Operations
|
||||
|
||||
Run `yutu <resource> <verb> -h` for full flag details and examples.
|
||||
|
||||
### Content
|
||||
|
||||
| Resource | Operation | Description |
|
||||
|----------|-----------|-------------|
|
||||
| caption | delete | Delete captions |
|
||||
| caption | download | Download a caption |
|
||||
| caption | insert | Insert a caption |
|
||||
| caption | list | List captions |
|
||||
| caption | update | Update a video caption |
|
||||
| thumbnail | set | Set a thumbnail for a video |
|
||||
| video | delete | Delete videos |
|
||||
| video | getRating | Get video ratings |
|
||||
| video | insert | Upload a video |
|
||||
| video | list | List video information |
|
||||
| video | rate | Rate a video |
|
||||
| video | reportAbuse | Report abuse on a video |
|
||||
| video | update | Update a video |
|
||||
| watermark | set | Set a watermark for channel's videos |
|
||||
| watermark | unset | Unset a watermark for channel's videos |
|
||||
|
||||
### Organization
|
||||
|
||||
| Resource | Operation | Description |
|
||||
|----------|-----------|-------------|
|
||||
| playlist | delete | Delete playlists |
|
||||
| playlist | insert | Create a new playlist |
|
||||
| playlist | list | List playlist information |
|
||||
| playlist | update | Update a playlist |
|
||||
| playlist image | delete | Delete playlist images |
|
||||
| playlist image | insert | Insert a playlist image |
|
||||
| playlist image | list | List playlist images |
|
||||
| playlist image | update | Update a playlist image |
|
||||
| playlist item | delete | Delete items from a playlist |
|
||||
| playlist item | insert | Insert a playlist item into a playlist |
|
||||
| playlist item | list | List playlist items |
|
||||
| playlist item | update | Update a playlist item |
|
||||
|
||||
### Community
|
||||
|
||||
| Resource | Operation | Description |
|
||||
|----------|-----------|-------------|
|
||||
| comment | delete | Delete comments |
|
||||
| comment | insert | Create a comment |
|
||||
| comment | list | List comments |
|
||||
| comment | markAsSpam | Mark comments as spam |
|
||||
| comment | setModerationStatus | Set comment moderation status |
|
||||
| comment | update | Update a comment on a video |
|
||||
| comment thread | insert | Insert a new comment thread |
|
||||
| comment thread | list | List comment threads |
|
||||
| member | list | List channel members |
|
||||
| memberships level | list | List memberships levels |
|
||||
| subscription | delete | Delete subscriptions |
|
||||
| subscription | insert | Insert a new subscription |
|
||||
| subscription | list | List subscription information |
|
||||
| super chat event | list | List Super Chat events |
|
||||
|
||||
### Channel
|
||||
|
||||
| Resource | Operation | Description |
|
||||
|----------|-----------|-------------|
|
||||
| channel | list | List channel information |
|
||||
| channel | update | Update channel information |
|
||||
| channel banner | insert | Insert a channel banner |
|
||||
| channel section | delete | Delete channel sections |
|
||||
| channel section | list | List channel sections |
|
||||
|
||||
### Discovery
|
||||
|
||||
| Resource | Operation | Description |
|
||||
|----------|-----------|-------------|
|
||||
| activity | list | List activities |
|
||||
| search | list | Search resources |
|
||||
|
||||
### Metadata
|
||||
|
||||
| Resource | Operation | Description |
|
||||
|----------|-----------|-------------|
|
||||
| i18n language | list | List i18n languages |
|
||||
| i18n region | list | List i18n regions |
|
||||
| video abuse report reason | list | List video abuse report reasons |
|
||||
| video category | list | List video categories |
|
||||
|
||||
## Common Workflows
|
||||
|
||||
See [references/workflows.md](references/workflows.md) for detailed walkthroughs.
|
||||
|
||||
- **Upload a video**: `yutu video insert --file video.mp4 --title "..." --privacy public`, then optionally set thumbnail
|
||||
- **Update video metadata**: Fetch current with `yutu video list --id VIDEO_ID`, then update changed fields
|
||||
- **Create playlist + add videos**: Create with `yutu playlist insert`, find videos with `yutu search list --forMine`, add with `yutu playlistItem insert`
|
||||
- **Post a comment**: Get channel ID with `yutu channel list --mine`, find video, then `yutu commentThread insert`
|
||||
- **Channel analytics**: `yutu channel list --mine` + `yutu search list --forMine` + `yutu video list --id ...`
|
||||
- **Competitor analysis**: `yutu channel list --forHandle @handle` + compare stats and top videos
|
||||
- **Delete content**: Always verify with a list command first, then delete — deletions are irreversible
|
||||
- **Subscribe/unsubscribe**: Check with `yutu subscription list --mine --forChannelId ...` before acting
|
||||
|
||||
## YouTube Growth Tips
|
||||
|
||||
See [references/seo-guide.md](references/seo-guide.md) for the full guide.
|
||||
|
||||
- **Titles**: Use curiosity gaps and power words. Front-load keywords. Keep under 60 characters.
|
||||
- **Descriptions**: First 2 lines appear in search. Include keywords, timestamps, CTAs, and 3-5 hashtags.
|
||||
- **Tags**: Mix broad and long-tail keywords. First 2-3 tags carry the most weight.
|
||||
- **Thumbnails**: High contrast, 3-4 word text, expressive faces, consistent branding.
|
||||
- **Publishing**: Post when audience is active. Maintain consistent schedule.
|
||||
- **Engagement**: Pin a comment with a question. Reply within the first hour.
|
||||
Loaded 100 of 103 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user