Rendercv

rendercv/rendercv-skill/skills/rendercv

作者 rendercvfc14e727b2d4无许可证23 个星标收录于 2026年10月8日更新于 2026年10月8日仓库6个月前更新

Create professional CVs and resumes with perfect typography using RenderCV (v2.8). Users write content in YAML, and RenderCV produces publication-quality PDFs via Typst typesetting. Full control over every visual detail: colors, fonts, margins, spacing, section title styles, entry layouts, and more. 6 built-in themes with unlimited customization. Any language supported (22 built-in, or define your own). Outputs PDF, PNG, HTML, and Markdown. Use when the user wants to create, edit, customize, or render a CV or resume.

仅含说明Documents & Office
AI 生成的概览

指导使用 RenderCV 从 YAML 创建并渲染专业简历,输出 PDF、PNG、HTML 和 Markdown。

功能
该技能说明如何用 YAML 编写简历内容,并通过 RenderCV(v2.8)渲染,借助 Typst 排版生成出版级质量的输出。内容涵盖四个输入部分(cv、design、locale、settings)、九种条目类型、六种内置主题、22 种内置语言,以及颜色、字体、页边距、间距和章节标题样式等大量设计控制项。它还记录了用于生成起始文件、渲染、监听改动、搭建自定义主题以及从命令行覆盖字段的 CLI 命令。输出格式包括 PDF、Typst、Markdown、HTML 和 PNG。
适用场景
当用户想要创建、编辑、定制或渲染简历时使用。适用于需要排版精良的简历文档、主题或语言定制,或将结构化 YAML 简历内容转换为 PDF 等格式的场景。
运行要求
需要安装 RenderCV 工具(例如通过 uv tool install "rendercv[full]")及其基于 Typst 的渲染环境。该技能不附带脚本,仅为说明文档。安装以及使用远程照片 URL 时可能需要网络访问。

Quick Start

Available themes: classic, harvard, engineeringresumes, engineeringclassic, sb2nov, moderncv Available locales: english, arabic, danish, dutch, french, german, hebrew, hindi, hungarian, indonesian, italian, japanese, korean, mandarin_chinese, norwegian_bokmål, norwegian_nynorsk, persian, portuguese, russian, spanish, turkish, vietnamese

These are starting points — every aspect of the design and locale can be fully customized in the YAML file.

bash
# Install RenderCVuv tool install "rendercv[full]"
# Create a starter YAML file (you can specify theme and locale)rendercv new "John Doe"rendercv new "John Doe" --theme moderncv --locale german
# Render to PDF (also generates Typst, Markdown, HTML, PNG by default)rendercv render John_Doe_CV.yaml
# Watch mode: auto-re-render whenever the YAML file changesrendercv render John_Doe_CV.yaml --watch
# Render only PNG (useful for previewing or checking page count)rendercv render John_Doe_CV.yaml --dont-generate-pdf --dont-generate-html --dont-generate-markdown
# Override fields from the CLI without editing the YAMLrendercv render cv.yaml --cv.name "Jane Doe" --design.theme "moderncv"

YAML Structure

A RenderCV input has four sections. Only cv is required — the others have sensible defaults.

yaml
cv:         # Your content: name, contact info, and all sectionsdesign:     # Visual styling: theme, colors, fonts, margins, spacing, layoutslocale:     # Language: month names, phrases, translationssettings:   # Behavior: output paths, bold keywords, current date

Single file vs. separate files: All four sections can live in one YAML file, or each can be a separate file. Separate files are useful for reusing the same design/locale across multiple CVs:

bash
# Single self-contained file (all sections in one file)rendercv render John_Doe_CV.yaml
# Separate files: CV content + design + locale loaded independentlyrendercv render cv.yaml --design design.yaml --locale-catalog locale.yaml --settings settings.yaml

When using separate files, each file contains only its section (e.g., design.yaml has design: as the top-level key). CLI-loaded files override values in the main YAML file.

The YAML maps directly to Pydantic models. The complete type-safe schema is provided below so you can understand every field, its type, and its default value.

Pydantic Schema

The YAML input is validated against these Pydantic models.

Top-Level Model

