Git Product home page Git Product logo

azurlanelive2dextract's People

Contributors

perfare avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

azurlanelive2dextract's Issues

图层显示不正常

大佬,我尝试使用您的软件解少女咖啡枪,结果在Cubism3Viewer打开是这样的7F54$LXG0{~2UXSQ%OA$@11
使用了Cubism3SDK后在unity里是这样的
7QRVJ}R42~FIF O BU$5491

更有甚者是直接让Cubism3Viewer崩溃的,请问这是Cubism3的原因吗
l2d01.zip
fu'sha附上文件
J }ZC66XODGCK74HE UQL5N

Ark Royal Live2D Issues

I only tested Ark Royal's Live2D, so this may or may not affect others. I'm using the EN client currently, and when you extract the Live2D and use a program such as Live2DViewerEX on Steam to edit and check the motions, there are a few where her arm will disappear during the motion or something. This happened on Yukariin's fork. Perfare's version, during the login animation, one of her legs would be completely off center.

I've seen something similar to this before when I was originally working on these models, like Atago for instance. Sometimes her animations wouldn't properly work because of the decryption not working fully, but once I got new files from a friend of mine with an updated program, it worked fine afterwards. If need be, I can upload the decrypted asset for Ark Royal to poke around with.

[Request] Motion's UserData restoration

Current implementation is hardcoded to UserDataCount=0 and TotalUserDataSize=0.
But according to Unity SDK it converts motion's user data to AnimationEvent related to motion's AnimationClip. Where event's time is UD time and stringParameter is value.
In Azur Lane's L2D setup all motions except idle has an animation even that calls OnFinishAnim with motion id as arg. Which runs idle animation by default.

can't open .moc3

this error show on logs when i try to open .moc3 with Cubism 3 Viewer(for OC), what did i do wrong?

