pcroland / deew Goto Github PK
View Code? Open in Web Editor NEWDolby Encoding Engine Wrapper
Home Page: https://deew.dev
License: MIT License
Dolby Encoding Engine Wrapper
Home Page: https://deew.dev
License: MIT License
Currently DEE fails with weird characters such as ñ
.
Hi, there is a 3/1 DTS channel configuration, which is 3 front channels (right, center, left) and 1 surround channel. This format cannot be encoded to any of the Dolby formats, as they require either 2, 4, 6, or 8 channels.
What about automatically doubling the surround channel (multiply by sqrt(2) each surround to maintain the same sound level) and adding a dummy (empty) LFE channel to create a compatible 5.1 input layout?
What that be possible?
if --keeptemp is not set, temp files are removed after processing is complete, but the temp directory itself does not get removed, causing an empty directory to stay behind.
There's no error handling for the config file
python3 deew.py -i ~/Videos/Back\ to\ the\ Future_audio.mka -o /home/user/Videos -f ddp -b 768 -k
Running the following commands:
ffmpeg -y -drc_scale 0 -i [input] -c:a:0 pcm_s24le -filter_complex pan=7.1|c0=c0|c1=c1|c2=c2|c3=c3|c4=c6|c5=c7|c6=c4|c7=c5 -rf64 always [output] && dee
-x [input]
XML validation failed:
element surround_90_degree_phase_shift: Schemas validity error : Element 'surround_90_degree_phase_shift': This element is not expected.
XML validation failed:
element surround_90_degree_phase_shift: Schemas validity error : Element 'surround_90_degree_phase_shift': This element is not expected.
This happened with lfe_lowpass_filter
before the error above, I commented it out in xml_base.py
to see if it would continue and then got the error above. Any ideas on what the issue might be? Same command runs fine from the Windows side.
As you can see, I am testing deew a lot.
I have found that with very complex files. the progress bar doesn't work as intended, as it jumps from zero to 100% and doesn "scroll" at all.
My environment is pure Windows 11 (no WSL), with Command prompt under Terminal Preview.
deew python only version
Hi, thanks a lot for the tool. Could it be possible to have the option of converting a truehd with atmos audio to a DDP keeping the atmos as a JOC? Thanks!
In the case of seasonal episodes, it would be nice to have an option to recurse directories to encode every audio file inside them.
Hi
I don't know if Windows version of DEE supports this but I would love to preserve Atmos objects when encoding TrueHD to DDP 7.1
I know these files are technically possible, this is a sample from Dolby.UHD.Blu-Ray.Demo.Disc.March.2018
Audio #2
ID : 4353 (0x1101)
Menu ID : 1 (0x1)
Format : E-AC-3 JOC
Format/Info : Enhanced AC-3 with Joint Object Coding
Commercial name : Dolby Digital Plus with Dolby Atmos
Format profile : Blu-ray Disc
Format settings : Dolby Surround EX
Muxing mode : Stream extension
Codec ID : 132
Duration : 2 min 39 s
Bit rate mode : Constant
Bit rate : 1 664 kb/s
Channel(s) : 8 channels
Channel layout : L R C LFE Ls Rs Lb Rb
Sampling rate : 48.0 kHz
Frame rate : 31.250 FPS (1536 SPF)
Compression mode : Lossy
Stream size : 31.6 MiB (2%)
Service kind : Complete Main
Complexity index : 16
Number of dynamic objects : 15
Bed channel count : 1 channel
Bed channel configuration : LFE
Description of the the bug
deew tries to encode mono TrueHD
Version
Latest
OS
Every
Description of the the bug
Hi
I recently upgraded from DEEW 3.0.1 to 3.2.1
Now all TrueHD to DDP encoding fails with this error:
pcm_to_ddp: Check input and downmix config. Resulting output channels: 0 is not allowed. Valid value(s): 8.
DTS-MA to DDP works fine.
I am using DEE 5.2.1 and ffmpeg 7.0 essentials
Command used:
deew.exe -i input.mkv -ti 1 -o C:\_audio
DDP profile is set to bluray 1536
After restoring DEEW 3.0.1 everything works fine again.
Version
3.2.1
OS
Windows 10
Given a proper input format. it would be of some use to have the input bitrate exposed too in the deew banner.
Might not be possible, but i've found that some applications that run commandline apps are unable to run deew due to the stdout console output format.
Would it be possible to add a basic mode arg that just list things in plain old console messages rather than the nice formatted console messages which we love to see when running manually?
Description of the the bug
Hi
deew has some issues if temp file(s) matching current file exist in the temp folder.
Scenario:
I start encoding a file and abort after a few minutes while the measure phase is still in progress.
Then I start encoding the same file again:
"Intermediate already exists for the following file(s): " is displayed.
After this warning I observed two different scenarios:
Sometimes encoding fails with "Cannot create a file when that file already exists"
Sometimes encoding will succeed only to the point where preexisting temp file ends.
If original analysis was interrupted after processing 30 minutes the second encode will produce a 30 minute file.
There should an option (probably a default) to ignore/delete/overwrite any preexisting temp files.
If there is no such option (or user does not use it) encoder should stop with an error/warning.
Version
5.2.1
OS
Windows 10
Hi, thank you very much for the very useful package.
Description of the the bug
After upgrading to deew 3.2.0
, I got the following error:
Traceback (most recent call last):
File "/opt/homebrew/bin/deew", line 8, in <module>
sys.exit(main())
^^^^^^
File "/opt/homebrew/lib/python3.11/site-packages/deew/__main__.py", line 1005, in main
job.result()
File "/opt/homebrew/Cellar/[email protected]/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/_base.py", line 449, in result
return self.__get_result()
^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/Cellar/[email protected]/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/_base.py", line 401, in __get_result
raise self._exception
File "/opt/homebrew/Cellar/[email protected]/3.11.6_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/concurrent/futures/thread.py", line 58, in run
result = self.fn(*self.args, **self.kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.11/site-packages/deew/__main__.py", line 480, in encode
if aformat != 'thd' and version.parse(simplens.dee_version) >= version.parse('5.2.0') and not encoding_step:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.11/site-packages/packaging/version.py", line 54, in parse
return Version(version)
^^^^^^^^^^^^^^^^
File "/opt/homebrew/lib/python3.11/site-packages/packaging/version.py", line 200, in __init__
raise InvalidVersion(f"Invalid version: '{version}'")
packaging.version.InvalidVersion: Invalid version: '5.2.0-master'
The problem seems to be that deew
sees my DEE
version as 5.2.0-master
and no longer accept it.
Version
No error shows up with deew 3.0.1
or even with deew 3.1.0
. The error appears with version deew 3.1.1
or higher.
OS
macOS Sonoma.
Description of the the bug
I'm using 64-bit Windows 7 and the message above appears when I call deew on the command-line.
After I click the OK button, then there appears a new error message:
«Error loading Python DLL 'C:\TEMP-D~1\New-TMP_MEI21602\python310.dll'.
LoadLibrary: The specified module could not be found.»
Which is weird, because the README.md says:
``Python (you don't need it if you use a standalone build of deew)´´.
_FWIW: MEI21602 is a directory created and used by yt-dlp.exe :–/
Version
Latest.
OS
64-bit Windows 7.
Description of the the bug
DEE fails when passed a filename containing a Unicode character.
e.g. The Movie - Part II – Return of the Unicode (1993)
Version
3.2.1
OS
Windows 10 x64
I saw that deew creates files with core,
Would be possible to select the core type (format, channels, etc) or to have none at all?
Description of the the bug
An input file containing &
causes the dee
call to fail.
Version
2.9.3
OS
Windows 10 x64
Example
deew -f ddp -i "B:\Harold & Kumar Go to White Castle (2004).mkv" -la -k
Encoding summary
┌─────────────────┬──────────────────────────────┐
│ Version │ 2.9.3 │
│ Latest │ 2.9.3 │
├─────────────────┼──────────────────────────────┤
│ DEE version │ 5.2.1 │
│ ffmpeg version │ 5.1.1-essentials_... │
│ ffprobe version │ 5.1.1-essentials_... │
├─────────────────┼──────────────────────────────┤
│ Input │ │
│ Channels │ 7.1 │
│ Bit depth │ 24 │
├─────────────────┼──────────────────────────────┤
│ Output │ │
│ Format │ DDP │
│ Channels │ 7.1 │
│ Bitrate │ 1024 kbps │
│ Dialnorm │ auto (0) │
├─────────────────┼──────────────────────────────┤
│ Other │ │
│ Files │ 1 │
│ Max instances │ 6 │
│ Delay │ 0 ms or parsed from filename │
│ Temp path │ B:\Utilities\deew\temp │
└─────────────────┴──────────────────────────────┘
Running the following commands:
ffmpeg -y -drc_scale 0 -i B:\Harold & Kumar Go to White Castle (2004).mkv -map 0:a:0 -c pcm_s24le -filter_complex
"[a:0]pan=7.1|c0=c0|c1=c1|c2=c2|c3=c3|c4=c6|c5=c7|c6=c4|c7=c5" -rf64 always B:\Utilities\deew\temp\Harold & Kumar Go to
White Castle (2004).wav && dee -x B:\Utilities\deew\temp/Harold_&_Kumar_Go_to_White_Castle_(2004).xml
wav: Storage: File "B:\Utilities\deew\temp\Harold & Kumar Go to White Castle (2004).wav" does not exist.
wav: DEE Exception: Could not access mediainfo input file. ().
input[0]:audio[0]:wav[0]: Input stage (input[0]:audio[0]:wav[0]) run failed.
wav: Storage: File "B:\Utilities\deew\temp\Harold & Kumar Go to White Castle (2004).wav" does not exist.
wav: DEE Exception: Could not access mediainfo input file. ().
input[0]:audio[0]:wav[0]: Input stage (input[0]:audio[0]:wav[0]) run failed.
[ DEE: measure | Harold & Kumar Go to Whit... ] ---------------------------------------- 100.00%
xml
<?xml version="1.0" encoding="utf-8"?>
<job_config>
<input>
<audio>
<wav version="1">
<file_name>"Harold & Kumar Go to White Castle (2004).wav"</file_name>
<timecode_frame_rate>not_indicated</timecode_frame_rate>
<offset>auto</offset>
<ffoa>auto</ffoa>
<storage>
<local>
<path>"B:\Utilities\deew\temp"</path>
</local>
</storage>
</wav>
</audio>
</input>
<filter>
<audio>
<pcm_to_ddp version="3">
<loudness>
<measure_only>
<metering_mode>1770-3</metering_mode>
<dialogue_intelligence>true</dialogue_intelligence>
<speech_threshold>20</speech_threshold>
</measure_only>
</loudness>
<encoder_mode>ddp71</encoder_mode>
<bitstream_mode>complete_main</bitstream_mode>
<downmix_config>off</downmix_config>
<data_rate>1024</data_rate>
<timecode_frame_rate>not_indicated</timecode_frame_rate>
<start>0:00:00.005333</start>
<end>end_of_file</end>
<time_base>file_position</time_base>
<prepend_silence_duration>0.0</prepend_silence_duration>
<append_silence_duration>0.0</append_silence_duration>
<lfe_on>true</lfe_on>
<dolby_surround_mode>not_indicated</dolby_surround_mode>
<dolby_surround_ex_mode>no</dolby_surround_ex_mode>
<user_data>-1</user_data>
<drc>
<line_mode_drc_profile>music_light</line_mode_drc_profile>
<rf_mode_drc_profile>music_light</rf_mode_drc_profile>
</drc>
<custom_dialnorm>0</custom_dialnorm>
<lfe_lowpass_filter>true</lfe_lowpass_filter>
<surround_90_degree_phase_shift>false</surround_90_degree_phase_shift>
<surround_3db_attenuation>false</surround_3db_attenuation>
<downmix>
<loro_center_mix_level>-3</loro_center_mix_level>
<loro_surround_mix_level>-3</loro_surround_mix_level>
<ltrt_center_mix_level>-3</ltrt_center_mix_level>
<ltrt_surround_mix_level>-3</ltrt_surround_mix_level>
<preferred_downmix_mode>loro</preferred_downmix_mode>
</downmix>
<allow_hybrid_downmix>false</allow_hybrid_downmix>
<embedded_timecodes>
<starting_timecode>off</starting_timecode>
<frame_rate>auto</frame_rate>
</embedded_timecodes>
</pcm_to_ddp>
</audio>
</filter>
<output>
<ec3 version="1">
<file_name>"Harold & Kumar Go to White Castle (2004).ec3"</file_name>
<storage>
<local>
<path>"B:\"</path>
</local>
</storage>
</ec3>
</output>
<misc>
<temp_dir>
<clean_temp>true</clean_temp>
<path>"B:\Utilities\deew\temp"</path>
</temp_dir>
</misc>
</job_config>
Description of the the bug
While running deew in a Ubuntu VM, my vdisk wasn't large enough (only 25GB). So when encoding certain files, it would run out of space. However this wasn't clear because deew swallowed the real exception from FFMPEG and continued on as if it was successful. By manually running the ffmpeg step myself I was able to find the real issue. How this would end up presenting though deew would be:
wav: DEE Exception: Mediainfo xml parse failed (-1).
input[0]:audio[0]:wav[0]: Input stage (input[0]:audio[0]:wav[0]) run failed.
Version
deew 3.2.1
OS
Ubuntu 24.04 LTS
Hello :)
I tried the 2.2.2 (or 2.2.3) on W10 and py 3.10.5 and seems like progress bar crashes after the ffmpeg command:
Running the following commands:
ffmpeg -y -drc_scale 0 -i [input] -c:a:0 pcm_s24le -rf64 always [output] && dee -x [input]
Traceback (most recent call last):
File "G:\Mon Drive\Encoding\Tools\deew\deew.py", line 766, in <module>
main()
File "G:\Mon Drive\Encoding\Tools\deew\deew.py", line 710, in main
with pb:
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 1079, in __exit__
self.stop()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 1065, in stop
self.live.stop()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\live.py", line 142, in stop
self.refresh()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\live.py", line 213, in refresh
self._live_render.set_renderable(self.renderable)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\live.py", line 195, in renderable
renderable = self.get_renderable()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\live.py", line 98, in get_renderable
self._get_renderable()
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 1437, in get_renderable
renderable = Group(*self.get_renderables())
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 1442, in get_renderables
table = self.make_tasks_table(self.tasks)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 1466, in make_tasks_table
table.add_row(
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 1471, in <genexpr>
else column(task)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 518, in __call__
renderable = self.render(task)
File "C:\Users\xxx\AppData\Local\Programs\Python\Python310\lib\site-packages\rich\progress.py", line 654, in render
total=max(0, task.total),
TypeError: '>' not supported between instances of 'NoneType' and 'int'
When I comment pb code parts it works great, without progress bar then ;)
I tried to fix with pip3 install rich[jupyter]
but it doesn't do anything.
Regards.
Please add a switch to remove the prompt:
Consider using qaac or opus for mono and stereo encoding, are you sure you want to use dee? [y/n]:
Description of the the bug
Program fails to execute due to rich not being able to render to the terminal
Traceback (most recent call last):
File "__main__.py", line 6, in <module>
File "deew\__main__.py", line 551, in main
File "rich\__init__.py", line 73, in print
File "rich\console.py", line 1646, in print
File "rich\console.py", line 848, in __exit__
File "rich\console.py", line 806, in _exit_buffer
File "rich\console.py", line 1999, in _check_buffer
File "rich\_windows_renderer.py", line 17, in legacy_windows_render
File "rich\_win32_console.py", line 442, in write_styled
File "rich\_win32_console.py", line 403, in write_text
File "encodings\cp1252.py", line 19, in encode
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1-5: character maps to <undefined>
[15076] Failed to execute script '__main__' due to unhandled exception!
Version
deew 2.9.3
OS
System Agnostic but tested on Windows 11
The usual convention for demuxed audio files is usually something such as
whatever DELAY 9ms.anything
and the value can be both positive and negative.
It would be nice that deew could parse the delay and apply it automatically to have a neutral delay output file.
I have tried to convert different audio files with dee(w) and other commercial products, such as TotalCode Studio and the last version of Adobe Audition that supports DD+.
dee(w) consistently creates smaller files. How can that be possible?
Mediainfo for dee(w) created file:
General
Complete name : F:\In\1_48 Solid state society\[jpn]dee(w).eac3
Format : E-AC-3
Format/Info : Enhanced AC-3
Commercial name : Dolby Digital Plus
File size : 459 MiB
Duration : 1 h 40 min
Overall bit rate mode : Constant
Overall bit rate : 640 kb/s
Audio
Format : E-AC-3
Format/Info : Enhanced AC-3
Commercial name : Dolby Digital Plus
Format settings : Dolby Surround EX
Duration : 1 h 40 min
Bit rate mode : Constant
Bit rate : 640 kb/s
Channel(s) : 8 channels / 6 channels
Channel layout : L R C LFE Ls Rs Lb Rb / L R C LFE Ls Rs
Sampling rate : 48.0 kHz
Frame rate : 31.250 FPS (1536 SPF)
Compression mode : Lossy
Stream size : 459 MiB (100%)
Service kind : Complete Main
Mediainfo for TotalCode Studio file:
General
Complete name : F:\In\1_48 Solid state society\[jpn]TotalCodeStudio.eac3
Format : E-AC-3
Format/Info : Enhanced AC-3
Commercial name : Dolby Digital Plus
File size : 498 MiB
Duration : 1 h 48 min
Overall bit rate mode : Constant
Overall bit rate : 640 kb/s
Audio
Format : E-AC-3
Format/Info : Enhanced AC-3
Commercial name : Dolby Digital Plus
Duration : 1 h 48 min
Bit rate mode : Constant
Bit rate : 640 kb/s
Channel(s) : 8 channels / 6 channels
Channel layout : L R C LFE Ls Rs Lb Rb / L R C LFE Ls Rs
Sampling rate : 48.0 kHz
Frame rate : 31.250 FPS (1536 SPF)
Compression mode : Lossy
Stream size : 498 MiB (100%)
Service kind : Complete Main
This should not interfere with the system clock, and should be hooked onto the dee.exe process
Hoping you'd be willing to explain the rationale behind the channel swapping logic, for my own understanding. Thank you.
Description of the the bug
I was getting some mysterious failures during the ffmpeg step of deew so I passed in the -la
flag so I could grab the exact command and run it myself. Turns out an &
in the filename was causing the second half of the filename to be interpreted as an unknown command. I found I was able to get around this (outside of deew, running it myself) by wrapping the input and output in quotes.
Version
deew 3.2.1
OS
Ubuntu 24.04 LTS
Rather than just an output directory (parse can just check for a file extension?)
This is for use in places where your code/system may already have an intended output location/filename. Currently you'd need to add some janky custom step to find the file output by deew and then rename it to the expected filename
Using 2.9.5 and have and issue here. So I was trying to encode a 5.1 audio with in DD with 448 kbps, forced -31 dn and getting the dynamics compression for some reason (on top of lowering whole file volume even with -31 dn). Same results with -27 DN value. Am I missing something? Haven't have something like that with neither Dolby Media Production Suite or just ffmpeg.
it's about "queen 2013"'s audio, it seems ffmpeg will create a near 20G wav and then deew will delete the wav and the xml.
could the py set output folder and not autodelete?
the before 7.1 ddp create sucessful
maybe dee crashed?
It would be nice to have a place in configuration file where to store the default bitrates for the number of audio channels, such as:
7.1: 640 kbps
5.1: 320 kbps
2.0: 128 kbps
and so.
Currently each subprocess.run
uses a different thread. The ThreadPoolExecutor
and deew itself also uses one. This creates a situation where the max workers is limited to the number of threads - 2 and you need at least 3 threads to encode even a single file.
Currently, 6.1 inputs are disallowed. Is it possible to allow 6.1 and either upmix to 7.1 (by using Cb as Lb and Rb) or downmix to 5.1 (by mixing Cb into Ls and Rs)? Thanks.
version 1.2.9
deew.py -i Break\ up\ club\ -\ Blu-ray_track1_\[chi\]_DELAY\ 0ms.thd
encoding DDP7.1@1536...
Running the following commands for the encode:
ffmpeg -y -drc_scale 0 -i Break up club - Blu-ray_track1__DELAY 0ms.thd -c:a:0 pcm_s24le -filter_complex pan=7.1|c0=c0|c1=c1|c2=c2|c3=c3|c4=c6|c5=c7|c6=c4|c7=c5 -rf64 always
Break up club - Blu-ray_track1__DELAY 0ms.wav && dee -x Break up club - Blu-ray_track1__DELAY 0ms.xml
XML validation failed:
element encoder_mode: Schemas validity error : Element 'encoder_mode': The value 'bluray' is not an element of the set {'ddp', 'dd', 'ddp71'}.
element data_rate: Schemas validity error : Element 'data_rate': The value '1536' is not an element of the set {'32', '40', '48', '56', '64', '72', '80', '88', '96', '104',
'112', '120', '128', '144', '160', '176', '192', '200', '208', '216', '224', '232', '240', '248', '256', '272', '288', '304', '320', '336', '352', '368', '384', '400', '448',
'512', '576', '640', '704', '768', '832', '896', '960', '1008', '1024'}.
XML validation failed:
element encoder_mode: Schemas validity error : Element 'encoder_mode': The value 'bluray' is not an element of the set {'ddp', 'dd', 'ddp71'}.
element data_rate: Schemas validity error : Element 'data_rate': The value '1536' is not an element of the set {'32', '40', '48', '56', '64', '72', '80', '88', '96', '104',
'112', '120', '128', '144', '160', '176', '192', '200', '208', '216', '224', '232', '240', '248', '256', '272', '288', '304', '320', '336', '352', '368', '384', '400', '448',
'512', '576', '640', '704', '768', '832', '896', '960', '1008', '1024'}.
[ dee: measure | Break up club - B...] ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.0% 0:00:00
Description of the the bug
Recent versions of nightly FFmpeg refuse to create 8ch wav files. Creating w64 files and adjusting the xml file accordingly seems to solve the problem.
Proposition
Change wav extension to w64 in deew. (at least for 8ch audios)
Hello,
In the code we can read this line :
if bitrate > 1024:
xml_base['job_config']['filter']['audio']['pcm_to_ddp']['encoder_mode'] = 'bluray'
However, according to the documentation, bluray encoder_mode should be available for ddp 7.1 >= 768kbps
I think the behavior in the code should be modified (or at least the encoder_mode could be specified in the arguments)
Thank you !
allow_overwrite
for configA config helper that
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.