python
class RenderCVModel(BaseModelWithoutExtraKeys):    cv: Cv = pydantic.Field(default_factory=Cv, title='CV', description='The content of the CV.')    design: Design = pydantic.Field(default_factory=ClassicTheme, title='Design')    locale: Locale = pydantic.Field(default_factory=EnglishLocale, title='Locale Catalog')    settings: Settings = pydantic.Field(default_factory=Settings, title='RenderCV Settings', description='The settings of the RenderCV.')

CV Content (cv)

The cv.sections field is a dictionary where keys are section titles (any string you want) and values are lists of entries. Each section contains entries of the same type.

python
class Cv(BaseModelWithoutExtraKeys):    name: str | None = pydantic.Field(default=None, examples=['John Doe', 'Jane Smith'])    headline: str | None = pydantic.Field(default=None, examples=['Software Engineer', 'Data Scientist', 'Product Manager'])    location: str | None = pydantic.Field(default=None, examples=['New York, NY', 'London, UK', 'Istanbul, Türkiye'])    email: pydantic.EmailStr | list[pydantic.EmailStr] | None = pydantic.Field(default=None, examples=['[email protected]', ['[email protected]', '[email protected]']])    photo: ExistingPathRelativeToInput | pydantic.HttpUrl | None = pydantic.Field(default=None, union_mode='left_to_right', examples=['photo.jpg', 'images/profile.png', 'https://example.com/photo.jpg'])    phone: pydantic_phone_numbers.PhoneNumber | list[pydantic_phone_numbers.PhoneNumber] | None = pydantic.Field(default=None, examples=['+1-234-567-8900', ['+1-234-567-8900', '+44 20 1234 5678']])    website: pydantic.HttpUrl | list[pydantic.HttpUrl] | None = pydantic.Field(default=None, examples=['https://johndoe.com', ['https://johndoe.com', 'https://www.janesmith.dev']])    social_networks: list[SocialNetwork] | None = pydantic.Field(default=None)    custom_connections: list[CustomConnection] | None = pydantic.Field(default=None, examples=[[{'placeholder': 'Book a call', 'url': 'https://cal.com/johndoe', 'fontawesome_icon': 'calendar-days'}]])    sections: dict[str, Section] | None = pydantic.Field(default=None, examples=[{'Experience': '...', 'Education': '...', 'Projects': '...', 'Skills': '...'}])
python
type SocialNetworkName = Literal['LinkedIn', 'GitHub', 'GitLab', 'IMDB', 'Instagram', 'ORCID', 'Mastodon', 'StackOverflow', 'ResearchGate', 'YouTube', 'Google Scholar', 'Telegram', 'WhatsApp', 'Leetcode', 'X', 'Bluesky', 'Reddit']
available_social_networks = get_args(SocialNetworkName.__value__)
class SocialNetwork(BaseModelWithoutExtraKeys):    network: SocialNetworkName = pydantic.Field()    username: str = pydantic.Field(examples=['john_doe', '@[email protected]', '12345/john-doe'])
python
class CustomConnection(BaseModelWithoutExtraKeys):    fontawesome_icon: str    placeholder: str    url: pydantic.HttpUrl | None

Entry Types

cv.sections is a dictionary: keys are section titles (any string), values are lists of entries. Each section must use a single entry type — you cannot mix different entry types within the same section. The entry type is auto-detected from the fields present in each entry.

Shared fields — these are available on entry types that support dates and complex fields (ExperienceEntry, EducationEntry, NormalEntry, PublicationEntry):

FieldTypeDefaultNotes
datestr | int | nullnullFree-form: "2020-09", "Fall 2023", etc. Mutually exclusive with start_date/end_date.
start_datestr | int | nullnullStrict format: YYYY-MM-DD, YYYY-MM, or YYYY.
end_datestr | int | "present" | nullnullSame formats as start_date, or "present". Omitting defaults to "present" when start_date is set.
locationstr | nullnull
summarystr | nullnull
highlightslist[str] | nullnullBullet points.

9 entry types:

Entry TypeRequired FieldsOptional FieldsTypical Use
ExperienceEntrycompany, positionall shared fieldsJobs, positions
EducationEntryinstitution, areadegree + all shared fieldsDegrees, schools
PublicationEntrytitle, authorsdoi, url, journal, summary, datePapers, articles
NormalEntrynameall shared fieldsProjects, awards
OneLineEntrylabel, details—Skills, languages
BulletEntrybullet—Simple bullet points
NumberedEntrynumber—Numbered list items
ReversedNumberedEntryreversed_number—Reverse-numbered items (5, 4, 3...)
TextEntry(plain string)—Free-form paragraphs