�[1;31mERROR �[m�[1m[ Exception in thread "AWT-EventQueue-0" net.arnx.jsonic.JSONException: fails to convert {Version=3, FileReferences={Moc=huonululu_3.moc3, Textures=[textures/texture_00.png], Motions=[motions/mission.motion3.json, motions/mail.motion3.json, motions/touch_special.motion3.json, motions/main_1.motion3.json, motions/main_3.motion3.json, motions/touch_head.motion3.json, motions/home.motion3.json, motions/idle.motion3.json, motions/login.motion3.json, motions/wedding.motion3.json, motions/complete.motion3.json, motions/touch_body.motion3.json, motions/main_2.motion3.json, motions/mission_complete.motion3.json], Physics=huonululu_3.physics3.json}, Groups=[{Target=Parameter, Name=LipSync, Ids=[ParamMouthOpenY]}, {Target=Parameter, Name=EyeBlink, Ids=[ParamEyeLOpen, ParamEyeROpen]}]} to class com.live2d.cubism.doc.model.exporter.bv$d: $.FileReferences.Motions[0][0] ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON$Context.convertInternal(JSON.java:1775) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.parse(JSON.java:1182) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.parse(JSON.java:1170) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.decode(JSON.java:707) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.model.exporter.bv$h.a(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.a.b$a.a(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.OWViewerDropFrame.openModel3Json(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.OWViewerDropFrame.openMoc(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.OWViewerDropFrame.openFile(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.OWViewerDropFrame.access$openFile(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.U.a(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.U.invoke(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.util.W.c(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.OWViewerDropFrame.openAs(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.OWViewerDropFrame.access$openAs(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.J.a(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.cubism.doc.modeling.ui.viewerForOriginalWorkflow.J.invoke(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.ui.control.d.a(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.ui.control.d.invoke(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.ui.menu.CMenuItem.doAction_exe(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at com.live2d.ui.control.c.actionPerformed(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.DefaultButtonModel.setPressed(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.AbstractButton.doClick(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Component.processMouseEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at javax.swing.JComponent.processMouseEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Component.processEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Container.processEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Component.dispatchEventImpl(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Container.dispatchEventImpl(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Component.dispatchEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Container.dispatchEventImpl(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Window.dispatchEventImpl(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.Component.dispatchEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue.dispatchEventImpl(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue.access$500(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue$3.run(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue$3.run(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.security.AccessController.doPrivileged(Native Method) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue$4.run(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue$4.run(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.security.AccessController.doPrivileged(Native Method) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventQueue.dispatchEvent(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventDispatchThread.pumpEvents(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventDispatchThread.pumpEvents(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at java.awt.EventDispatchThread.run(Unknown Source) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ Caused by: java.lang.UnsupportedOperationException: Cannot convert class java.lang.String to class com.live2d.cubism.doc.model.exporter.bv$g ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.ObjectConverter.convert(Converter.java:1676) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.postparse(JSON.java:1310) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON$Context.postparseInternal(JSON.java:1754) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.CollectionConverter.convert(Converter.java:1472) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.postparse(JSON.java:1310) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON$Context.postparseInternal(JSON.java:1754) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.MapConverter.convert(Converter.java:1589) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.postparse(JSON.java:1310) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON$Context.postparseInternal(JSON.java:1754) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.ObjectConverter.convert(Converter.java:1650) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.postparse(JSON.java:1310) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON$Context.postparseInternal(JSON.java:1754) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.ObjectConverter.convert(Converter.java:1650) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON.postparse(JSON.java:1310) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ at net.arnx.jsonic.JSON$Context.convertInternal(JSON.java:1762) ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m
�[1;31mERROR �[m�[1m[ ... 58 more ]�[m �[1;31mat jp.noids.ui.c.f$a (f$a.kt:-1) write()�[m

[BUG] Model3Json不符合规范以及Motion中片段数量

model3.json不符合规范

model3.json中,按照Cubism 3规范,Motions的值必须为对象而非数组。
一些浏览程序并不支持数组。

{
  "Version": 3,
  "FileReferences": {
    "Moc": "banrenma_2.moc3",
    "Textures": [
      "textures/texture_00.png"
    ],
    "Motions": {
		"Idle": [
			  {"File":"motions/idle.motion3.json"},
			  {"File":"motions/home.motion3.json"},
			  {"File":"motions/main_1.motion3.json"}
			],
		"TapBody": [
			  {"File":"motions/touch_body.motion3.json"},
			  {"File":"motions/touch_special.motion3.json" },
			  {"File":"motions/touch_head.motion3.json"},
			  {"File":"motions/main_2.motion3.json"}
			]
    },
    "Physics": "banrenma_2.physics3.json"
  },
//...

motion3.json中片段节点没有计算

程序代码生成motion3.json时没有计算TotalSegmentCount和TotalPointCount的值。
每条Curve由Segment和Point组成。
每条Curve由Segment和Point组成
Segment有4种:线性曲线(Linear=0)、贝赛尔曲线(Bezier=1)、阶梯曲线(Stepped=2)、反向阶梯曲线(InverseStepped=3)。

      "Segments": [
        0,		//点(0,1)
        1,
        0,		//线性曲线
        1,		//点(1,0)
        0,
        0,		//线性曲线
        4.8,		//点(4.8,1)
        1
      ]

参考CubismMotionSegmentTypeCubismMotion::parse(),计算方式如下

	totalPointCount = 0;
	totalSegmentCount = 0;

	foreach (var curve in curves)
	{
		for (var segmentPosition = 0; segmentPosition < curve.Segments.Count; )
		{
			if (segmentPosition == 0)
			{
				totalPointCount += 1;
				segmentPosition += 2;
			}

			var segment = (int)curve.Segments[segmentPosition];
			switch (segment)
			{
				//case Linear: 
				case 0:
					totalPointCount += 1;
					segmentPosition += 3;
					break;
				//case Bezier: 
				case 1:
					totalPointCount += 3;
					segmentPosition += 7;
					break;
				//case Stepped: 
				case 2:
					totalPointCount += 1;
					segmentPosition += 3;
					break;
				//case InverseStepped: 
				case 3:
					totalPointCount += 1;
					segmentPosition += 3;
					break;
				default:
					throw new Exception($"Unknown segment type of the curve.");
			}

			totalSegmentCount++;
		}
	}

生成的motion3.json中全都为线性曲线

如上所说,segment包含多种类型。而程序生成的segment都是线性曲线。
错误示例
提尔比茨的灵异易拉罐

Latest Live2D Can't be extract

Azur Lane got a Update and i Can't Extract the files anymore.
older files works just fine.

ハンドルされていない例外: SevenZip.DataErrorException: Data Error
   場所 SevenZip.Compression.LZMA.Decoder.Code(Stream inStream, Stream outStream, Int64 inSize, Int64 outSize, ICodeProgress progress)
   場所 AssetStudioCore.SevenZipHelper.StreamDecompress(Stream inStream, Stream outStream, Int64 inSize, Int64 outSize)
   場所 AssetStudioCore.BundleFile.ReadFormat6(EndianBinaryReader bundleReader, Boolean padding)
   場所 AssetStudioCore.BundleFile..ctor(String path, EndianBinaryReader bundleReader)
   場所 AzurLaneLive2DExtract.Program.Main(String[] args)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.