Project Icon

gitlab4j-api

集成GitLab REST API的轻量级Java客户端库

GitLab4J API是一个功能完备的Java库,用于通过REST API与GitLab仓库交互。该库支持项目管理、问题跟踪和合并请求等GitLab核心功能,并能处理webhooks和系统钩子。GitLab4J API简化了Java应用程序与GitLab的集成过程,为开发者提供了便捷的解决方案。

<SOURCE_TEXT>

GitLab4J™ API (gitlab4j-api)
GitLab REST API的Java客户端库

Maven Central 构建状态 javadoc.io

GitLab4J™ API (gitlab4j-api) 提供了一个功能齐全且易于使用的Java库,用于通过GitLab REST API操作GitLab仓库。此外,还提供了对GitLab webhooks和系统钩子的全面支持。


目录


警告 如果您正在寻找我们的下一个主要版本6.x.x,它要求最低Java版本为11,并且使用jakarta.*包而不是javax.*包的Jakarta EE组件,请查看6.x分支。 如果您正在使用Spring Boot 3和Spring Framework 6.0,那么您需要的是6.x.x版本。

GitLab服务器版本支持

GitLab4J-API支持GitLab社区版(gitlab-ce)和GitLab企业版(gitlab-ee)的11.0+版本。

GitLab于2018年6月发布了GitLab 11.0版本,其中包含了对GitLab的许多重大更改。如果您使用的GitLab服务器版本早于11.0,强烈建议您要么更新GitLab安装,要么使用与您正在使用的GitLab版本大约同时发布的本库版本。