Example:

yaml
cv:  sections:    experience:          # list of ExperienceEntry (detected by company + position)      - company: Google        position: Engineer        start_date: 2020-01        highlights:          - Did something impactful    skills:              # list of OneLineEntry (detected by label + details)      - label: Languages        details: Python, C++    about_me:            # list of TextEntry (plain strings)      - This is a free-form paragraph about me.

Entries also accept arbitrary extra keys (silently ignored during rendering). A typo in a field name will NOT cause an error.

Design (design)

All built-in themes share the same structure — they only differ in default values. See the sample designs below for every available field and its default. Set design.theme to pick a theme, then override any field.

Locale (locale)

Built-in locales: english, arabic, danish, dutch, french, german, hebrew, hindi, hungarian, indonesian, italian, japanese, korean, mandarin_chinese, norwegian_bokmål, norwegian_nynorsk, persian, portuguese, russian, spanish, turkish, vietnamese

Set locale.language to a built-in locale name to use it. Override any field to customize translations. Set language to any string and provide all translations for a fully custom locale.

Settings (settings)

Key fields: bold_keywords (list of strings to auto-bold), current_date (override today's date), render_command.* (output paths, generation flags).

Important Patterns

YAML quoting

ALWAYS quote string values that contain a colon (:). This is the most common cause of invalid YAML. Highlights, titles, summaries, and any free-form text often contain colons:

yaml
# WRONG — colon breaks YAML parsing:- title: Catalytic Mechanisms: A New Approach  highlights:    - Relevant coursework: Distributed Systems, ML
# RIGHT — wrap in double quotes:- title: "Catalytic Mechanisms: A New Approach"  highlights:    - "Relevant coursework: Distributed Systems, ML"

Rule: if a string value contains :, it MUST be quoted. When in doubt, quote it.

Bullet characters

The design.highlights.bullet field only accepts these exact characters: ●, •, ◦, -, ◆, ★, ■, —, ○. Do not use en-dash (–), >, *, or any other character. When in doubt, omit bullet to use the theme default.

Phone numbers

Phone numbers MUST be in international format with country code (E.164). Never invent a phone number — only include one if the user provides it.

yaml
# WRONG:phone: "(555) 123-4567"phone: "555-123-4567"
# RIGHT:phone: "+15551234567"

If the user provides a local number without country code, ask which country, or omit the phone field.

Text formatting

All text fields support inline Markdown: **bold**, *italic*, [link text](url). Block-level Markdown (headers, lists, blockquotes, code blocks) is not supported. Raw Typst commands and math ($$f(x)$$) also pass through.

Date handling

  • date and start_date/end_date are mutually exclusive. If date is provided, start_date and end_date are ignored.
  • If only start_date is given, end_date defaults to "present".
  • start_date/end_date require strict formats: YYYY-MM-DD, YYYY-MM, or YYYY.
  • date is flexible: accepts any string ("Fall 2023") in addition to date formats.

Section titles

  • snake_case keys auto-capitalize: work_experience → "Work Experience"
  • Keys with spaces or uppercase are used as-is.

Publication authors

Use *Name* (single asterisks, italic) to highlight the CV owner in author lists.

Nested highlights (sub-bullets)

yaml
highlights:  - Main bullet point    - Sub-bullet 1    - Sub-bullet 2

CLI Reference

rendercv new "Full Name"

Generate a starter YAML file.

OptionShortWhat it does
--theme THEMETheme to use (default: classic)
--locale LOCALELocale to use (default: english)
--create-typst-templatesAlso create editable Typst template files for full design control

rendercv render <input.yaml>

Generate PDF, Typst, Markdown, HTML, and PNG from a YAML file.

OptionShortWhat it does
--watch-wRe-render automatically when the YAML file changes
--quiet-qSuppress all output messages
--design FILE-dLoad design section from a separate YAML file
--locale-catalog FILE-lcLoad locale section from a separate YAML file
--settings FILE-sLoad settings section from a separate YAML file
--output-folder DIR-oCustom output directory

Per-format controls: --{format}-path PATH sets custom output path, --dont-generate-{format} skips generation. Formats: pdf, typst, markdown, html, png.

Override any YAML field from the CLI using dot notation (overrides without editing the file):

bash
rendercv render CV.yaml --cv.name "Jane Doe" --design.theme "moderncv"rendercv render CV.yaml --cv.sections.education.0.institution "MIT"

rendercv create-theme "theme-name"

Scaffold a custom theme directory with editable Typst templates for complete design control.

JSON Schema

For YAML editor autocompletion and validation:

yaml
# yaml-language-server: $schema=https://raw.githubusercontent.com/rendercv/rendercv/refs/tags/v2.8/schema.json

Complete Example

Sample CV

yaml
cv:  name: John Doe  headline:  location: San Francisco, CA  email: [email protected]  photo:  phone:  website: https://rendercv.com/  social_networks:  - network: LinkedIn    username: rendercv  - network: GitHub    username: rendercv  custom_connections:  sections:    Welcome to RenderCV:    - RenderCV reads a CV written in a YAML file, and generates a PDF with       professional typography.    - Each section title is arbitrary.    education:    - institution: Princeton University      area: Computer Science      degree: PhD      date:      start_date: 2018-09      end_date: 2023-05      location: Princeton, NJ      summary:      highlights:      - 'Thesis: Efficient Neural Architecture Search for Resource-Constrained Deployment'      - 'Advisor: Prof. Sanjeev Arora'      - NSF Graduate Research Fellowship, Siebel Scholar (Class of 2022)    - institution: Boğaziçi University      area: Computer Engineering      degree: BS      date:      start_date: 2014-09      end_date: 2018-06      location: Istanbul, Türkiye      summary:      highlights:      - 'GPA: 3.97/4.00, Valedictorian'      - Fulbright Scholarship recipient for Graduate Studies    experience:    - company: Nexus AI      position: Co-Founder & CTO      date:      start_date: 2023-06      end_date: present      location: San Francisco, CA      summary:      highlights:      - Built foundation model infrastructure serving 2M+ monthly API requests         with 99.97% uptime      - Raised $18M Series A led by Sequoia Capital, with participation from         a16z and Founders Fund      - Scaled engineering team from 3 to 28 across ML research, platform, and         applied AI divisions      - Developed proprietary inference optimization reducing latency by 73%         compared to baseline    - company: NVIDIA Research      position: Research Intern      date:      start_date: 2022-05      end_date: 2022-08      location: Santa Clara, CA      summary:      highlights:      - Designed sparse attention mechanism reducing transformer memory         footprint by 4.2x      - Co-authored paper accepted at NeurIPS 2022 (spotlight presentation, top         5% of submissions)    projects:    - name: '[FlashInfer](https://github.com/)'      date:      start_date: 2023-01      end_date: present      location:      summary: Open-source library for high-performance LLM inference kernels      highlights:      - Achieved 2.8x speedup over baseline attention implementations on A100         GPUs      - Adopted by 3 major AI labs, 8,500+ GitHub stars, 200+ contributors    - name: '[NeuralPrune](https://github.com/)'      date: '2021'      start_date:      end_date:      location:      summary: Automated neural network pruning toolkit with differentiable         masks      highlights:      - Reduced model size by 90% with less than 1% accuracy degradation on         ImageNet      - Featured in PyTorch ecosystem tools, 4,200+ GitHub stars    publications:    - title: 'Sparse Mixture-of-Experts at Scale: Efficient Routing for Trillion-Parameter        Models'      authors:      - '*John Doe*'      - Sarah Williams      - David Park      summary:      doi: 10.1234/neurips.2023.1234      url:      journal: NeurIPS 2023      date: 2023-07    - title: Neural Architecture Search via Differentiable Pruning      authors:      - James Liu      - '*John Doe*'      summary:      doi: 10.1234/neurips.2022.5678      url:      journal: NeurIPS 2022, Spotlight      date: 2022-12    selected_honors:    - bullet: MIT Technology Review 35 Under 35 Innovators (2024)    - bullet: Forbes 30 Under 30 in Enterprise Technology (2024)    skills:    - label: Languages      details: Python, C++, CUDA, Rust, Julia    - label: ML Frameworks      details: PyTorch, JAX, TensorFlow, Triton, ONNX    patents:    - number: Adaptive Quantization for Neural Network Inference on Edge Devices        (US Patent 11,234,567)    - number: Dynamic Sparsity Patterns for Efficient Transformer Attention (US         Patent 11,345,678)    invited_talks:    - reversed_number: Scaling Laws for Efficient Inference — Stanford HAI         Symposium (2024)    - reversed_number: Building AI Infrastructure for the Next Decade —         TechCrunch Disrupt (2024)

Sample Design (classic — complete reference)

This shows every available design field with its default value. All themes share the same structure.

yaml
design:  theme: classic  page:    size: us-letter    top_margin: 0.7in    bottom_margin: 0.7in    left_margin: 0.7in    right_margin: 0.7in    show_footer: true    show_top_note: true  colors:    body: rgb(0, 0, 0)    name: rgb(0, 79, 144)    headline: rgb(0, 79, 144)    connections: rgb(0, 79, 144)    section_titles: rgb(0, 79, 144)    links: rgb(0, 79, 144)    footer: rgb(128, 128, 128)    top_note: rgb(128, 128, 128)  typography:    line_spacing: 0.6em    alignment: justified    date_and_location_column_alignment: right    font_family:      body: Source Sans 3      name: Source Sans 3      headline: Source Sans 3      connections: Source Sans 3      section_titles: Source Sans 3    font_size:      body: 10pt      name: 30pt      headline: 10pt      connections: 10pt      section_titles: 1.4em    small_caps:      name: false      headline: false      connections: false      section_titles: false    bold:      name: true      headline: false      connections: false      section_titles: true  links:    underline: false    show_external_link_icon: false  header:    alignment: center    photo_width: 3.5cm    photo_position: left    photo_space_left: 0.4cm    photo_space_right: 0.4cm    space_below_name: 0.7cm    space_below_headline: 0.7cm    space_below_connections: 0.7cm    connections:      phone_number_format: national      hyperlink: true      show_icons: true      display_urls_instead_of_usernames: false      separator: ''      space_between_connections: 0.5cm  section_titles:    type: with_partial_line    line_thickness: 0.5pt    space_above: 0.5cm    space_below: 0.3cm  sections:    allow_page_break: true    space_between_regular_entries: 1.2em    space_between_text_based_entries: 0.3em    show_time_spans_in:      - experience  entries:    date_and_location_width: 4.15cm    side_space: 0.2cm    space_between_columns: 0.1cm    allow_page_break: false    short_second_row: true    degree_width: 1cm    summary:      space_above: 0cm      space_left: 0cm    highlights:      bullet: •      nested_bullet: •      space_left: 0.15cm      space_above: 0cm      space_between_items: 0cm      space_between_bullet_and_text: 0.5em  templates:    footer: '*NAME -- PAGE_NUMBER/TOTAL_PAGES*'    top_note: '*LAST_UPDATED CURRENT_DATE*'    single_date: MONTH_ABBREVIATION YEAR    date_range: START_DATE – END_DATE    time_span: HOW_MANY_YEARS YEARS HOW_MANY_MONTHS MONTHS    one_line_entry:      main_column: '**LABEL:** DETAILS'    education_entry:      main_column: |-        **INSTITUTION**, AREA        SUMMARY        HIGHLIGHTS      degree_column: '**DEGREE**'      date_and_location_column: |-        LOCATION        DATE    normal_entry:      main_column: |-        **NAME**        SUMMARY        HIGHLIGHTS      date_and_location_column: |-        LOCATION        DATE    experience_entry:      main_column: |-        **COMPANY**, POSITION        SUMMARY        HIGHLIGHTS      date_and_location_column: |-        LOCATION        DATE    publication_entry:      main_column: |-        **TITLE**        SUMMARY        AUTHORS        URL (JOURNAL)      date_and_location_column: DATE

Other Theme Overrides

Other themes only override specific fields from the classic defaults above. To use a theme, set design.theme and optionally override any field. Each theme also customizes design.templates (entry layout patterns) — see the classic sample above for the full template structure. The override YAMLs below omit templates for brevity.

harvard
yaml
# yaml-language-server: $schema=../../../../../../schema.jsondesign:  theme: harvard  page:    top_margin: 0.5in    bottom_margin: 0.5in    left_margin: 0.5in    right_margin: 0.5in    show_top_note: false  colors:    name: rgb(0,0,0)    headline: rgb(0,0,0)    connections: rgb(0,0,0)    section_titles: rgb(0,0,0)    links: rgb(0,0,0)  typography:    font_family:      body: XCharter      name: XCharter      headline: XCharter      connections: XCharter      section_titles: XCharter    font_size:      name: 25pt      connections: 9pt      section_titles: 1.3em  header:    space_below_name: 0.5cm    space_below_headline: 0.5cm    space_below_connections: 0.5cm    connections:      show_icons: false      separator: •      space_between_connections: 0.4cm  section_titles:    type: centered_with_centered_partial_line    space_below: 0.2cm  sections:    space_between_regular_entries: 1em    show_time_spans_in: []  entries:    short_second_row: false
engineeringresumes
yaml
# yaml-language-server: $schema=../../../../../../schema.jsondesign:  theme: engineeringresumes  page:    show_footer: false  typography:    font_family:      body: XCharter      name: XCharter      headline: XCharter      connections: XCharter      section_titles: XCharter    font_size:      name: 25pt      section_titles: 1.2em    bold:      name: false  header:    connections:      separator: '|'      show_icons: false      display_urls_instead_of_usernames: true  colors:    name: rgb(0,0,0)    connections: rgb(0,0,0)    headline: rgb(0,0,0)    section_titles: rgb(0,0,0)    links: rgb(0,0,0)  links:    underline: true    show_external_link_icon: false  section_titles:    type: with_full_line    space_above: 0.5cm    space_below: 0.3cm  sections:    space_between_regular_entries: 0.42cm    space_between_text_based_entries: 0.15cm    show_time_spans_in: []  entries:    short_second_row: false    summary:      space_above: 0.08cm    side_space: 0cm    highlights:      bullet: ●      nested_bullet: ●      space_left: 0cm      space_above: 0.08cm      space_between_items: 0.08cm      space_between_bullet_and_text: 0.3em
engineeringclassic
yaml
# yaml-language-server: $schema=../../../../../../schema.jsondesign:  theme: engineeringclassic  typography:    font_family:      body: Raleway      name: Raleway      headline: Raleway      connections: Raleway      section_titles: Raleway    bold:      name: false      section_titles: false  header:    alignment: left  links:    show_external_link_icon: false  section_titles:    type: with_full_line  sections:    show_time_spans_in: []  entries:    short_second_row: false    summary:      space_above: 0.12cm    highlights:      space_left: 0cm      space_above: 0.12cm      space_between_items: 0.12cm
sb2nov
yaml
# yaml-language-server: $schema=../../../../../../schema.jsondesign:  theme: sb2nov  typography:    font_family:      body: New Computer Modern      name: New Computer Modern      headline: New Computer Modern      connections: New Computer Modern      section_titles: New Computer Modern  colors:    name: rgb(0,0,0)    connections: rgb(0,0,0)    section_titles: rgb(0,0,0)    headline: rgb(0,0,0)    links: rgb(0,0,0)  links:    underline: true    show_external_link_icon: false  section_titles:    type: with_full_line  sections:    show_time_spans_in: []  header:    connections:      hyperlink: true      show_icons: false      display_urls_instead_of_usernames: true      separator: •  entries:    short_second_row: false    highlights:      bullet: ◦      nested_bullet: ◦
moderncv
yaml
# yaml-language-server: $schema=../../../../../../schema.jsondesign:  theme: moderncv  typography:    line_spacing: 0.6em    font_family:      body: Fontin      name: Fontin      headline: Fontin      connections: Fontin      section_titles: Fontin    font_size:      name: 25pt      section_titles: 1.4em    bold:      name: false      section_titles: false  header:    alignment: left    photo_width: 4.15cm    photo_space_left: 0cm    photo_space_right: 0.3cm  links:    underline: true    show_external_link_icon: false  section_titles:    type: moderncv    space_above: 0.55cm    space_below: 0.3cm    line_thickness: 0.15cm  sections:    show_time_spans_in: []  entries:    short_second_row: false    side_space: 0cm    space_between_columns: 0.3cm    summary:      space_above: 0.1cm    highlights:      space_left: 0cm      space_above: 0.15cm      space_between_items: 0.1cm      space_between_bullet_and_text: 0.3em

来源与署名

来源:rendercv/rendercv-skill位于skills/rendercv提交fc14e72

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架