注意:
从GitLab 11.0开始,GitLab服务器已移除对GitLab API v3的支持(参见 https://about.gitlab.com/2018/06/01/api-v3-removal-impending/)。本库将在2019年某个时候移除对GitLab API v3的支持。如果您正在使用v3支持,请更新您的代码以使用GitLab API v4。


使用GitLab4J-API

Java 8要求

从GitLab4J-API 4.8.0开始,现在需要Java 8+才能使用GitLab4J-API。

Javadocs

Javadocs可在此处获取: javadoc.io

项目设置

要在Java项目中使用GitLab4J™ API,只需将以下依赖项添加到项目的构建文件中:
Gradle: build.gradle

dependencies {
    ...
    compile group: 'org.gitlab4j', name: 'gitlab4j-api', version: '5.6.0'
}

注意: 使用4.5之前的Gradle版本拉取依赖项可能会失败。请参阅Gradle问题3065

Maven: pom.xml

<dependency>
    <groupId>org.gitlab4j</groupId>
    <artifactId>gitlab4j-api</artifactId>
    <version>5.6.0</version>
</dependency>

Jbang:

Jbang非常方便运行依赖第三方库的Java脚本。

只需在脚本顶部添加此行:

//DEPS org.gitlab4j:gitlab4j-api:5.6.0

Ivy和SBT
有报告称使用Ivy或SBT解析某些依赖项时存在问题,要解决这些问题,请参阅:
JAX-RS API问题#571
JAX-RS API问题#572

最新版本

虽然我们经常创建发布版本,但您可能对尚未发布的功能感兴趣。 您可以使用jitpack创建的jar来获取最新版本。

Gradle用法:

repositories {
    mavenCentral()
    maven {
        url "https://jitpack.io"
        content {
            includeGroup "com.github.gitlab4j"
        }
    }
}

dependencies {
    // ...
    implementation 'com.github.gitlab4j:gitlab4j-api:main-SNAPSHOT'
    // ...
}

Maven用法:

<repositories>
  <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>com.github.gitlab4j</groupId>
    <artifactId>gitlab4j-api</artifactId>
    <version>main-SNAPSHOT</version>
  </dependency>
  <!-- ... -->
</dependencies>

Jbang用法:

您只需像这样声明依赖项,而不是使用Maven坐标:

//DEPS https://github.com/gitlab4j/gitlab4j-api/tree/main#:SNAPSHOT

使用特定提交

版本main-SNAPSHOT表示您希望获取main分支的最新版本。 您也可以指向特定的提交:

dependencies {
    implementation 'com.github.gitlab4j:gitlab4j-api:6561c93aaf'
}
<dependency>
    <groupId>com.github.gitlab4j</groupId>
    <artifactId>gitlab4j-api</artifactId>
    <version>6561c93aaf</version>
</dependency>
//DEPS https://github.com/gitlab4j/gitlab4j-api/tree/6561c93aafa6bf35cb9bad0617127a0c249a8f9f

使用示例

GitLab4J-API使用起来非常简单,您只需要GitLab服务器的URL和GitLab账户设置页面中的个人访问令牌。一旦有了这些信息,使用起来就像这样简单:

// 创建GitLabApi实例以与您的GitLab服务器通信
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PERSONAL_ACCESS_TOKEN");

// 获取您的账户有权访问的项目列表
List<Project> projects = gitLabApi.getProjectApi().getProjects();

您也可以使用用户名和密码登录GitLab服务器:

// 使用用户名和密码登录GitLab服务器
GitLabApi gitLabApi = GitLabApi.oauth2Login("http://your.gitlab.server.com", "username", "password");

从GitLab4J-API 4.6.6开始,所有API请求都支持以另一个用户的身份执行API调用,前提是您以管理员身份进行身份验证:

// 创建GitLabApi实例以与您的GitLab服务器通信(必须是管理员)
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PERSONAL_ACCESS_TOKEN");

// 以不同用户身份执行sudo,在本例中是名为"johndoe"的用户,所有后续调用都将以"johndoe"的身份执行
gitLabApi.sudo("johndoe")

// 关闭sudo模式
gitLabApi.unsudo();

设置请求超时

从GitLab4J-API 4.14.21开始,添加了对设置API客户端连接和读取超时的支持:

GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", proxyConfig);

// 将连接超时设置为1秒,读取超时设置为5秒
gitLabApi.setRequestTimeout(1000, 5000);

通过代理服务器连接

从GitLab4J-API 4.8.2开始,添加了通过HTTP代理服务器连接到GitLab服务器的支持:

</SOURCE_TEXT>
<SOURCE_TEXT>
// 使用代理服务器(带基本认证)登录GitLab服务器
Map<String, Object> proxyConfig = ProxyClientConfig.createProxyClientConfig(
        "http://your-proxy-server", "proxy-username", "proxy-password");
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", null, proxyConfig);

// 使用代理服务器(无认证)登录GitLab服务器
Map<String, Object> proxyConfig = ProxyClientConfig.createProxyClientConfig("http://your-proxy-server");
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", null, proxyConfig);

// 使用NTLM(Windows DC)代理登录GitLab服务器
Map<String, Object> ntlmProxyConfig = ProxyClientConfig.createNtlmProxyClientConfig(
        "http://your-proxy-server", "windows-username", "windows-password", "windows-workstation", "windows-domain");
GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.com", "YOUR_PERSONAL_ACCESS_TOKEN", null, ntlmProxyConfig);

有关接受代理配置的完整方法列表,请参阅GitLabApi类的Javadoc(clientConfiguration参数)


GitLab API V3和V4支持

从GitLab4J-API 4.2.0开始,已添加对GitLab API V4的支持。如果您的应用程序需要GitLab API V3, 您仍然可以通过以下方式创建GitLabApi实例来使用GitLab4J-API:

// 创建一个GitLabApi实例,使用GitLab API V3与您的GitLab服务器通信
GitLabApi gitLabApi = new GitLabApi(ApiVersion.V3, "http://your.gitlab.server.com", "YOUR_PRIVATE_TOKEN");

注意: 从GitLab 11.0开始,GitLab服务器已移除对GitLab API v3的支持(参见https://about.gitlab.com/2018/06/01/api-v3-removal-impending/)。对GitLab API v3的支持将在2019年某个时候从该库中移除。如果您正在使用v3支持,请更新您的代码以使用GitLab API v4。


API请求和响应的日志记录

从GitLab4J-API 4.8.39开始,已添加对记录GitLab API请求和响应的支持。使用GitLabApi实例的以下方法之一启用日志记录:

GitLabApi gitLabApi = new GitLabApi("http://your.gitlab.server.com", "YOUR_PERSONAL_ACCESS_TOKEN");

// 使用共享日志记录器和默认级别FINE进行日志记录
gitLabApi.enableRequestResponseLogging();

// 使用共享日志记录器和INFO级别进行日志记录
gitLabApi.enableRequestResponseLogging(java.util.logging.Level.INFO);

// 使用指定的日志记录器和INFO级别进行日志记录
gitLabApi.enableRequestResponseLogging(yourLoggerInstance, java.util.logging.Level.INFO);

// 使用共享日志记录器,INFO级别,并包括最多1024字节的实体日志记录
gitLabApi.enableRequestResponseLogging(java.util.logging.Level.INFO, 1024);

// 使用指定的日志记录器,INFO级别,并包括最多1024字节的实体日志记录
gitLabApi.enableRequestResponseLogging(yourLoggerInstance, java.util.logging.Level.INFO, 1024);

结果分页

GitLab4J-API提供了一种易于使用的分页机制,用于对GitLab API的结果列表进行分页。 以下是使用Pager的几个示例:

// 获取一个Pager实例,每页10个项目分页浏览项目
Pager<Project> projectPager = gitLabApi.getProjectApi().getProjects(10);

// 遍历页面并打印出名称和描述
while (projectPager.hasNext()) {
    for (Project project : projectPager.next()) {
        System.out.println(project.getName() + " -: " + project.getDescription());
    }
}

从GitLab4J-API 4.9.2开始,您还可以使用Pager实例将所有项目作为单个列表获取:

// 获取一个Pager实例,以便我们可以将所有项目加载到单个列表中,每次10个项目:
Pager<Project> projectPager = gitlabApi.getProjectsApi().getProjects(10);
List<Project> allProjects = projectPager.all();

Java 8流支持

从GitLab4J-API 4.9.2开始,所有返回List结果的GitLabJ-API方法都有一个类似命名的方法,返回Java 8流。返回流的方法使用以下命名约定:getXxxxxStream()

重要 内置的返回流的方法使用___急切求值___,这意味着所有项目都从GitLab服务器预先获取,并返回一个将流式传输这些项目的流。急切求值不支持并行读取服务器数据,但它允许在数据获取后对流进行并行处理。

要使用___惰性求值___进行流式处理,请使用返回Pager实例的GitLab4J-API方法,然后在Pager实例上调用lazyStream()方法创建惰性求值流。该流利用Pager实例对可用项目进行分页。惰性流不支持并行操作或跳过。

急切求值示例用法:

// 流式处理可见项目,打印项目名称。
Stream<Project> projectStream = gitlabApi.getProjectApi().getProjectsStream();
projectStream.map(Project::getName).forEach(name -> System.out.println(name));

// 并行操作流,此示例按用户名对User实例进行排序
// 注意:用户的获取不是并行完成的,
// 只有用户的排序是并行操作。
Stream<User> stream = gitlabApi.getUserApi().getUsersStream();
List<User> users = stream.parallel().sorted(comparing(User::getUsername)).collect(toList());

惰性求值示例用法:

// 获取一个Pager实例,用于惰性流式处理Project实例。
// 在此示例中,每页将预取10个项目。
Pager<Project> projectPager = gitlabApi.getProjectApi().getProjects(10);

// 惰性流式处理项目,打印每个项目名称,将输出限制为5个项目名称
projectPager.lazyStream().limit(5).map(Project::getName).forEach(name -> System.out.println(name));

Java 8 Optional支持

GitLab4J-API支持Java 8 Optional用于返回单个项目的API调用。以下是如何使用Java 8 Optional API调用的示例:

Optional<Group> optionalGroup =  gitlabApi.getGroupApi().getOptionalGroup("my-group-path");
if (optionalGroup.isPresent())
    return optionalGroup.get();

return gitlabApi.getGroupApi().addGroup("my-group-name", "my-group-path");

问题时间估计

GitLab问题允许进行时间跟踪。目前可用的时间单位如下:

  • 月(mo)
  • 周(w)
  • 天(d)
  • 小时(h)
  • 分钟(m)

转换率为1mo = 4w,1w = 5d,1d = 8h。


进行API调用

API已被分解为子API类,以便更容易使用并分离关注点。GitLab4J子API类通常与GitLab API文档有一对一的关系。以下是GitLab4J子API类与GitLab API文档映射的示例:

org.gitlab4j.api.GroupApi -> https://docs.gitlab.com/ce/api/groups.html
org.gitlab4j.api.MergeRequestApi -> https://docs.gitlab.com/ce/api/merge_requests.html
org.gitlab4j.api.ProjectApi -> https://docs.gitlab.com/ce/api/projects.html
org.gitlab4j.api.UserApi -> https://docs.gitlab.com/ce/api/users.html

可用的子API

以下是可用子API的列表,以及每个API的示例用法。有关每个子API可用方法的完整列表,请参阅Javadocs


  ApplicationsApi
  ApplicationSettingsApi
  AuditEventApi
  AwardEmojiApi
  BoardsApi
  CommitsApi
  ContainerRegistryApi
  DeployKeysApi
  DiscussionsApi
  EnvironmentsApi
  EpicsApi
  EventsApi
  GroupApi
  HealthCheckApi
  ImportExportApi
  IssuesApi
  JobApi
  LabelsApi
  LicenseApi
  LicenseTemplatesApi
  LabelsApi
  MergeRequestApi
  MilestonesApi
  NamespaceApi
  NotesApi
  NotificationSettingsApi
  PackagesApi
  PipelineApi
  ProjectApi
  ProtectedBranchesApi
  ReleasesApi
  RepositoryApi
  RepositoryFileApi
  ReourceLabelEventsApi
  RunnersApi
</SOURCE_TEXT> <SOURCE_TEXT> SearchApi
ServicesApi
SessionApi
SnippetsApi
SystemHooksApi
TagsApi
TodosApi
UserApi
WikisApi

子API示例


ApplicationsApi

// 向GitLab添加一个OAUTH应用
ApplicationScope[] scopes = {ApplicationScope.SUDO, ApplicationScope.PROFILE};
gitLabApi.getApplicationsApi().createApplication("我的OAUTH应用", "https//example.com/myapp/callback", scopes);

ApplicationSettingsApi

// 获取当前GitLab服务器的应用设置
ApplicationSettings appSettings = gitLabApi.getApplicationSettingsApi().getAppliationSettings();

AuditEventApi

// 获取实体的当前GitLab服务器审计事件
// 这里使用了org.gitlab4j.api.utils.ISO8601类中的ISO8601日期工具
Date since = ISO8601.toDate("2017-01-01T00:00:00Z");
Date until = new Date(); // 现在
List<AuditEvent> auditEvents = gitLabApi.getAuditEventApi().getAuditEvents(since, until, EntityType.USER, 1);

AwardEmojiApi

// 获取指定问题的AwardEmoji列表(群组ID = 1,问题IID = 1)
List<AwardEmoji> awardEmojis = gitLabApi.getAwardEmojiApi().getIssuAwardEmojis(1, 1);

BoardsApi

// 获取指定项目的问题看板列表
List<Board> boards = gitLabApi.getBoardsApi().getBoards(projectId);

CommitsApi

// 获取指定时间窗口内与指定分支关联的提交列表
// 这里使用了org.gitlab4j.api.utils.ISO8601类中的ISO8601日期工具
Date since = ISO8601.toDate("2017-01-01T00:00:00Z");
Date until = new Date(); // 现在
List<Commit> commits = gitLabApi.getCommitsApi().getCommits(1234, "new-feature", since, until);

ContainerRegistryApi

// 获取指定项目的注册表仓库列表
List<RegistryRepository> registryRepos = gitLabApi.ContainerRegistryApi().getRepositories(projectId);

DeployKeysApi

// 获取已认证用户的部署密钥列表
List<DeployKey> deployKeys = gitLabApi.getDeployKeysApi().getDeployKeys();

DiscussionsApi

// 获取指定合并请求的讨论列表
List<Discussion> discussions = gitLabApi.getDiscussionsApi().getMergeRequestDiscussions(projectId, mergeRequestIid);

EnvironmentsApi

// 获取指定项目的环境列表
List<Environment> environments = gitLabApi.getEnvironmentsApi().getEnvironments(projectId);

EpicsApi

// 获取请求的群组及其子群组的史诗列表
List<Epic> epics = gitLabApi.getEpicsApi().getEpics(1);

EventsApi

// 获取已认证用户的事件列表
Date after = new Date(0); // 纪元之后
Date before = new Date(); // 现在之前
List<Event> events = gitLabApi.getEventsApi().getAuthenticatedUserEvents(null, null, before, after, DESC);

GroupApi

// 获取您有权访问的群组列表
List<Group> groups = gitLabApi.getGroupApi().getGroups();

HealthCheckApi

// 获取活跃度端点健康检查结果。假设已按以下文档设置IP白名单:
// https://docs.gitlab.com/ee/administration/monitoring/ip_whitelist.html
HealthCheckInfo healthCheck = gitLabApi.getHealthCheckApi().getLiveness();

ImportExportApi

// 为指定的项目ID安排项目导出
gitLabApi.getImportExportApi().scheduleExport(projectId);

// 获取指定项目ID的项目导出状态
ExportStatus exportStatus = gitLabApi.getImportExportApi().getExportStatus(projectId);

IssuesApi

// 获取指定项目ID的问题列表
List<Issue> issues = gitLabApi.getIssuesApi().getIssues(1234);

JobApi

// 获取指定项目ID的作业列表
List<Job> jobs = gitLabApi.getJobApi().getJobs(1234);

LabelsApi

// 获取指定项目ID的标签列表
List<Label> labels = gitLabApi.getLabelsApi().getLabels(1234);

LicenseApi

// 检索当前许可证的信息
License license = gitLabApi.getLicenseApi().getLicense();

LicenseTemplatesApi

// 获取开源许可证模板列表
List<LicenseTemplate> licenses = gitLabApi.getLicenseTemplatesApi().getLicenseTemplates();

MergeRequestApi

// 获取指定项目的合并请求列表
List<MergeRequest> mergeRequests = gitLabApi.getMergeRequestApi().getMergeRequests(1234);

MilestonesApi

// 获取指定项目的里程碑列表
List<Milestone> milestones = gitLabApi.getMilestonesApi().getMilestones(1234);

NamespaceApi

// 获取名称或路径中包含"foobar"的所有命名空间
List<Namespace> namespaces = gitLabApi.getNamespaceApi().findNamespaces("foobar");

NotesApi

// 获取项目ID为1234,问题IID为1的问题备注列表
List<Note> notes = gitLabApi.getNotesApi().getNotes(1234, 1);

NotificationSettingsApi

// 获取当前全局通知设置
NotificationSettings settings = gitLabApi.getNotificationSettingsApi().getGlobalNotificationSettings();

PackagesApi

// 获取指定项目ID的所有包
List<Packages> packages = gitLabApi.getPackagesApi().getPackages(1234);

PipelineApi

// 获取指定项目ID的所有流水线
List<Pipeline> pipelines = gitLabApi.getPipelineApi().getPipelines(1234);

ProjectApi

// 获取可访问的项目列表
public List<Project> projects = gitLabApi.getProjectApi().getProjects();
// 创建一个新项目
Project projectSpec = new Project()
    .withName("my-project")
    .withDescription("我的演示项目。")
    .withIssuesEnabled(true)
    .withMergeRequestsEnabled(true)
    .withWikiEnabled(true)
    .withSnippetsEnabled(true)
    .withPublic(true);

Project newProject = gitLabApi.getProjectApi().createProject(projectSpec);

ProtectedBranchesApi

List<ProtectedBranch> branches = gitLabApi.getProtectedBranchesApi().getProtectedBranches(project.getId());

ReleasesApi

// 获取指定项目的发布列表
List<Release> releases = gitLabApi.getReleasesApi().getReleases(projectId);

RepositoryApi

// 获取项目的仓库分支列表,按名称字母顺序排序
List<Branch> branches = gitLabApi.getRepositoryApi().getBranches(projectId);
// 在项目中按名称搜索仓库分支
List<Branch> branches = gitLabApi.getRepositoryApi().getBranches(projectId, searchTerm);

RepositoryFileApi

// 获取仓库中文件的信息(名称、大小等)和内容
RepositoryFile file = gitLabApi.getRepositoryFileApi().getFile("file-path", 1234, "ref");   

ResourceLabelEventsApi

// 获取指定合并请求的标签事件
List<LabelEvent> labelEvents = gitLabApi.getResourceLabelEventsApi()
        .getMergeRequestLabelEvents(projectId, mergeRequestIid);

RunnersApi

// 获取所有运行器
List<Runner> runners = gitLabApi.getRunnersApi().getAllRunners();

SearchApi

// 全局搜索项目
List<?> projects = gitLabApi.getSearchApi().globalSearch(SearchScope.PROJECTS, "要搜索的文本");

ServicesApi

// 激活/更新Slack通知服务
SlackService slackService =  new SlackService()
        .withMergeRequestsEvents(true)
        .withWebhook("https://hooks.slack.com/services/ABCDEFGHI/KJLMNOPQR/wetrewq7897HKLH8998wfjjj")
        .withUsername("GitLab4J");
gitLabApi.getServicesApi().updateSlackService("project-path", slackService);

SessionApi

// 登录GitLab服务器并获取会话信息
gitLabApi.getSessionApi().login("你的用户名", "你的邮箱", "你的密码");

SnippetsApi

// 获取已认证用户的代码片段列表
List<Snippet> snippets = gitLabApi.getSnippetsApi().getSnippets();

SystemHooksApi

// 获取已安装的系统钩子列表
List<SystemHook> hooks = gitLabApi.getSystemHooksApi().getSystemHooks();

TagsApi

// 获取指定项目ID的标签列表
List<Tag> tags = gitLabApi.getTagsApi().getTags(projectId);

TodosApi

// 获取当前用户所有待办事项的列表
List<Todo> todos = gitLabApi.getTodosApi().gePendingTodos();

UserApi

// 获取用户ID为1的用户信息
User user = gitLabApi.getUserApi().getUser(1);

// 创建一个新用户,不设置密码,将收到重置密码邮件
User userConfig = new User()
    .withEmail("jdoe@example.com")
    .withName("Jane Doe")
</SOURCE_TEXT>
<SOURCE_TEXT>
.withUsername("jdoe");
String password = null;
boolean sendResetPasswordEmail = true;
gitLabApi.getUserApi().createUser(userConfig, password, sendResetPasswordEmail);

WikisApi

// 获取项目wiki中的页面列表
List<WikiPage> wikiPages = gitLabApi.getWikisApi().getPages();

</SOURCE_TEXT>

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号